MDK以及DS5等工具中主推的編譯器已經(jīng)更換為armclang編譯器。而原來(lái)的armcc編譯器已經(jīng)不再更新,只是提供一些更新,所以我就對(duì)armclang進(jìn)行了一些測(cè)試。
測(cè)試的芯片是STM32怨规,使用ST公司最新推出的Cube HAL庫(kù)。直接新建一個(gè)工程之后锡足,直接將編譯器更改為armclang編譯不通過(guò)波丰。
錯(cuò)誤一:提供找不到‘__weak’
解決方案:"__weak"的定義是在stm32f1xx_hal_def.h文件中。其中有關(guān)于各種編譯器的定義部分舶得。理論上armclang應(yīng)該是會(huì)定義__GNU__的掰烟,可能由于MDK的bug或是其它原因,這部分并沒(méi)有定義,所以需要手動(dòng)增加針對(duì)armclang編譯器的定義纫骑。
修改后代碼如下:
錯(cuò)誤二:嵌入式匯編部分報(bào)錯(cuò)
這個(gè)是由于armclang嵌入?yún)R編基本和GNU C類似蝎亚,不同于armcc編譯器,所以這部分需要修改先馆。但是我覺(jué)得這是很好的地方发框,因?yàn)檫@樣以后學(xué)習(xí)STM32的朋友可以更容易的學(xué)習(xí)linux。