本文描述如何將IAR EWARM項目遷移到SEGGER Embedded Studio(簡稱SES)中。通過Embedded Studio內(nèi)置的項目導(dǎo)入器,用戶可以在SES中繼續(xù)使用IAR工具鏈或使用Embedded Studio內(nèi)部集成的SEGGER工具鏈。將項目遷移到Embedded Studio,可以直接受益于SES的強(qiáng)大功能,如多線程編譯,快速簡單的項目搜索,精準(zhǔn)的索引等功能。如果仍然決定在Embedded Studio中使用IAR工具鏈,也有許多可以使用的實(shí)用功能。
項目導(dǎo)入說明基于SEGGER emPower評估板,使用的示例項目可以訪問:https://kb.segger.com/images/6/6a/IAR_to_ES_Tutorial.zip(復(fù)制鏈接到瀏覽器)下載。
1導(dǎo)入步驟
1 打開Embedded Studio,選擇菜單File→Import IAR EWARM Project…,選擇要導(dǎo)入的項目文件Workspace.eww。
2 接下來,設(shè)置使用的工具鏈:
?External Toolchain:導(dǎo)入項目并將其配置為使用原始的IAR工具鏈構(gòu)建。
?Internal Toolchain:導(dǎo)入項目并設(shè)置使用SES工具鏈。
?Internal and External Toolchain:創(chuàng)建兩組構(gòu)建配置,一組使用原始的IAR工具鏈構(gòu)建項目,另一組使用Embedded Studio工具鏈進(jìn)行構(gòu)建。
?“IAR Installation Directory”,用于設(shè)置使用的外部IAR編譯器。
3 為了順利的將項目遷移到Embedded Studio,建議基于Internal and External Toolchain創(chuàng)建構(gòu)建配置,后續(xù)開發(fā)中,可以根據(jù)應(yīng)用需求,輕松地在工具鏈之間切換。
4 如果導(dǎo)入過程順利,將彈出以下狀態(tài)窗口:
5 Embedded Studio將根據(jù)使用的內(nèi)部和外部編譯器為debug和release版本自動創(chuàng)建構(gòu)建配,配置將與IAR項目中已有的配置相匹配。要在不同的構(gòu)建配置之間進(jìn)行切換,可以使用“Project Explorer”中的下拉菜單實(shí)現(xiàn)。
6 要使用IAR編譯器調(diào)試示例項目,請在下拉菜單中選擇“Debug_External”,然后按F7構(gòu)建該項目。
7 對于大多數(shù)項目,都可以通過上述操作導(dǎo)入并成功運(yùn)行,如果出現(xiàn)構(gòu)建錯誤,請參考“故障排除”一節(jié)。
注意:雖然可以僅運(yùn)行調(diào)用外部工具鏈的外部配置,但我們建議切換到SEGGER工具鏈,因?yàn)樵谡{(diào)試外部工具鏈創(chuàng)建的代碼時,某些調(diào)試功能不可用。
2如何切換到EmbeddedStudio內(nèi)部編譯器
為了充分利用Embedded Studio的功能,需要使用SEGGER內(nèi)部編譯器,該編譯器基于Clang。
在提供的示例項目中,通過下拉菜單選擇“Debug_Internal”,按F7后,項目將使用SEGGER內(nèi)部編譯器構(gòu)建。如需使用其他內(nèi)部編譯器,如gcc,可以在項目options中啟用。
使用內(nèi)部編譯器成功構(gòu)建項目之后,Embedded Studio將自動計算應(yīng)用的Flash和RAM占用情況,并在輸出窗口中直觀地展示。
注意:此功能僅在使用內(nèi)部編譯器時可用。
如果你計劃使用SEGGER工具鏈,我們建議跳過導(dǎo)入工具,直接使用項目向?qū)?chuàng)建一個新項目。如果有可用CPU的支持包,可以基于支持包和向?qū)Х绞絼?chuàng)建新項目。通過這種方式,所有與Embedded Studio及目標(biāo)相關(guān)的項目設(shè)置將自動配置。用戶僅需將IAR項目中的源代碼文件添加到Embedded Studio文件夾中,并修正特定于IAR的編譯錯誤,并參考故障排除一節(jié)說明,修訂鏈接器腳本和內(nèi)存映射設(shè)置,這種方法能夠節(jié)省大量時間,提高項目遷移效率。
3故障排除
導(dǎo)入的項目可以直接使用外部工具鏈重新構(gòu)建運(yùn)行,但如果基于SEGGER內(nèi)部工具鏈構(gòu)建,可能需要對項目構(gòu)建配置進(jìn)行一些手動更改。
通常情況下,如果源代碼按Clang兼容的標(biāo)準(zhǔn)創(chuàng)建,這些文件可以直接在SEGGER工具鏈中使用。如果項目是基于軟件包或SDK創(chuàng)建,它可能已經(jīng)包含了SEGGER工具鏈兼容的源文件,使用這些文件取代以前工具鏈兼容的文件即可。
以下列出了將項目遷移到Embedded Studio時,需要更改的要點(diǎn)
3.1 內(nèi)部配置
內(nèi)存鏈接器腳本
Embedded Studio項目導(dǎo)入器不會自動導(dǎo)入鏈接器腳本(如IAR的icf文件)。它僅為選定的目標(biāo)處理器設(shè)置基本內(nèi)存映射,將代碼放入內(nèi)部Flash,并將數(shù)據(jù)放入內(nèi)部RAM中。
對于更復(fù)雜或特殊的配置,必須相應(yīng)地設(shè)置內(nèi)存映射文件和段放置文件。
在Embedded Studio中有兩種方式可以設(shè)置內(nèi)存段的放置:
1 通過項目options中的“Linker→Memory Segments”選項直接放置段。
2 創(chuàng)建一個內(nèi)存映射.xml文件或編輯Embedded Studio提供的默認(rèn)文件,并設(shè)置“Linker→Memory Map File”指向該文件。
示例如下,一個具有兩個名為FLASH和RAM的內(nèi)存段的設(shè)備內(nèi)存映射文件:
相應(yīng)的鏈接器文件將引用內(nèi)存映射文件的內(nèi)存段,并列出要放置在這些段中的節(jié)。
要添加新的段或節(jié),只需編輯Embedded Studio提供的默認(rèn)文件。使用鏈接的文件可以在“Linker→Linker Script File”選項中找到。
第三方軟件和庫
第三方軟件,特別是庫,可能是基于某個工具鏈配置,無法用其他工具鏈直接編譯。
檢查是否有Embedded Studio/SEGGER工具鏈的軟件庫移植版本,或者基于SEGGER工具鏈配置并重構(gòu)軟件庫。
盡管基于其它工具鏈構(gòu)建的庫可以鏈接到Embedded Studio,但實(shí)際運(yùn)行時,還需檢查與庫的接口是否按預(yù)期工作,避免系統(tǒng)錯誤。
匯編代碼
匯編程序代碼和控制命令的語法在不同的工具鏈中存在差異。盡管最終的匯編指令是相同的,但是在不同的工具鏈上編寫的匯編代碼可能不同,例如,IAR和GCC/Clang編譯器中,數(shù)值常量聲明方式并不相同。
編寫匯編代碼的控制命令也存在區(qū)別。符號、標(biāo)簽、函數(shù)定義等的語法需要根據(jù)編譯器要求進(jìn)行調(diào)整,確保代碼在新的工具鏈中正常工作。
下表顯示了一些常用的匯編指令及其在不同工具鏈中的指令代替:
完整的指令列表可以參考相應(yīng)的匯編手冊。
預(yù)處理器定義
不同的工具鏈?zhǔn)褂貌煌念A(yù)定義來識別所使用的編譯器,并允許基于core、device、endianness和其他設(shè)置進(jìn)行條件編譯。
在項目遷移時,必須選擇正確的定義,并建議在未定義所需條件時產(chǎn)生警告或錯誤提示。
IAR定義了__ICCARM__和__IAR_SYSTEMS_ICC__用于標(biāo)識自身工具鏈,Embedded Studio定義了__SES_ARM和__SEGGER_CC__。
對于目標(biāo)設(shè)備,IAR在編譯Cortex-M4時定義了__ARM7M__和__CORE__=__ARM7M__,而Embedded Studio則使用__ARM_ARCH_7M__替代。
工具鏈內(nèi)聯(lián)函數(shù)
一些特定于編譯器的函數(shù),如__disable_interrupt()或__no_operation()在Embedded Studio中并不存在。需編寫相應(yīng)的替換函數(shù)或避免使用類似函數(shù)。
對于SEGGER編譯器,__no_operation()的替換函數(shù)可以定義為:
為了實(shí)現(xiàn)與IAR的向后兼容性,重定義可以嵌套在預(yù)處理器定義中。IAR EWARM使用__ICCARM__,Embedded Studio使用__SEGGER_CC__。
項目設(shè)置
大多數(shù)項目設(shè)置都是由項目導(dǎo)入器為外部和內(nèi)部構(gòu)建配置自動設(shè)置的。在一些更復(fù)雜的項目中,需要手動添加某些項目設(shè)置。
例如,默認(rèn)情況下,內(nèi)部構(gòu)建配置中不會排除任何文件,所以如果存在編譯器不兼容的文件,編譯器將嘗試編譯它并顯示錯誤(例如GCC/Clang不兼容的匯編文件)。
可以Project Explorer右鍵單擊項目,并選擇“Edit options”修改。
用戶包含目錄
許多復(fù)雜項目的源代碼分布在不同路徑的多個文件夾中。確保所有需要的文件夾都包含在“Preprocessor→User Include Directories”下的構(gòu)建配置中。
Pre/Post Build命令
Embedded Studio提供了類似IAR EWARM中的pre/post構(gòu)建命令。然而,由于IAR和Embedded Studio之間的語法存在差異,項目導(dǎo)入器不會自動導(dǎo)入這些命令。
如果在IAR中使用這些命令,請確保在Embedded Studio的內(nèi)部和外部構(gòu)建配置中相應(yīng)地模擬這些指令。要一次執(zhí)行多個命令,也可以使用批處理腳本。
例如,要啟用post-link批處理腳本,可以打開項目options中的構(gòu)建配置,在“User build Step”下編輯post-link Command命令。在該條目中,輸入bat文件的相對或絕對路徑以及可選參數(shù),格式如下:路徑/ Example.bat Param1 Param2…。
3.2 外部配置
由于Embedded Studio只是通過命令行調(diào)用IAR工具鏈,因此只需以與EWARM相同的方式調(diào)用它即可使外部構(gòu)建工作。導(dǎo)入工具將嘗試從IAR項目設(shè)置中檢測盡可能多的項目設(shè)置。但是,由于IAR IDE可能會隨著更新而變化,因此可能無法正確檢測到某些選項。
要解決這個問題,最簡單的方法是從IAR導(dǎo)出build命令行,并將其與Embedded Studio中的設(shè)置進(jìn)行匹配,操作步驟如下:
在EWARM中打開IAR項目
在Build窗口中右鍵單擊并選擇Filter Level:All
重新構(gòu)建項目
將構(gòu)建日志復(fù)制到編輯器中
關(guān)閉EWARM并打開Embedded Studio
在項目資源管理器中右鍵單擊項目并選擇Export Build
比較EWARM和Embedded Studio的構(gòu)建命令行,查看Embedded Studio缺少的選項并修正。
修正構(gòu)建配置
要修正IAR構(gòu)建命令行和Embedded Studio之間的差異,只需在Embedded Studio打開項目options。在大多數(shù)情況下必須糾正針對編譯器(iccarm)、匯編器(iasmarm)和鏈接器(ilinkarm)的命令行調(diào)用。用戶可以自己設(shè)置構(gòu)建命令行的相應(yīng)項目選項,或者直接轉(zhuǎn)到項目選項中的外部構(gòu)建選項并直接編輯命令行。
完成上述步驟后,如果成功地匹配了EWARM和Embedded Studio的構(gòu)建命令,那么應(yīng)用程序可以基于Embedded Studio成功構(gòu)建了。
麥克泰技術(shù)提供SEGGER Embedded Studio商業(yè)授權(quán),具有豐富的軟件開發(fā)與調(diào)試工具使用方面的知識和經(jīng)驗(yàn),歡迎咨詢info@bmrtech.com。
-
IAR
+關(guān)注
關(guān)注
5文章
361瀏覽量
36910 -
Embedded
+關(guān)注
關(guān)注
0文章
48瀏覽量
22369 -
編譯器
+關(guān)注
關(guān)注
1文章
1645瀏覽量
49468 -
Studio
+關(guān)注
關(guān)注
2文章
197瀏覽量
29070 -
評估板
+關(guān)注
關(guān)注
1文章
574瀏覽量
29613
原文標(biāo)題:如何將項目從IAR遷移到Embedded Studio
文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論