zoukankan      html  css  js  c++  java
  • 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库吗?

    这里要是使用了新版本的keil(5.29),改关键字已经不用改了。直接编译通过。如果是低版本,需要添加../Drivers/CMSIS/Include这个path,试试看

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

    硬汉的方法:当前HAL库使用AC6编译的警告有点多,可以选择使用AC5的警告临时屏蔽,提供的测试例子是采用的这种方式。

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

    截图如下:

     

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

    迁移如下:

     

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

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

  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12034471.html
Copyright © 2011-2022 走看看