DSP

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

2019-07-13 10:53发布

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