導(dǎo)讀:作者:火星
作者:火星
Keil MDK作為嵌入式行業(yè)常用的開發(fā)工具,嵌入式工程師們都很熟悉。但是最近聽說Arm公司要把Keil MDK合并到Arm Development Studio里,所以Keil MDK的版本更新已經(jīng)基本停止了,大家都還在使用很老版本的Keil MDK,功能上并不是很方便,希望找到更好的替代工具。此外,從近期舉辦的包括RISC-V中國峰會在內(nèi)的多個行業(yè)活動來看,RISC-V在中國的發(fā)展如火如荼并且勢頭很猛,因此還要考慮開發(fā)工具是否會長期支持RISC-V并可以通過移植重用相關(guān)設(shè)計(jì)。
但是替代Keil MDK需要考慮項(xiàng)目工程如何遷移到其他工具,由于工程文件格式不同、以及底層編譯技術(shù)的差異, Keil MDK的工程文件與其他工具平臺并不完全兼容,需要一定量的遷移工作。本文就根據(jù)筆者的經(jīng)驗(yàn),分享一下如何快速把Keil MDK的代碼遷移到其他平臺,并且解決不同平臺之間項(xiàng)目文件不兼容的問題。
目前遷移Keil MDK代碼常見的目標(biāo)平臺有兩個,分別是GCC和IAR。下面就給大家分別介紹并比較一下兩者的區(qū)別:
概覽:
項(xiàng)目遷移流程對比:
首先要聲明,遷移項(xiàng)目分為兩大部分工作,第一是項(xiàng)目文件格式的適配,第二是項(xiàng)目代碼的適配。
關(guān)于非標(biāo)指令的遷移,這里不做介紹,因?yàn)樯婕暗闹噶钐?,不可能在一篇里介紹完,大家碰到了可以單獨(dú)處理。
下面為大家介紹下通用的項(xiàng)目工程遷移指導(dǎo):
從Keil遷移到GCC
一般需要修改以下內(nèi)容:
遷移之后還要進(jìn)行驗(yàn)證,包含編譯結(jié)果的驗(yàn)證,編譯后可執(zhí)行文件代碼尺寸、運(yùn)行速度的驗(yàn)證和調(diào)整。如果代碼尺寸或者運(yùn)行速度不達(dá)標(biāo),還需要調(diào)整編譯器優(yōu)化選項(xiàng)。調(diào)整優(yōu)化選項(xiàng)后,記得也要重新測試代碼執(zhí)行結(jié)果是否符合預(yù)期,因?yàn)椴煌膬?yōu)化選項(xiàng)可能造成代碼運(yùn)行結(jié)果的變化。
從Keil遷移到IAR
如果是遷移到IAR,推薦使用IAR官方的項(xiàng)目轉(zhuǎn)換工具IAR Project Converter,遷移過程就會非常方便。在IAR的Embedded Workbench for Arm工具的菜單欄里,點(diǎn)擊Tools à IAR Project Converter, 就可以自動把Keil的工程文件和代碼轉(zhuǎn)換成IAR格式,最后再把.s啟動文件換成IAR格式的就可以,一般在芯片公司提供的代碼示例里都有不同格式的.s文件,直接找到IAR版本的替換原有的就可以。當(dāng)然遷移之后還是要校驗(yàn)一下編譯是否正常,測試下代碼是否運(yùn)行正常。如果用IAR,基本不用擔(dān)心代碼體積變大,或者運(yùn)行速度拖慢,IAR擁有非常好的編譯優(yōu)化,一般情況下編譯結(jié)果會更優(yōu),只需要找到合適的編譯選項(xiàng)就OK了。
總結(jié):
Keil項(xiàng)目遷移到其他平臺技術(shù)上可行,尤其是代碼中不涉及非標(biāo)的C/C++代碼時,具備項(xiàng)目遷移經(jīng)驗(yàn)的情況下是完全可實(shí)施的,需要擔(dān)心的只是工作量的問題。
至于選擇遷移到IAR還是GCC,主要考慮以下幾點(diǎn):
以上內(nèi)容基于自己的經(jīng)驗(yàn)和知識總結(jié),希望對各位考慮項(xiàng)目遷移的朋友們有幫助,如果有錯誤,歡迎指正!