今天在安富莱的论坛上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源文件就可以解决,

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

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

截图如下:

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

迁移如下:

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

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

keil编译器从ac5迁移到ac6的更多相关文章

  1. Keil> 编译器特有的功能 > 关键字和运算符 > __weak

    __weak 此关键字指示编译器弱导出符号. 可以将 __weak 关键字应用于函数和变量声明以及函数定义. 用法 函数和变量声明 对于声明,此存储类指定一个 extern 对象声明,即使不存在,也不 ...

  2. keil 编译器V6 定义函数在ram中运行-和在指定地址定义常量

    之前一直是用v5编译,编译速度慢,换成V6编译速度差不多快50% ,而且arm后期只维护v5编译器不在更新v5编译器.切换到V6编译器大势所趋,把之前v5且换到v6需要如下更改: 1. CMSIS包需 ...

  3. keil编译器

    1 数组比指针效率高. 2 v4.73不能查看局部变量的值:可先将C/C++选项下的优化级别设置成O0,查看完之后修改回去.因默认级别是2级.

  4. keil MDK启动文件分析---基于LPC2100系列(其实都是相通的)

    转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性.MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS ...

  5. Keil MDK与h-jtag联调

    keil MDK也是可以借助h-jtag进行单步调试,写出来与大家一起分享一下. keil MDK编译器使用V4.01版本,下载地址:http://www.embedinfo.com/down-lis ...

  6. Keil使用中的若干问题

    一.混合编程 1.模块内接口: 使用如下标志符: #pragma asm 汇编语句 #pragma endasm 注意:如果在c51程序中使用了汇编语言,注意在keil编译器中需要激活Properti ...

  7. keil C51绝对地址访问

    在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...

  8. 深入剖析keil c51 --- 从汇编到c51

    第一节 main()函数和启动代码 汇编是从org 0000h开始启动,那么keil c51是如何启动main()函数的?keil c51有一个启动程序startup.a51,它总是和c程序一起编译和 ...

  9. Keil 中关于C语言编译生成汇编代码函数名规则

    在keil 中 C语言的函数有带参数和不带参数之分. 一般的资料里说fun(void)类型的函数不带参数,所以,keil编译器生成的汇编的调用地址(函数名) 为fun.这没有错.事实上,不管C语言的函 ...

随机推荐

  1. JAVA读写CSV文件

    最近工作需要,需要读写CSV文件的数据,简单封装了一下 依赖读写CSV文件只需引用`javacsv`这个依赖就可以了 <dependency> <groupId>net.sou ...

  2. storm并行

    Storm并行度 wordcount 统计job代码 public class WordCountTopology { private static final String SENTENCE_SPO ...

  3. Linux常用基础(一)

    1.命令解释器 shell---Unix操作系统 bash---Linux操作系统 本质:根据输入的命令,调用相应的执行程序. 2.Linux下的快捷键 (1)命令和路径补全 Tab键 (2)主键盘的 ...

  4. 【C++】一个指针占几个字节?为什么呢?

    一个指针在32位操作系统上,占4个字节 一个指针在64位操作系统上,占8个字节 但是,编译器为了兼容32位操作系统和64位操作系统,所以指针都是4个字节长度 为什么呢? 在计算机中,CPU不能直接与硬 ...

  5. [转帖]什么是IOC(控制反转)、DI(依赖注入)

    什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642   原文地址(摘要了部分内容):https://blog.csdn.net ...

  6. idea 设置默认的maven

    idea版本2019.2 设置maven 按照上图中的1-4顺序进行配置,就可以让以后每一个工程使用我们指定的配置了. 1:打开maven配置界面. 2:点击后面的三角符号,使maven列表显示,并在 ...

  7. ubuntu中编写shell脚本开机自动启动

    编写脚本是为了不用手动去开启各种服务(也是为了偷懒哈哈) 1.进入终端输入 创建一个后缀为.sh的脚本文件 touch test.sh 编辑脚本 vim test.sh test.sh编写脚本内容   ...

  8. 关于 Windows to go

    1. 在宿主计算器的操作系统中访问 Windows to go 的磁盘 如题,如果需要在宿主计算器的操作系统中访问 Windows to go 的U盘(移动硬盘)中的文件,只需要打开磁盘管理,“更改驱 ...

  9. SQLAlchemy 中的 Session、sessionmaker、scoped_session

    目录 一.关于 Session 1. Session是缓存吗? 2. Session作用: 3. Session生命周期: 4. Session什么时候创建,提交,关闭? 4. 获取一个Session ...

  10. Kafka Streams的Data Types and Serialization

    Avro <repositories> <repository> <id>confluent</id> <url>http://packag ...