前面的文章如何在IAR Embedded Workbench中把變量和函數(shù)放到指定的section介紹了如何把變量和函數(shù)放到指定的section,其中把函數(shù)放到指定的section可以通過下面幾種方法:
使用 @ 操作符
使用 GCC 風格的section屬性 __attribute__ ((section ))
使用 #pragma location 命令
使用 #pragma default_function_attributes 命令
這幾種方法都需要修改源代碼,如果對應源代碼不方便修改,那么對應函數(shù)默認會放到.text section。最新發(fā)布的IAR Arm開發(fā)工具鏈9.70.1版本增加了??function_sections編譯選項可以把函數(shù)放到單獨的section。
本文主要介紹在IAR Arm開發(fā)工具鏈中不修改源代碼的情況下使用??function_sections編譯選項把函數(shù)放到單獨的section。
01默認section
IAR Arm開發(fā)工具鏈中默認的section如下,其中函數(shù)/代碼默認會放到.text section:
02使用??function_sections編譯選項把函數(shù)放到單獨的section
下面通過具體的例子介紹在IAR Arm開發(fā)工具鏈中??function_sections編譯選項的使用。
對函數(shù)不做任何section放置處理
這里以CrcCheck函數(shù)為例,首先不做任何section放置處理,查看map文件發(fā)現(xiàn)CrcCheck函數(shù)會放到默認的.text section:
使用??function_sections編譯選項
使用--function_sections編譯選項把函數(shù)放到單獨的section:
查看map文件發(fā)現(xiàn)CrcCheck函數(shù)放到了使用--function_sections編譯選項生成的.text.CrcCheck section:
修改源代碼把函數(shù)放到指定的section
修改源代碼把函數(shù)放到指定的section,比如使用#pragmalocation命令將CrcCheck函數(shù)放到指定的.CrcCheck section
#pragmalocation =".CrcCheck" voidCrcCheck(void)
查看map文件發(fā)現(xiàn)CrcCheck函數(shù)放到了指定的.CrcCheck section:
03總結(jié)
本文介紹了在IAR Arm開發(fā)工具鏈中不修改源代碼的情況下使用??function_sections編譯選項把函數(shù)放到單獨的section。對應函數(shù)的section放置優(yōu)先級順序如下:
如果源代碼里面把函數(shù)放到指定的section,那么對應的函數(shù)會放到指定的section。
如果源代碼里面沒有把函數(shù)放到指定的section,使用了??function_sections編譯選項,那么對應函數(shù)會放到單獨的section(對應單獨section的名字是.text.加上對應函數(shù)的名字,比如CrcCheck函數(shù)會放到.text.CrcCheck section)。
如果源代碼里面沒有把函數(shù)放到指定的section,也沒有使用??function_sections編譯選項,那么函數(shù)會放到默認的.text section。
注意事項:
當前IAR Arm開發(fā)工具鏈庫文件中的函數(shù)會放到.text section。
如果函數(shù)使用了__ramfunc關(guān)鍵字,對應函數(shù)默認會放到.text.rw section,對應Kind是inited,默認會放到RAM地址區(qū)域;但是如果使用了??function_sections編譯選項,對應函數(shù)會放到單獨的section,對應Kind是ro code, 默認會放到ROM地址區(qū)域。需要對相關(guān)section使用對應的initialize命令其Kind才會從ro code變成inited (更多關(guān)于initialize命令的信息,可以參考IAR Embedded Workbench中的初始化策略),同時需要把對應section放到RAM地址區(qū)域。
當前IAR Arm開發(fā)工具鏈中沒有類似GCC中的-fdata-sections編譯選項,因為在ICF文件中可以把變量放到指定的block。
如果可以修改源代碼,建議修改源代碼把對應的關(guān)鍵函數(shù)放到指定的section,因為??function_sections編譯選項有可能會影響編譯優(yōu)化:
-
ARM
+關(guān)注
關(guān)注
134文章
9353瀏覽量
377558 -
IAR
+關(guān)注
關(guān)注
5文章
381瀏覽量
37466 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64879 -
源代碼
+關(guān)注
關(guān)注
96文章
2953瀏覽量
68384 -
開發(fā)工具鏈
+關(guān)注
關(guān)注
0文章
22瀏覽量
1717
原文標題:在IAR Arm開發(fā)工具鏈中使用??function_sections編譯選項把函數(shù)放到單獨的section
文章出處:【微信號:IAR愛亞系統(tǒng),微信公眾號:IAR愛亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Keil MDK 和 IAR 兩款ARM開發(fā)工具區(qū)別比較
Keil MDK 和 IAR 兩款ARM開發(fā)工具區(qū)別
Quake Global選擇IAR Systems的開發(fā)工具
ARM開發(fā)工具集
ARM開發(fā)工具解讀

IAR EWARM軟件免費下載(嵌入式應用編程開發(fā)工具)

ARM教程之ARM常用開發(fā)工具及相應開發(fā)環(huán)境配置資料說明

米爾科技ARM DS-5開發(fā)工具介紹

IAR EW430開發(fā)工具的使用教程

KeilMDK和IAR兩款ARM開發(fā)工具比較

KeilMDK和IAR兩款ARM開發(fā)工具哪個比較好

如何利用現(xiàn)代嵌入式開發(fā)工具中的堆棧保護功能

評論