前面我分享过一篇文章【mdk v5.25比较实用的功能】,其中大概提了一下:编译器升级到arm compiler 6.9。
就在前天,一关注我的朋友问了我这样一个问题:
黄老师您好,前些日子您更新的公众号中介绍最新版本的keil5.25中提到了伴随更新的新编译器6.9。在简单的把原来的5版本编译器修改为6后,重新编译工程,出现了大量错误,并且大都包含在库文件中,请问您是否曾注意过这一点,并怎么解决的呢?
本文主要内容:
1.先给大家讲述一下官方的解决办法;
2.实际工程中的解决办法;
ⅰ你了解过arm compiler 6.9吗?
mdk-arm在16年就将编译器升级到了v6版本,但很少有人关心这个功能。包括我在内,其实一直都只知道mdk-arm支持v6版本的编译器,但没有真正使用过。
那位朋友前天问我时,我回复他:我也没仔细研究过这个问题。
那位朋友对这个v6.9编译的功能研究了一天之后,没有完全解决这个问题,昨天晚上又给我说了他研究的情况。于是,我就开始了这个问题的研究。
最后,经过我昨晚的研究,得出了解决办法。而且,效果真的很好(编译效率),编译的速度,可以和iar相比拼了。我想,我后面使用mdk-arm就基于v6.9了。
ⅱarm compiler 5 to 6
mdk-arm编译器从v5转到v6的解决办法,只要用心去研究的朋友都能在keil官网找到官方的说明文档。
官方说明文档下载地址:
http://www.keil.com/appnotes/docs/apnt_298.asp
先看下这个说明文档的目录:
看目录,其实很简单,我大概说一下里面重要的几点:
1.switch the compiler in µvision ide
即配置工程,将编译器切换到v6.9:project -> option for target ->target.
2.diagnostic settings: warnings and errors
即诊断设置,也就是配置工程,编译时警告输出的方式:先切换到v6.9,再配置(默认ac5-like即可,如果错误较多,可no warning,不显示警告):
这里想说一点:v6编译器检查的规则更加严格,简单来说,就是编译的警告会更多。如以前的一些代码编译都是没有警告,但用v6.9就可能有警告,如:
void hardfault_handler(void)
{
while (1)
{
}
}
while ((rcc->cfgr & (uint32_t)rcc_cfgr_sws ) != rcc_cfgr_sws_pll);
{
}
3.incompatible language extensions
即v5和v6的指令不兼容,我们需要修改不兼容的代码。其实,就那么几条不兼容的语句,编译之后见到的错误基本就是由于这些语句的不兼容导致的。
4.select a compiler optimization level
这里编译等级,其实不是重点,默认即可。
5.object and library compatibility
关于使用库存在的一些问题,在编译的时候,添加关键字:-fshort-enums -fshort-wchar(一般默认都是添加了的):
6.data packing
这里主要是说数据结构,也是上面的指令不兼容的问题。如果之前使用typedef __packed struct定义,则替换成:__packed_struct。
7.assembler migration
汇编迁移:这一节可以说是重点。
很多rtos都有一个或多个与汇编有关的源代码文件,所以,很多有rtos的工程,编译后都会存在许多错误。常见的就是“asm”这个关键字。
文件中大概说明了:兼容gnu标准,不兼容arm标准。其中还特别强调了关于inline assembler的一点,仅支持gnu标准:
本节重点带领大家分析官方的资料,下一章节,实际应用中,我们的快捷的解决方法。
ⅲ实际应用解决方法
上面官方的解决办法,可以总结为两点:
1.修改工程配置;
2.修改源代码;
实际应用中,我们也是这样按照官方一步一步修改源代码吗?
答案:如果兼容的源代码,替换即可; 如果没有,就只有按照官方说明一步一步修改。
下面,我就来教大家如何使用官方提供的、兼容v6.9的代码替换,这种快捷解决问题的办法。
1.解决cmsis不兼容问题
下载最新的cmsis文件替换你工程中cmsis文件。
下面是关于cmsis的一份官方说明,大概意思就是向下兼容。
下载地址:http://www.keil.com/dd2/pack
如果我们安装了最新的mdk-arm v5.25,在安装目录下都有这些文件:
这种方法可解决cortet-m等处理器程序编译的错误问题,如stm32f0、f1、f4等cortet-m等程序。
2.解决带freertos编译错误问题
freertos解决办法,除了解决上面cmsis的问题,还需要解决操作系统部分汇编带来的问题,简单说就是【freertossourceportablervds】这个目录下源代码不兼容的问题。
解决办法,替换相应文件:
2021年一定要关注的10大技术里程碑
浅析漏水检测短信报警漏水远程监控报警系统
并行多线程处理器MC3172简介与实践
定制大功率电感要注意什么
风向风速监测在环境中的应用是怎样的
MDK-ARM编译器从V5升级到V6需要做哪些工作 ?
典型的线性音频放大器拓扑结构
北斗系统通信功能为应急抢修监控航标实时工作状态装上 “智慧眼睛”
比亚迪强调刀片电池的安全性是哪些?
AR云到底是什么,AR云为什么那么受欢迎
回馈式直流负载正负极接反怎么办?
怎么选择性价比高的激光器?
三星计划2021年开始量产QNED面板
沈阳开发区化工园水厂自动控制系统的构建分析
整车厂商和一级供应商应如何保护互联汽车的数据安全
中国信息通信研究院采用罗德与施瓦茨CMX500 OBT和SPEAG设备用于5G SAR以及HAC测试
伺服电动机控制技术与步进电动机的区别
电路中的磁性元器件有哪些
关于XILINX系列FPGA芯片的架构性能剖析
DC-DC单电感并联使用的故障案例