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