0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MDK-ARM编译器从V5升级到V6需要做哪些工作 ?

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-12 11:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前面我分享过一篇文章【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】这个目录下源代码不兼容的问题。

解决办法,替换相应文件:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9501

    浏览量

    388868
  • 编译器
    +关注

    关注

    1

    文章

    1670

    浏览量

    51091
  • MDK
    MDK
    +关注

    关注

    4

    文章

    211

    浏览量

    33473
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    v6编译v5的代码会报错,怎么解决?

    v6编译v5的代码会报错。要想正常编译通过,得用v6重零构建一个项目才行吗
    发表于 12-08 06:21

    rt-thread 在mdk5中使用v6编译器编译出错怎么解决?

    由于添加了u8g2这个组件,编译特别慢,8分钟才完成。 听说v6编译器编译速度快很多,于是想用v6,结果,直接
    发表于 09-24 07:22

    如何在Keil中将NuMicro BSPArm编译器5迁移到编译器6

    在Keil中将NuMicro BSPArm编译器5迁移到编译器6
    发表于 08-20 06:29

    8999元起!荣耀Magic V5发布,树立折叠屏手机新标杆

    。荣耀Magic V5对比OPPO在6月份发布的Find N5,重量减少了16g,荣耀官宣Magic V5价格8999元起,16GB+512GB版本9999元,16GB+512GB版本
    的头像 发表于 07-03 14:23 1.2w次阅读
    8999元起!荣耀Magic <b class='flag-5'>V5</b>发布,树立折叠屏手机新标杆

    信捷V5 - F5变频接入Profibus网络的关键

    在工业自动化领域,不同设备之间的通讯连接至关重要。当面临信捷V5 - F5变频与Profibus网络的接入需求时,modbusRTU转profibus网关就成为了关键的解决方案。
    的头像 发表于 06-20 12:53 428次阅读
    信捷<b class='flag-5'>V5</b> - F<b class='flag-5'>5</b>变频<b class='flag-5'>器</b>接入<b class='flag-5'>到</b>Profibus网络的关键

    RISC-V架构下的编译器自动向量化

    进迭时空专注于研发基于RISC-V的高性能新AICPU,对于充分发挥CPU核的性能而言,编译器是不可或缺的一环,而在AI时代,毫无疑问向量算力将发挥越来越重要的作用。进迭时空非常重视RISC-V
    的头像 发表于 06-06 16:59 953次阅读
    RISC-<b class='flag-5'>V</b>架构下的<b class='flag-5'>编译器</b>自动向量化

    JDK8升级到21的问题集

    " •sun.misc.BASE64Encoder等内部API废弃 → 引发编译错误 •JAXB/JAX-WSJDK核心剥离 → XML处理链断裂 •Lombok与新版
    的头像 发表于 06-06 16:49 603次阅读

    STM32MP157d linux5.4.31升级到6.1.82无法启动怎么解决?

    我以前一直使用linux5.4.31,只使用了TFA没有optee uboot是2020版本。一直用得好好的 上个礼拜我想升级到6.1.82(主要想打RT linux patch, 看到STM有出
    发表于 06-06 06:42

    TASKING编译器全面支持紫光同芯THA6 Gen2系列产品

    近日,TASKING 针对Arm架构的编译器平台VX-toolset for Arm迎来了全新升级,最新版本VX-toolset for Arm
    的头像 发表于 04-03 17:12 1128次阅读

    6.12.1升级到6.13老是闪退是什么原因导致的?

    6.12.1升级到6.13老是闪退,回到6.12.1又正常,问一下大家是什么原因导致,有什么解决办法?
    发表于 03-11 08:13

    使用STM32CubeMX生成FreeRTOS的MDK工程,选择AC6编译器有很多错误,为什么?

    使用STM32CubeMX生成FreeRTOS的MDK工程,选择AC5编译器可以编译成功,选择AC6编译
    发表于 03-11 06:32

    TMS320C6000优化编译器v7.4测试版用户指南

    电子发烧友网站提供《TMS320C6000优化编译器v7.4测试版用户指南.pdf》资料免费下载
    发表于 12-24 17:42 0次下载
    TMS320C6000优化<b class='flag-5'>编译器</b><b class='flag-5'>v</b>7.4测试版用户指南

    Triton编译器与其他编译器的比较

    Triton编译器与其他编译器的比较主要体现在以下几个方面: 一、定位与目标 Triton编译器 : 定位:专注于深度学习中最核心、最耗时的张量运算的优化。 目标:提供一个高度抽象、灵活、高效
    的头像 发表于 12-24 17:25 1602次阅读

    HighTec C/C++编译器套件全面支持芯来RISC-V IP

    德国萨尔布吕肯,2024年12月5日——世界领先的汽车C/C++编译器解决方案提供商HighTec EDV Systeme GmbH宣布全面支持芯来科技的RISC-V IP。HighTec编译
    的头像 发表于 12-23 09:04 2010次阅读
    HighTec C/C++<b class='flag-5'>编译器</b>套件全面支持芯来RISC-<b class='flag-5'>V</b> IP

    HighTec C/C++编译器支持Andes晶心科技RISC-V IP

    汽车编译器解决方案领先供货商HighTec EDV-Systeme GmbH宣布其针对汽车市场的高度优化C/C++编译器支持Andes晶心科技的RISC-V IP。这项支持对汽车软件开发人员来说是一
    的头像 发表于 12-12 16:26 1573次阅读