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源文件就可以解决,
硬汉的方法:当前HAL库使用AC6编译的警告有点多,可以选择使用AC5的警告临时屏蔽,提供的测试例子是采用的这种方式。
接下去,asm编译报错,这个时候,keil有文档
截图如下:

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

再次编译就没有问题了,当然,还有很多关键字是需要修改的,如果你程序中使用了的话。没有使用, 就不用修改的。
!!还有就是,如果带freertos系统,你需要修改的地方更多了,如果是裸机,基本上改动的地方不多。!!
keil编译器从ac5迁移到ac6的更多相关文章
- Keil> 编译器特有的功能 > 关键字和运算符 > __weak
__weak 此关键字指示编译器弱导出符号. 可以将 __weak 关键字应用于函数和变量声明以及函数定义. 用法 函数和变量声明 对于声明,此存储类指定一个 extern 对象声明,即使不存在,也不 ...
- keil 编译器V6 定义函数在ram中运行-和在指定地址定义常量
之前一直是用v5编译,编译速度慢,换成V6编译速度差不多快50% ,而且arm后期只维护v5编译器不在更新v5编译器.切换到V6编译器大势所趋,把之前v5且换到v6需要如下更改: 1. CMSIS包需 ...
- keil编译器
1 数组比指针效率高. 2 v4.73不能查看局部变量的值:可先将C/C++选项下的优化级别设置成O0,查看完之后修改回去.因默认级别是2级.
- keil MDK启动文件分析---基于LPC2100系列(其实都是相通的)
转用MDK有一段时间了,越来越觉得MDK的强大,因为我之前都是用ADS1.2开发产品,所以更能体会到MDK的强大与易用性.MDK编译出来的代码与ADS1.2相比,代码量减少了很多,我的一个工程用ADS ...
- Keil MDK与h-jtag联调
keil MDK也是可以借助h-jtag进行单步调试,写出来与大家一起分享一下. keil MDK编译器使用V4.01版本,下载地址:http://www.embedinfo.com/down-lis ...
- Keil使用中的若干问题
一.混合编程 1.模块内接口: 使用如下标志符: #pragma asm 汇编语句 #pragma endasm 注意:如果在c51程序中使用了汇编语言,注意在keil编译器中需要激活Properti ...
- keil C51绝对地址访问
在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...
- 深入剖析keil c51 --- 从汇编到c51
第一节 main()函数和启动代码 汇编是从org 0000h开始启动,那么keil c51是如何启动main()函数的?keil c51有一个启动程序startup.a51,它总是和c程序一起编译和 ...
- Keil 中关于C语言编译生成汇编代码函数名规则
在keil 中 C语言的函数有带参数和不带参数之分. 一般的资料里说fun(void)类型的函数不带参数,所以,keil编译器生成的汇编的调用地址(函数名) 为fun.这没有错.事实上,不管C语言的函 ...
随机推荐
- mysql主从复制报错解决方案
mysql主从复制报错解决方案 我先制造个错误 在slave删除个info3字段 然后在master 在info3插入数据 报错如下<pre> Last_SQL_Errno: 1054 L ...
- Linux内核引用计数器kref结构
1.前言 struct kref结构体是一个引用计数器,它被嵌套进其它的结构体中,记录所嵌套结构的引用计数.引用计数用于检测内核中有多少地方使用了某个对象,每当内核的一个部分需要某个对象所包含的信息时 ...
- [原创]小巧免杀的端口转发工具PortTran(附.net源码)
0x001 简介 PortTran by k8gege.NET版端口转发工具,支持任意权限下转发 0x002 背景工具在2016年左右写的,当时某个内网不知何原故LCX用不了 由于Win2003才刚停 ...
- SpringBoot扩展点之二:ApplicationRunner和CommandLineRunner的扩展
CommandLineRunner并不是Spring框架原有的概念,它属于SpringBoot应用特定的回调扩展接口: public interface CommandLineRunner { /** ...
- inux centos7下源码 tar安装5.7.26详解
inux centos7下源码 tar安装5.7.26图文详解 官网地址 https://dev.mysql.com/downloads/mysql/ 1.卸载Linux系统上自带的mysql插件(o ...
- jQuery中使用Ajax获取JSON格式数据示例代码
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.JSONM文件中包含了关于“名称”和“值”的信息.有时候我们需要读取JSON格式的数据文件,在jQuery中 ...
- Nginx优化配置,轻松应对高并发
Nginx现在已经是最火的web服务器之一,尤其在静态分离和负载均衡方面,性能十分优越.接下来我们主要看下Nginx在高并发环境下的优化配置,主要是针对 nginx.conf 文件的属性设置.我们打开 ...
- (一)类型转换 is 和 as
c# 是强类型语言. CLR最重要的特性之一就是 类型安全,在运行时,CLR总是知道对象的类型是什么,C#所有的类的继承自system.Object ,所以都包含GetType方法,调用GetType ...
- 剑指前端(前端入门笔记系列)——DOM(属性节点)
DOM(属性节点) 属性节点没有过参加家族关系中,其专用选择器:attributes,返回值为对象的形式,它的键是索引值,也就是用对象模拟了一个伪数组,DOM中选择器返回的都是伪数组(可以使用数组的形 ...
- SpringBoot中执行定时任务
一:在SpringBoot中使用定时任务相当的简单.首先,我们在启动类中加入@EnableScheduling来开启定时任务. @SpringBootApplication @EnableSchedu ...