DSP28335 Flash装载到RAM运行 ramfuncs段分析

一般情况我们在非调试模式下,需要把程序装载在Flash中,但为了运行快速,我们希望在RAM中运行。对于小型程序,可以采取将函数放在ramfuncs段中,再把ramfuncs段设置为Flash装载,RAM运行。下面将分析一下实现过程。

ramfuncs               : LOAD = FLASHD, 
                         RUN = RAML0, 
                         LOAD_START(_RamfuncsLoadStart),/*装载起始地址*/
                         LOAD_END(_RamfuncsLoadEnd),,/*装载结束地址*/
                         RUN_START(_RamfuncsRunStart),,/*运行起始地址*/
                         PAGE = 0/*第0页,代表位于program memory中*/
FLASHD      : origin = 0x320000, length = 0x008000     /* on-chip FLASH */
RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */                         

首先要在.cmd文件中定义这个段,FLASHD是FLASH中某个存储空间,RAML0是RAM中某个存储空间,表明了装载是在FLASH中,运行时在RAM中的。注意这里只是起说明作用,DSP不会自动把指令放到RAM中去,需要在代码里用MemCopy函数把指令copy到RAM中去。 下面将演示如何操作。

extern uint16  *RamfuncsLoadStart;//必须用extern,因为它们是外部定义变量
extern uint16  *RamfuncsLoadEnd;
extern uint16  *RamfuncsRunStart;
#pragma CODE_SECTION(myfuncs,"ramfuncs");//myfuncs即是你定义的函数,为它关联到ramfuncs这个段
void myfuncs()
{
/*
do something
*/
}
MemCopy((uint16*)&RamfuncsLoadStart,(uint16 *)&RamfuncsLoadEnd,(uint16*)&RamfuncsRunStart);//将FLASH中的指令代码Copy到RAM中

这样就可以运行啦!

你可能感兴趣的:(DSP28335)