淺談這些年如何被MDK, IAR, GCC和廠家SDK版本兼容性“蹂躪”, 一代版本一代坑

原創文章,轉載請註明出處:https://www.armbbs.cn/forum.php?mod=viewthread&tid=119562


 

版本迭代是嵌入式開發永久的痛,這麼多年不知道浪費了多少時間在版本迭代上。

部分系統組件還好點,有個LTS長期支持版,而廠家SDK和IDE環境可謂慘不忍睹,一代版本一代坑。


視頻版:

https://www.bilibili.com/video/BV1qu4y1d7wV


【MDK】

剛開始接觸M內核芯片的時候就是用的這款IDE,最早有MDK2(主要是51使用), MDK3,  進入MDK4後,MDK4.54算是一個經典版本,最早搞M內核那波人,很多人都是用的這個版本上手的。

迭代到MDK4.74後,開啓了MDK5時代,剛開始的MDK5.0X和MDK5.1X就是填坑,所以用MDK4轉載到MDK5的人還不是很多。


1、進入到MDK5.2X後,開始第1個分水嶺。

芯片廠家新出的新品沒法再用MDK4,必須轉戰到MDK5了。KEIL爲了緩解用戶的對MDK4的依賴,推出MDK5後,僅接着搞了個MDK5對MDK4的兼容包。初期推廣的時候,很多人不知道這個兼容包。

將MDK4使用MDK5強行打開後,各種各樣的問題,被搞得頭都大了。把所有的例子都用MDK5重新創建下,有點不現實,例子太多了。後來不斷摸索,搞了個騷操作,直接修改MDK4工程後綴 uvproj 改成 MDK5的後綴 uvprojx即可,大部分例子都可以這麼方便的使用MDK5打開。

2、第2個分水嶺,MDK5編譯HAL庫

MDK5 AC5編譯HAL庫帶brower info堪稱史詩級災難,編譯10來分鐘都是小意思。編譯慢就算了,電腦CPU都飆到100%了,電腦什麼都幹不了,只能乾等着。

爲了緩解用戶的焦慮,開始推進MDK AC6,剛開始的時候還挺開心,帶browser info編譯速度快了很多,當編譯完畢後,發現go to def不能用,研究了下,原來是把browser info生成搞到了後臺。實際總時間和AC5區別不大。


3、第3分水嶺,AC5轉AC6

這個痛點,估計近幾年無法得到解決,因爲市面上大量開源工程依然是MDK AC5創建的,更重要的是工程中一些開源組件不支持MDK AC6,這就給轉戰MDK AC6帶來很大難度。雖然KEIL後來出了AC5轉AC6文檔,但杯水車薪,複雜工程的修改難度太大了。

既然這麼麻煩,爲什麼還要轉戰AC6,因爲AC5從MDK5.37開始正式推出歷史舞臺,後面出的M23,M33,M55,M85等芯片也沒法用AC5了。

現在的大部分工程依然要使用AC5 LINK警告類型


4、第4個分水嶺,MDK RTE創建工程

早期的芯片還支持MDK RTE經典創建方式,這個方式非常好用,也非常給力,這個值得肯定。

後來新出的芯片,同樣是災難級表現,以STM32H7爲例,不再支持經典方式了,RTE必須配合STM32CubeMX一起使用,  而且對應的工程必須使用指定MDK版本,CMSIS版本和STM32H7軟件包版本。


5、第5個分水嶺,MDK軟件包下載問題

本來官網下載就奇卡無比,最近還搞了騷操作,讓本就難用的下載問題“雪上加霜”,軟件包的下載變得超級難用


6、今年年底要發佈MDK6

這個必將又是一頓瘋狂操作。


【IAR】

IAR最早用的是IAR6.3,之後陸續使用了7.x ,8.x和9.x

IAR早期版本最大的缺點就是毫無兼容性可言,你的工程是版本創建的,就必須使用那個版本打開。到後來的IAR8.X和9.X好了很多,可以強制轉換之前老版本創建的程序了。

除了兼容性問題,新出的IAR9.X帶來了一個坑,之前的fputc和fgetc重定向串口沒法用了,必須用他們官方的重定向方式解決。

https://www.armbbs.cn/forum.php?mod=viewthread&tid=109542


[GCC]

基於GCC創建的IDE環境,同樣是各種兼容性問題,以Embedded Studio爲例,之前用V5.X創建的工程,現在使用V7,X就無法正常編譯,直接報錯。

這找誰說理去,網友們一打開,無法正常編譯,這用戶體驗不太舒服。

基於eclipse/vscode/clion + gcc + openocd的玩法,我用的少,沒有研究過版本兼容問題。


[芯片廠家SDK]

芯片廠家的SDK也是各種坑,各種折騰用戶。

以STM32爲例進行說明

(1)標準庫到HAL和LL庫

本來早期的F1,F2,F3,F4等系列,標準庫玩法已經很成熟了,時間關鍵的地方再倒騰下寄存器方式加速實現,大部分項目也夠用。但後面爲了配合STM32CubeMX圖形化開發工具,不得不推出HAL和LL庫。

對於用戶做產品還好點,但像我們這種做開發板的,就是災難,不得不做HAL庫和標準庫兩個版本。甚至必要的情況下還得提供全部使用STM32CubeMX創建的工程。

(2)HAL庫的版本迭代

有時候版本迭代不考慮兼容性,同樣讓人頭疼,以串口代碼爲例,後面的升級竟然直接來個刪除結構體成員的騷操作:

針對各種兼容問題,大家有什麼好的思路來解決這些問題,歡迎分享,個人用倒是沒什麼,但是團隊之間或者網上分享給別,兼容性就不得不考慮了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章