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吗