一般情况我们在非调试模式下,需要把程序装载在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中
这样就可以运行啦!