本文深入闡述如何運(yùn)用 SEGGER Embedded Studio 內(nèi)置的項(xiàng)目導(dǎo)入器,將 IAR EWARM 項(xiàng)目導(dǎo)入其中。借助該項(xiàng)目導(dǎo)入器,你擁有兩種選擇:一是在 Embedded Studio 環(huán)境中繼續(xù)沿用 IAR 工具鏈;二是采用 Embedded Studio 內(nèi)部集成的 SEGGER 工具鏈。當(dāng)你成功將項(xiàng)目遷移至 Embedded Studio 后,能夠直接受益于諸多強(qiáng)大功能,例如多線程編譯功能,大幅提升編譯效率;快速且便捷的項(xiàng)目搜索功能,能讓你在繁雜的項(xiàng)目文件中迅速定位所需;精準(zhǔn)的索引功能,為開發(fā)工作提供更多便利。
值得一提的是,即便你最終決定繼續(xù)在 Embedded Studio 中使用 IAR 工具鏈,依然有許多實(shí)用功能可供使用。
一、設(shè)置
以下導(dǎo)入教程將基于特定的硬件和軟件組合展開:
· SEGGER Embedded Studio 5.32a 64 位版本(項(xiàng)目導(dǎo)入器在 3.10 或更高版本均可正常工作)
· IAR EWARM 8.50
· 目標(biāo)評估板:SEGGER emPower
為方便你進(jìn)行實(shí)踐操作,以下文件提供了示例項(xiàng)目:IAR_to_ES_Tutorial.zip
https://kb.segger.com/images/6/6a/IAR_to_ES_Tutorial.zip
二、導(dǎo)入教程
1.打開 Embedded Studio,依次點(diǎn)擊 “File -> Import IAR EWARM / Keil MDK Project...”,隨后在文件目錄中導(dǎo)航至你希望導(dǎo)入的項(xiàng)目文件,并將其選中。
2. 此時(shí),你將面臨幾種選擇: · 外部工具鏈:導(dǎo)入項(xiàng)目并將其配置為使用原始的 IAR 工具鏈進(jìn)行構(gòu)建,確保項(xiàng)目在熟悉的工具鏈環(huán)境下運(yùn)行。 · 內(nèi)部工具鏈:導(dǎo)入項(xiàng)目后,為 Embedded Studio 的 SEGGER 工具鏈進(jìn)行相關(guān)配置,充分發(fā)揮 Embedded Studio 的優(yōu)勢。 · 內(nèi)部和外部工具鏈:此選項(xiàng)會創(chuàng)建兩組構(gòu)建配置,一組用于使用原始 IAR 工具鏈構(gòu)建項(xiàng)目,另一組則用于使用 Embedded Studio 的 SEGGER 工具鏈構(gòu)建項(xiàng)目,為你提供最大的靈活性。 · “IAR 安裝目錄”:如果你在系統(tǒng)中安裝了多個不同版本的 IAR EWARM,在這里可以選擇使用不同的外部 IAR 編譯器,滿足多樣化的開發(fā)需求。 3. 為了更順利地遷移到 Embedded Studio,強(qiáng)烈建議你選擇創(chuàng)建內(nèi)部和外部工具鏈的構(gòu)建配置。這樣在后續(xù)的開發(fā)過程中,你可以根據(jù)實(shí)際需求,輕松在兩種工具鏈之間進(jìn)行切換,提升開發(fā)效率。

