hightec的編譯鏈接文件的后綴為ld,因此后文簡稱ld文件,ld文件主要分為三個部分:宏定義、MEMORY命令、SECTIONS命令。
1.宏定義
宏定義部分如下圖所示,該部分主要定義ld文件中常用的宏,便于ld文件的可讀性,格式如上圖所示。模板定義了STACK、CAS、HEAP、中斷相關的幾個宏,可以按照實際需求添加。
2.MEMORY命令
MEMORY命令主要用于劃分內存空間,將內存空間按照用途和種類劃分為區域,并定義各區域的名稱、大小、起始地址。模板提供的內存劃分如下圖所示:
內存主要分為兩部分:RAM和FLASH。RAM又分為DSPR和PSPR,DSPR主要存儲變量、堆棧和上下文,PSPR主要存儲一些特殊用途的代碼。FLASH也分為PFLASH和DFLASH,PFLASH主要用于存儲非易失性代碼和常數,而DFLASH常用于模擬EPPROM,存儲代碼運行過程中產生的非易失性數據。
上圖中的MEMORY命令是對整個片上的RAM和FLASH資源進行劃分和定義,圖中整個分為3個部分:PFLASH、RAM、FLASHLOADER。
PFLASH主要劃分了幾個必要區域,如圖3.2所示,主要包括:BMI、Startup Code、Trap Table、Interrupt Table、Constant、Executable Code、Calibaration、OB Data、Backup。模板劃分的區域對PFLASH完成了基礎覆蓋,基本保證了每個區域空間冗余,同時也預留了部分空間用于區域擴展。模板并沒有對DFLASH進行劃分,這是因為DFLASH被用于模擬EPPROM,不參與代碼區域劃分。
RAM分為CPU0、CPU1、CPU2、LMU四個部分,前三個部分的RAM區域分別為核心1/2/3本地RAM,而LMU為芯片全局RAM。每個核心的本地RAM都依次劃分為7個區域:Calibration、SafeTLib、Local Data、Heap、Stack、CSA、Local Program;LMU作為芯片全局變量RAM,只劃分一個區域。如此一來對全部RAM空間進行了劃分。
FLASHLOADER作為特定功能代碼,單獨開辟PFLASH和PSPR空間來存放其功能代碼。
3.SECTIONS命令
“section”分為輸出段和輸入段,輸入段是在代碼中定義的section,輸出段是在LD文件的SECTIONS命令里定義的section,鏈接的過程就是將代碼中的輸入段鏈接到LD文件中的輸出段中,然后再將輸出段鏈接到MEMORY命令定義的區域中,從而實現代碼至內存地址的唯一鏈接,而SECTIONS命令完成了輸出段的定義,輸入段至輸出段的鏈接、輸出段至MEMORY區域的鏈接這三個過程。
一個軟件工程的源代碼可分成若干個輸入段,如.text、.rodata、.data、.bss等等,這些輸入段表示了代碼的屬性。.text代表code;.rodata代表常數;.data代表非0全局變量;.bss代表未初始化全局變量。這些輸入段都是默認段類型,編譯器自動將代碼分解成各個段類型,除此之外還有如圖3.3的段默認類型。
當用戶需要自行建立新的輸入段時,只需要在代碼中定義好該段,并在SECTIONS命令中按語法鏈接至MEMORY區域中即可。這個過程中要注意兩點,一個是輸入段與輸出段按照規范命名,另一個是鏈接時的順序。
輸入段命名規范:.段類型.屬性.描述?!岸晤愋汀笔侵冈摱蔚哪J段類型,如.bss;“屬性”是指該段的范圍屬性,如.Shared、.CPUx;“描述”是對該段的功能或特征描述。例:
a.“.text.CPU1.Ramcode”:該段是需要加載至核1的PSPR中運行的代碼。
b.“.rodata.Shared.DEFAULT_CONST_32BIT”:該段是32位的三核心共用的常數段。
c.“.sdata.CPU1.Private”:該段是核1的專用非0全局變量。
輸出段的命名規范:.屬性_描述_段類型。與輸出段相比,除了第一個“.”,其他間隔符都使用的“_”;屬性、描述和段類型的順序也做了改變;另外,輸出段命名只使用大寫字母。例:“.CPU1_RAMCODE_TEXT”、“. CPU0_PRIVATE_SDATA”。
輸入段和輸出段命名可以省略“屬性”或“描述”。
鏈接時,如果存在輸入段名字沖突的情況,會優先按照在前面的輸入段鏈接命令執行,如下圖所示。
".rodata.*"中的"*"是一個通配符,所以與“.rodata.FLSLOADERRAMCODE”產生沖突,最后編譯結果:輸入段".rodata.FLSLOADERRAMCODE"鏈接至區域“PMU_PFLASH0_CONST”,而非“FLSLOADER_RAM_CODE”。若要解決該問題,就需要修改輸入段的命名,或者將其順序提到“.rodata.*”前面去。
審核編輯:湯梓紅
-
中斷
+關注
關注
5文章
895瀏覽量
41401 -
文件
+關注
關注
1文章
561瀏覽量
24703 -
命令
+關注
關注
5文章
678瀏覽量
21987 -
編譯
+關注
關注
0文章
654瀏覽量
32814 -
宏定義
+關注
關注
0文章
50瀏覽量
9002
原文標題:淺談hightec的編譯鏈接文件
文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論