TI中文支持网
TI专业的中文技术问题搜集分享网站

如何知道某个函数在RAM中运行还是在FLASH中运行

本产品使用了TMS320F2808芯片,想要大部分代码在FLASH中运行,关键的几个c函数在RAM中运行以提高速度。关键代码如下。

main.c文件中相关代码如下:

/* These are defined by the linker (see F2808.cmd) */
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

void main(void)
{

……….

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);  // Copy time critical code and Flash setup code to RAM
InitFlash();  // Call Flash Initialization to setup flash waitstates,This function must reside in RAM

GpioDataRegs.GPASET.bit.GPIO2 = 1; // GPIO2=1
rfft(x,256);  // 25.6ms;
GpioDataRegs.GPACLEAR.bit.GPIO2 =1; // GPIO2=0

}

RealFFT.c文件中相关代码如下

#pragma CODE_SECTION(rfft, "ramfuncs");  // 去掉此行,测量到函数rfft的执行时间不变,为25.6ms

void rfft(float x,int n)

{

……

}

f2808.cmd文件中相关代码:

SECTIONS
{
/* Allocate program areas: */
.cinit : > FLASHA PAGE = 0
.pinit : > FLASHA, PAGE = 0
.text : > FLASHA PAGE = 0
codestart : > BEGIN PAGE = 0
ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

……

请帮忙分析代码,是否rfft函数真的在RAM中执行?

有没有简单的方法知道某个c函数是在RAM中运行还是在FLASH中运行?

Brian Wang0:可以通过编译生成的map file查看代码是否在ram当中运行

本产品使用了TMS320F2808芯片,想要大部分代码在FLASH中运行,关键的几个c函数在RAM中运行以提高速度。关键代码如下。

main.c文件中相关代码如下:

/* These are defined by the linker (see F2808.cmd) */
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

void main(void)
{

……….

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);  // Copy time critical code and Flash setup code to RAM
InitFlash();  // Call Flash Initialization to setup flash waitstates,This function must reside in RAM

GpioDataRegs.GPASET.bit.GPIO2 = 1; // GPIO2=1
rfft(x,256);  // 25.6ms;
GpioDataRegs.GPACLEAR.bit.GPIO2 =1; // GPIO2=0

}

RealFFT.c文件中相关代码如下

#pragma CODE_SECTION(rfft, "ramfuncs");  // 去掉此行,测量到函数rfft的执行时间不变,为25.6ms

void rfft(float x,int n)

{

……

}

f2808.cmd文件中相关代码:

SECTIONS
{
/* Allocate program areas: */
.cinit : > FLASHA PAGE = 0
.pinit : > FLASHA, PAGE = 0
.text : > FLASHA PAGE = 0
codestart : > BEGIN PAGE = 0
ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

……

请帮忙分析代码,是否rfft函数真的在RAM中执行?

有没有简单的方法知道某个c函数是在RAM中运行还是在FLASH中运行?

user3461267:

回复 Brian Wang0:

能详细说下如何查看map file吗?
我的代码有问题吗?

本产品使用了TMS320F2808芯片,想要大部分代码在FLASH中运行,关键的几个c函数在RAM中运行以提高速度。关键代码如下。

main.c文件中相关代码如下:

/* These are defined by the linker (see F2808.cmd) */
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

void main(void)
{

……….

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);  // Copy time critical code and Flash setup code to RAM
InitFlash();  // Call Flash Initialization to setup flash waitstates,This function must reside in RAM

GpioDataRegs.GPASET.bit.GPIO2 = 1; // GPIO2=1
rfft(x,256);  // 25.6ms;
GpioDataRegs.GPACLEAR.bit.GPIO2 =1; // GPIO2=0

}

RealFFT.c文件中相关代码如下

#pragma CODE_SECTION(rfft, "ramfuncs");  // 去掉此行,测量到函数rfft的执行时间不变,为25.6ms

void rfft(float x,int n)

{

……

}

f2808.cmd文件中相关代码:

SECTIONS
{
/* Allocate program areas: */
.cinit : > FLASHA PAGE = 0
.pinit : > FLASHA, PAGE = 0
.text : > FLASHA PAGE = 0
codestart : > BEGIN PAGE = 0
ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

……

请帮忙分析代码,是否rfft函数真的在RAM中执行?

有没有简单的方法知道某个c函数是在RAM中运行还是在FLASH中运行?

Seven Han:

回复 user3461267:

关于map 文件您可以看下wiki链接:
processors.wiki.ti.com/…/Files_in_CCS_Projects

本产品使用了TMS320F2808芯片,想要大部分代码在FLASH中运行,关键的几个c函数在RAM中运行以提高速度。关键代码如下。

main.c文件中相关代码如下:

/* These are defined by the linker (see F2808.cmd) */
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;

void main(void)
{

……….

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);  // Copy time critical code and Flash setup code to RAM
InitFlash();  // Call Flash Initialization to setup flash waitstates,This function must reside in RAM

GpioDataRegs.GPASET.bit.GPIO2 = 1; // GPIO2=1
rfft(x,256);  // 25.6ms;
GpioDataRegs.GPACLEAR.bit.GPIO2 =1; // GPIO2=0

}

RealFFT.c文件中相关代码如下

#pragma CODE_SECTION(rfft, "ramfuncs");  // 去掉此行,测量到函数rfft的执行时间不变,为25.6ms

void rfft(float x,int n)

{

……

}

f2808.cmd文件中相关代码:

SECTIONS
{
/* Allocate program areas: */
.cinit : > FLASHA PAGE = 0
.pinit : > FLASHA, PAGE = 0
.text : > FLASHA PAGE = 0
codestart : > BEGIN PAGE = 0
ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

……

请帮忙分析代码,是否rfft函数真的在RAM中执行?

有没有简单的方法知道某个c函数是在RAM中运行还是在FLASH中运行?

mangui zhang:

回复 user3461267:

map只有编译没错时会在工程目录下生成。代码烧写都是在flash中 要在ram中跑 上电需做部分搬移或全部搬移

赞(0)
未经允许不得转载:TI中文支持网 » 如何知道某个函数在RAM中运行还是在FLASH中运行
分享到: 更多 (0)