今天在安富萊的論壇上ac6的使用方法,所以,就小試牛刀玩了玩,終於ok了。
使用keil5.25+stm32+hal庫,5.23開始才支持ac6,因此keil版本不能太低。
可以參考:https://blog.csdn.net/ybhuangfugui/article/details/99826708
https://blog.csdn.net/ybhuangfugui/article/details/89369067
http://www.armbbs.cn/forum.php?m ... 5736&fromuid=58
論壇上面有總結:
///////////////////////////////////////////
編譯器升級注意事項總結
1:CMSIS、HAL,直接使用,CMSIS使用5.6穩妥
2:使用FreeRTOS需要更改port.c,AC5使用RVDS下的,AC6使用GCC的
3:C/C++下,見圖1,使用GNC99和GNC++11
4:AC6下中文的C文件需要更換成UTF-8,AC5如果繼續使用此文件,需要在misc control下添加--locale=english
5:養成良好習慣,可以在使用不同編譯器時添加不同編譯器定義
defined ( __CC_ARM )
#elif defined(__GNUC__)
6:AC5/AC6相關的定義區別如圖2
7:為養成良好習慣,list、output生成的文件建議區分成AC5(AC6)
8: AC6定義相關指定地址,請使用section(“”name“”),或者__attribute__((section(".ARM.__at_0xxx")))
///////////////////////////////////////////////
自己有一個bootloader的工程,里面使用了asm匯編,__weak
選擇ac6之后,編譯會出現很多錯誤,因為ac5和ac6使用不同的編譯體系,因此很多嵌入式里面的擴展的關鍵字是不同的,如果是純c語言,是沒問題的。
舉個例子:
error: expected identifier or '('
__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue)
這個時候,難道就是修改hal庫嗎?
這里要是使用了新版本的keil(5.29),改關鍵字已經不用改了。直接編譯通過。如果是低版本,需要添加../Drivers/CMSIS/Include這個path,試試看
當然不用,一個方法可以解決這個錯誤。把hal庫編譯成lib庫文件,添加到工程,這也是我剛剛發現的新方法,不用修改hal庫了。(我博客中有這個編譯的方法,寫過文檔的,)然后禁止了hal源文件就可以解決,
硬漢的方法:當前HAL庫使用AC6編譯的警告有點多,可以選擇使用AC5的警告臨時屏蔽,提供的測試例子是采用的這種方式。
接下去,asm編譯報錯,這個時候,keil有文檔
截圖如下:
這個時候,就需要將很多關鍵字遷移,我這里有asm關鍵字,
遷移如下:
再次編譯就沒有問題了,當然,還有很多關鍵字是需要修改的,如果你程序中使用了的話。沒有使用, 就不用修改的。
!!還有就是,如果帶freertos系統,你需要修改的地方更多了,如果是裸機,基本上改動的地方不多。!!