keil编译器从ac5迁移到ac6

今天在安富莱的论坛上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库吗?

当然不用,一个方法可以解决这个错误。把hal库编译成lib库文件,添加到工程,这也是我刚刚发现的新方法,不用修改hal库了。(我博客中有这个编译的方法,写过文档的,)然后禁止了hal源文件就可以解决,

接下去,asm编译报错,这个时候,keil有文档

截图如下:

 

 这个时候,就需要将很多关键字迁移,我这里有asm关键字,

迁移如下:

 

 再次编译就没有问题了,当然,还有很多关键字是需要修改的,如果你程序中使用了的话。没有使用, 就不用修改的。

!!还有就是,如果带freertos系统,你需要修改的地方更多了,如果是裸机,基本上改动的地方不多。!!

猜你喜欢

转载自www.cnblogs.com/CodeWorkerLiMing/p/12034471.html
ac
今日推荐