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

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

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

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

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

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

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

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

評(píng)論