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

关于cmd中的SECTIONS部分

xiaobo wu:

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

程序代码存放在FLASHA中,为何要从FLASHD加载

xiaobo wu:

回复 xiaobo wu:

另外,因为变量和常量比较多,我把.stack放入FLASHA中,可以吗?它是如何调动的?

xiaobo wu:

回复 xiaobo wu:

.stack不是放入FLASHA,是放入定义为PAGE 1中的FLASHC中

kuntay:

回复 xiaobo wu:

ramfuncs  

是自己定义的段,FLASHD与RAML0都放

xiaobo wu:

回复 kuntay:

不明白。代码在FLASHA中,为什么从FLASHD中加载程序到RAM?

step by step:

回复 xiaobo wu:

在相应的程序中应该有些函数之前会有诸如#pragma CODE_SECTION(Example_CallFlashAPI,"ramfuncs");之类的语句,表示函数,如Example_CallFlashAPI,会被加载到FLASHD中,但会在RAML0中运行,也就是我们常说的从flash中搬移程序到ram中执行。所以在调用函数之前要完成_RamfuncsLoadStart到_RamfuncsLoadEnd之间的程序(flashd中)搬移到_RamfuncsRunStart开始的ram中的操作,不然程序会跑飞。

不过这里应该可以把FLASHD改成FLASHA的。

xiaobo wu:

回复 step by step:

你说”会被加载到FLASHD中,但会在RAML0中运行“,你的意思是.text程序代码从FLASHA中加载到FLASHD中,然后再到RAML0中运行?还是说这个函数在FLASHD中把FLASHA中的代码搬到RAM中运行?

因为你没有提到FLASHA,所以我不知道这样询问是不是合适,不要见怪。

Young Hu:

回复 xiaobo wu:

.stack不能放入Flash中,只能放在低64K的Ram中!

stack是用于临时变量,函数调用等的使用,有大量的数据读写改,Flash满足不了要求。

xiaobo wu:

回复 Young Hu:

主要是因为.bss太大,如果将.stack放入ram里面,ram空间不够。可以将.bss或.sysmem放入flash吗

赞(0)
未经允许不得转载:TI中文支持网 » 关于cmd中的SECTIONS部分
分享到: 更多 (0)