4. 如果整個導(dǎo)入過程順利無誤,將會彈出一個狀態(tài)窗口,提示成功導(dǎo)入。
5. Embedded Studio 會自動為調(diào)試和發(fā)布版本創(chuàng)建構(gòu)建配置,這些配置分別對應(yīng)內(nèi)部和外部編譯器,且與現(xiàn)有 IAR 項(xiàng)目中已有的配置相匹配。 6. 若要在不同的構(gòu)建配置之間進(jìn)行切換,只需使用 “項(xiàng)目資源管理器” 中的下拉菜單即可輕松實(shí)現(xiàn)。 7. 若要使用 IAR 編譯器調(diào)試示例項(xiàng)目,在下拉菜單中選擇 “Debug_External”,然后按下 F7 鍵即可開始構(gòu)建項(xiàng)目。 8. 對于大多數(shù)項(xiàng)目而言,按照上述步驟操作通常能夠直接成功運(yùn)行。然而,如果出現(xiàn)無法直接構(gòu)建的情況,請參考后續(xù)的 “故障排除” 部分,我們將在那里為你提供詳細(xì)的解決方案。 注意:雖然僅運(yùn)行調(diào)用外部工具鏈的外部配置是可行的,但我們還是建議你切換到內(nèi)部 SEGGER 工具鏈。因?yàn)樵谡{(diào)試使用外部工具鏈創(chuàng)建的代碼時(shí),某些調(diào)試功能可能無法完全發(fā)揮作用,而內(nèi)部 SEGGER 工具鏈能夠提供更全面的功能支持。 三、如何切換到 Embedded Studio 內(nèi)部編譯器 1. 為了充分挖掘 Embedded Studio 的強(qiáng)大潛力,使用基于 Clang 的內(nèi)部 SEGGER 編譯器是必不可少的。 2. 在提供的示例項(xiàng)目中,切換編譯器的操作非常簡單,只需打開下拉菜單并選擇 “Debug_Internal”。 3. 完成上述選擇后,當(dāng)你按下 F7 鍵時(shí),項(xiàng)目將默認(rèn)使用內(nèi)部 SEGGER 編譯器進(jìn)行構(gòu)建。此外,你還可以在項(xiàng)目選項(xiàng)中啟用其他內(nèi)部編譯器,如 gcc/clang,以滿足不同的編譯需求。 4. 使用內(nèi)部編譯器成功構(gòu)建項(xiàng)目后,Embedded Studio 會自動對目標(biāo)設(shè)備上的閃存和 RAM 占用情況進(jìn)行精確計(jì)算,并在輸出窗口中以直觀的方式呈現(xiàn)這些信息,幫助你更好地了解項(xiàng)目的資源使用情況。 注意:此計(jì)算并顯示閃存和 RAM 占用情況的功能僅在使用內(nèi)部編譯器時(shí)才可用。 5. 對于大多數(shù)項(xiàng)目來說,切換到內(nèi)部編譯器的過程較為順利,能夠直接運(yùn)行。但如果遇到無法直接構(gòu)建的情況,請參考 “故障排除” 部分,我們將幫助你解決問題。 如果你計(jì)劃使用內(nèi)部 SEGGER 工具鏈,我們推薦一種更高效的方法:跳過導(dǎo)入工具,直接使用項(xiàng)目向?qū)?chuàng)建一個新項(xiàng)目。若有可用的 CPU 支持包,也一并使用。通過這種方式,所有與 Embedded Studio 和目標(biāo)設(shè)備相關(guān)的項(xiàng)目設(shè)置都將自動配置就緒。此時(shí),你僅需將 IAR 項(xiàng)目中的源文件添加到 Embedded Studio 文件夾中,然后修正 IAR 特定的編譯錯誤,并根據(jù) “故障排除” 部分的說明,最終完成鏈接腳本和內(nèi)存映射的設(shè)置。通常情況下,這種方法能夠節(jié)省大量時(shí)間,提高項(xiàng)目遷移的效率。 四、故障排除 一般來說,導(dǎo)入的項(xiàng)目使用外部工具鏈重新構(gòu)建時(shí),通常能夠直接運(yùn)行,無需過多調(diào)整。然而,對于基于內(nèi)部 SEGGER 工具鏈的項(xiàng)目構(gòu)建配置,可能需要進(jìn)行一些手動更改。 在某些情況下,如果源文件是按照與 Clang 兼容的標(biāo)準(zhǔn)創(chuàng)建的,那么你可以在原始工具鏈和 SEGGER 工具鏈之間實(shí)現(xiàn)無縫切換,無需進(jìn)行額外的調(diào)整。如果原始項(xiàng)目是從軟件包或 SDK 創(chuàng)建的,它可能已經(jīng)包含了與 SEGGER 工具鏈兼容的源文件,這些文件可以直接替換之前與其他工具鏈兼容的文件,從而簡化項(xiàng)目遷移過程。 以下詳細(xì)列出了將項(xiàng)目遷移到 Embedded Studio 時(shí),最常見的需要更改的要點(diǎn): 1.內(nèi)部配置 (1)內(nèi)存鏈接腳本 Embedded Studio 項(xiàng)目導(dǎo)入器不會自動導(dǎo)入鏈接腳本,例如 IAR 的 icf 文件。它僅會為所選目標(biāo)設(shè)備設(shè)置基本的內(nèi)存映射,即將代碼放置到內(nèi)部閃存中,將數(shù)據(jù)放置到內(nèi)部 RAM 中。 對于更為復(fù)雜或特殊的配置需求,你需要相應(yīng)地設(shè)置內(nèi)存映射文件和段放置文件。在 Embedded Studio 中,有以下兩種放置內(nèi)存段的方法可供選擇: · 通過項(xiàng)目選項(xiàng)中的 “Linker -> Memory Segments” 直接進(jìn)行段的放置操作,這種方式簡單直接,適用于一些較為常規(guī)的配置。 · 創(chuàng)建一個內(nèi)存映射.xml 文件,或者對 Embedded Studio 提供的默認(rèn)文件進(jìn)行編輯,然后在項(xiàng)目選項(xiàng)中的 “Linker -> Memory Map File” 中進(jìn)行設(shè)置。這種方式更為靈活,能夠滿足各種復(fù)雜的配置需求。 例如,一個表示具有兩個名為 FLASH 和 RAM 的內(nèi)存段的設(shè)備的內(nèi)存映射文件,在內(nèi)存映射編輯器中的示例如下: <root <="" font="">name="Device1"> <memorysegment <="" font="">name="FLASH1" start="0x10000000" size="0x10000" /> <memorysegment <="" font="">name="RAM1" start="0x20000000" size="0x1000"/> 相應(yīng)的鏈接文件會引用內(nèi)存映射文件中的內(nèi)存段,并詳細(xì)列出要放置在這些段中的節(jié)。關(guān)于 SEGGER 鏈接器的詳細(xì)文檔可點(diǎn)擊此處查看。 若要添加新的段或節(jié),只需對 Embedded Studio 鏈接的默認(rèn)文件進(jìn)行編輯即可。該鏈接文件可以在項(xiàng)目選項(xiàng)中的 “Linker -> Linker Script File” 中找到,方便你進(jìn)行個性化的配置。 (2)第三方軟件庫 第三方軟件,尤其是各類庫,可能是針對某一特定工具鏈進(jìn)行配置的,因此在其他工具鏈中可能無法直接編譯。 在這種情況下,你需要首先檢查是否存在適用于 Embedded Studio/SEGGER 工具鏈的軟件移植版本。如果有,直接使用移植版本即可。若沒有,則需要對軟件進(jìn)行重新配置,并為 Embedded Studio/SEGGER 工具鏈重新構(gòu)建。 需要特別注意的是,盡管為其他工具鏈構(gòu)建的庫可能可以與 Embedded Studio 進(jìn)行鏈接,但在實(shí)際使用中,一定要仔細(xì)檢查與庫的接口是否能夠按照預(yù)期正常工作,避免出現(xiàn)潛在的問題。 (3)匯編代碼 不同工具鏈的匯編代碼語法以及匯編文件中的控制命令存在差異。雖然最終生成的匯編指令可能是相同的,但在編寫匯編代碼時(shí),不同工具鏈的要求卻大不相同。例如,IAR 和 GCC/Clang 對數(shù)值常量的聲明方式就有所不同。 此外,用于輔助編寫匯編代碼的控制命令也存在區(qū)別。符號、標(biāo)簽、函數(shù)定義等的語法需要根據(jù) GNU 匯編器的要求進(jìn)行調(diào)整,以確保代碼能夠在新的工具鏈中正常運(yùn)行。 以下展示了一些常見的匯編指令及其在不同工具鏈中的對應(yīng)替代指令: 如需獲取完整的指令列表,請參考相應(yīng)的匯編器參考手冊,以便在項(xiàng)目遷移過程中準(zhǔn)確地進(jìn)行指令轉(zhuǎn)換。 (4)預(yù)處理器定義 不同的工具鏈?zhǔn)褂酶髯元?dú)特的內(nèi)置定義,用于識別所使用的編譯器,并根據(jù)內(nèi)核、設(shè)備、字節(jié)序以及其他各種設(shè)置進(jìn)行條件編譯。 在項(xiàng)目遷移過程中,必須準(zhǔn)確選擇正確的定義。同時(shí),為了確保代碼的穩(wěn)定性和可靠性,建議在代碼中設(shè)置相關(guān)機(jī)制,當(dāng)所需定義未被定義時(shí),能夠拋出警告或錯誤提示,以便及時(shí)發(fā)現(xiàn)和解決問題。 例如,IAR 定義了__ICCARM__和__IAR_SYSTEMS_ICC__用于識別自身工具鏈,而 Embedded Studio 則定義了__SES_ARM 和__SEGGER_CC__。 對于目標(biāo)設(shè)備,當(dāng)為 Cortex - M4 編譯時(shí),IAR 定義了__ARM7M__和__CORE__=ARM7M,而 Embedded Studio 則使用__ARM_ARCH_7M__來代替,這些細(xì)節(jié)在遷移過程中需要特別留意。 (5)工具鏈內(nèi)建函數(shù) 一些特定于編譯器的函數(shù),如__disable_interrupt () 或__no_operation (),在 Embedded Studio 中可能并不存在。針對這種情況,你需要編寫相應(yīng)的替代函數(shù),以滿足項(xiàng)目的功能需求。如果可能的話,也可以在代碼中避免使用這些在新工具鏈中不可用的函數(shù)。 例如,對于 SEGGER 編譯器,__no_operation () 的替代函數(shù)可以定義如下: #define NO_OPERATION() __asm volatile ("nop") 為了實(shí)現(xiàn)與 IAR 的向后兼容性,可以將這樣的重新定義嵌套在預(yù)處理器定義中。對于 IAR EWARM,使用__ICCARM__;對于 Embedded Studio,使用__SEGGER_CC__,從而確保代碼在不同工具鏈下都能正確運(yùn)行。 (6)項(xiàng)目設(shè)置 在大多數(shù)情況下,項(xiàng)目導(dǎo)入器會自動為外部和內(nèi)部構(gòu)建配置設(shè)置好大部分項(xiàng)目設(shè)置。然而,在一些較為復(fù)雜的項(xiàng)目中,某些項(xiàng)目設(shè)置可能需要手動添加。 例如,默認(rèn)情況下,內(nèi)部構(gòu)建配置不會排除任何文件。這就意味著,如果存在與編譯器不兼容的文件,編譯器在編譯過程中會嘗試對其進(jìn)行編譯,從而導(dǎo)致錯誤的出現(xiàn),比如遇到與 GCC/Clang 不兼容的匯編文件。 若要解決此類問題,你可以在項(xiàng)目資源管理器中右鍵單擊項(xiàng)目,然后選擇 “編輯選項(xiàng)”。關(guān)于各個設(shè)置的詳細(xì)信息,可以在 Embedded Studio 用戶手冊中找到,以便你進(jìn)行更深入的了解和配置。 (7)用戶包含目錄 許多復(fù)雜項(xiàng)目的源文件通常分布在多個不同路徑的文件夾中。在項(xiàng)目遷移過程中,務(wù)必確保在構(gòu)建配置的 “Preprocessor -> User Include Directories” 中包含了所有需要的文件夾,以保證編譯器能夠正確找到并處理這些源文件,避免因文件路徑問題導(dǎo)致的編譯錯誤。 (8)構(gòu)建前 / 后命令 Embedded Studio 提供了類似于 IAR EWARM 中的構(gòu)建前 / 后命令功能。然而,由于 IAR 和 Embedded Studio 之間的語法存在差異,項(xiàng)目導(dǎo)入器不會自動導(dǎo)入這些命令。 如果你在 IAR 中使用了構(gòu)建前 / 后命令,那么在遷移到 Embedded Studio 后,需要在內(nèi)部和外部構(gòu)建配置中相應(yīng)地模擬這些命令。為了實(shí)現(xiàn)這一目的,你可以使用批處理腳本,以便一次執(zhí)行多個命令。 例如,若要啟用鏈接后批處理腳本,你需要進(jìn)入預(yù)期構(gòu)建配置的項(xiàng)目選項(xiàng),找到 “用戶構(gòu)建步驟”,然后編輯 “鏈接后命令” 條目。在該條目中,輸入 bat 文件的相對或絕對路徑以及可選參數(shù),格式如下:路徑 / 示例.bat 參數(shù) 1 參數(shù) 2...,從而確保構(gòu)建前 / 后命令在新的環(huán)境中能夠正常執(zhí)行。 2.外部配置 由于 Embedded Studio 是通過命令行來調(diào)用 IAR 工具鏈的,因此要使外部構(gòu)建能夠正常工作,關(guān)鍵在于確保調(diào)用方式與 IAR EWARM 中的調(diào)用方式一致。項(xiàng)目導(dǎo)入工具會嘗試從 IAR 項(xiàng)目設(shè)置中盡可能多地檢測項(xiàng)目設(shè)置,但由于 IAR IDE 可能會隨著每次更新而發(fā)生變化,某些選項(xiàng)可能無法被正確檢測到。 為了解決這一問題,最簡單的方法是從 IAR 中導(dǎo)出構(gòu)建命令行,并將其與 Embedded Studio 中的設(shè)置進(jìn)行匹配,具體操作步驟如下: 1. 在 IAR EWARM 中打開你的項(xiàng)目。 2. 在 “構(gòu)建” 窗口中右鍵單擊,選擇 “過濾級別:全部”,以便獲取完整的構(gòu)建信息。 3. 重新構(gòu)建項(xiàng)目,將構(gòu)建過程中的所有信息記錄下來。 4. 將構(gòu)建日志復(fù)制到文本編輯器中,方便后續(xù)查看和對比。 5. 關(guān)閉 IAR EWARM,打開 Embedded Studio。 6. 在 Embedded Studio 的項(xiàng)目資源管理器中右鍵單擊項(xiàng)目,選擇 “導(dǎo)出構(gòu)建”,獲取當(dāng)前項(xiàng)目的構(gòu)建設(shè)置。 7. 仔細(xì)對比 IAR EWARM 和 Embedded Studio 的構(gòu)建命令行。如果發(fā)現(xiàn) Embedded Studio 端缺少某些選項(xiàng),按照以下說明通過 Embedded Studio 項(xiàng)目選項(xiàng)進(jìn)行修正。 (1)修正構(gòu)建配置 要修正 IAR 構(gòu)建命令行和 Embedded Studio 構(gòu)建命令行之間的差異,你需要在 Embedded Studio 中打開項(xiàng)目選項(xiàng)。在大多數(shù)情況下,需要糾正的命令行調(diào)用主要涉及編譯器(iccarm)、匯編器(iasmarm)和鏈接器(ilinkarm)。 你可以通過兩種方式進(jìn)行修正:一是手動設(shè)置相應(yīng)的項(xiàng)目選項(xiàng),這些選項(xiàng)會自動構(gòu)建出正確的命令行;二是直接進(jìn)入項(xiàng)目選項(xiàng)中的 “外部構(gòu)建選項(xiàng)”,在其中直接編輯命令行。 完成上述步驟后,如果你成功地匹配了 IAR EWARM 和 Embedded Studio 的構(gòu)建命令,那么你的應(yīng)用程序應(yīng)該能夠像在原生 IAR 設(shè)置中一樣,順利進(jìn)行構(gòu)建,不會出現(xiàn)錯誤。


