工程開(kāi)發(fā)中,常常會(huì)有這樣的需求:- 標(biāo)定中,需要將常量放入指定位置的PFlash地址空間;
- 特定常量(eg:軟件版本號(hào),VIN等),放入自定義的PFlash地址空間;
- 信息安全中,將指定的校驗(yàn)信息存入指定PFlash地址空間;
如上的場(chǎng)景,都需要將常量存儲(chǔ)指定的PFlash位置。如果是基于Tasking的編譯器,如何操作呢?如果要將常量放入指定的PFlash位置,主要包括兩步:修改鏈接文件、在源文件中將目標(biāo)常量設(shè)定到目標(biāo)段。(一)在鏈接文件(*.lsl)中開(kāi)辟指定的PFlash段(Section) 鏈接文件主要用來(lái)告知鏈接器(Linker),應(yīng)該如何分配變量和函數(shù)的地址空間。具體操作如下所示:#define HSM_MYCONSTANT_ADDRESS 0x8001B000 ......section_layout :ARM:linear { group ( ordered, run_addr=HSM_MYCONSTANT_ADDRESS ) { select ".myConstant"; } } ......
在Section中定義一個(gè)Group,且指定起始的PFlash地址為0x8001B000,將目標(biāo)段(eg:.myConstant)放入該Group中。 注意:Section_layout指定了ARM內(nèi)核的內(nèi)存空間,如果是其他的Core架構(gòu),引用的內(nèi)存空間可能不同,注意區(qū)別。 (二)在源文件(*.c)中定義要設(shè)置的常量 舉例:在源文件(*.c)中定義要存儲(chǔ)的常量MY_CONSTANT,用修飾符const修飾,并將常量放入指定的Section(本文:.myConstant),示意如下所示: __attribute__ ((section (".myConstant"))) const char MY_CONSTANT[8] = {'M','Y','_','C','O','N','S','T'}; 注意:不要用修飾符static限定常量位置,否則,可能導(dǎo)致常量無(wú)法放入指定PFlash地址。首先,可以通過(guò)編譯后的*.map文件確認(rèn)自定義的常量段(.myConstant)是否在預(yù)期的位置,示意如下: 之后,可以進(jìn)一步確認(rèn):設(shè)置的常量是否在預(yù)期的PFlash位置,示意如下:最后,將程序下載到目標(biāo)板,通過(guò)查看Memory,確認(rèn)指定PFlash地址是否是預(yù)期存儲(chǔ)的內(nèi)容,示意如下:
|