A. Keil切換到armclang編譯器,到底強在哪裡
ARM Compiler 5與AC6的差異主要體現在編譯器框架上。AC6基於現代的LLVM編譯器框架,而AC5則非如此。這導致從AC5遷移至AC6時,項目與源文件需要特別注意一些要點。具體的工具鏈差異,除了C編譯器與預處理器不同外,其他部分基本保持一致。優化與默認設置也可能有所不同,包括編譯選項、固件後綴等,詳情參考相關鏈接。
在Keil MDK 5.27中,用戶可以通過項目選項輕松切換編譯器,包括AC5與AC6。測試顯示,使用AC6構建同一STM32F103CB基於HAL庫的工程,耗時從10秒縮短至5秒。這表明AC6在構建速度上優於AC5,具體差異在於CMSIS中的兼容性處理。在CMSIS_compiler.h文件中,條件編譯選項已通過判斷不同的編譯器版本,包含了對應的頭文件,如armcc與armclang。這使得項目能夠根據系統選擇合適的頭文件。
在AC5與AC6之間切換時,需注意C語言部分的修改,文檔「apnt_298,Migrate ARM Compiler 5 to ARM Compiler 6 MDK Tutorial」提供了詳細指南。對於涉及C與匯編混合編程的底層操作,可能需要進行相應的調整。
添加FreeRTOS時,通過ST官方的CubeMX可以便捷地進行添加。但在使用AC6進行構建時,出現了115個錯誤,主要源於C編譯器語法與C和匯編混合編程語法不兼容。錯誤主要集中在port.c和portmacro.h文件中,通常這類問題在移植FreeRTOS至特定硬體平台時需要解決。文檔提供了對匯編語法兼容性的調整建議。通過手動修改不兼容的部分,或者使用GCC-ports下的ARM_CM3文件(包含了移植所需文件),可以解決這些問題。重新構建後,項目構建成功且耗時較少。
總結而言,從AC5遷移至AC6時,主要關注點在於編譯器框架差異、工具鏈調整、優化設置變化、FreeRTOS兼容性問題以及底層編程的語法適應。使用AC6在構建速度上表現出優勢,並且已經得到了FreeRTOS較好的支持。在遷移過程中,參考官方文檔及教程能有效解決遇到的問題。對於其他建議與分享,歡迎在下方討論。