在编译的时候出现如下警告:creating output section "ramfuncs" without a SECTIONS specification,经查找发现“ramfuncs”段在“DSP281x_SysCtrl.c”中定义(#pragma CODE_SECTION(InitFlash, "ramfuncs")),CMD文件中没有给它分配空间。
我想问一下这个ramfuncs段是干什么用的,它映射的地址是多少?
非常感谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在编译的时候出现如下警告:creating output section "ramfuncs" without a SECTIONS specification,经查找发现“ramfuncs”段在“DSP281x_SysCtrl.c”中定义(#pragma CODE_SECTION(InitFlash, "ramfuncs")),CMD文件中没有给它分配空间。
我想问一下这个ramfuncs段是干什么用的,它映射的地址是多少?
非常感谢!
zijian,
像Initflash这个函数是对Flash模块进行初始化,规定是不允许在Flash运行这个函数的,所以这个函数要运行时,必须先复制到RAM中。所以才会给出这个的ramfunc的概念,就是就是一些代码,烧写在flash中,但是运行前需要复制到RAM中,再调用这个函数。包括有些代码你需要执行速度快一点(Flash上代码执行速度比RAM慢多了),都可以用这中方法。
所以具体用法是在CMD文件用这样的语法定义:
ramfuncs : LOAD = FLASHD,
RUN = RAML0,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0
这个语法的意思是,这个段中的代码是先加载到FlashD扇区的,但是运行时确实自动在RAML0中去找它的地址。也自动第一了这几个变量RamfuncsLoadStart等。
所以你那些需要放在这个段的函数,就需要在那个函数之前加上这句话:
(#pragma CODE_SECTION(函数名字, "ramfuncs"));
函数定义……
然后在main主函数中,系统初始化之后,要调用memcpy函数,把这个段中的代码复制到RAM中。然后之后你调用这个函数时,它就能够在RAM中执行了。

附录 一下CMD的例子。
Eric