ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MDK-ARM编译器从V5升级到V6需要做哪些工作? 转载黄大师的文章

2022-07-26 14:34:12  阅读:227  来源: 互联网

标签:MDK V6.9 兼容 编译 编译器 V5 ARM


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

2021-09-15  

前面我分享过一篇文章【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

先看下这个说明文档的目录:

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

看目录,其实很简单,我大概说一下里面重要的几点:

1.Switch the Compiler in µVision IDE

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

即配置工程,将编译器切换到V6.9:Project -> Option for Target -> Target.

2.Diagnostic Settings: Warnings and Errors

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

即诊断设置,也就是配置工程,编译时警告输出的方式:先切换到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的指令不兼容,我们需要修改不兼容的代码。其实,就那么几条不兼容的语句,编译之后见到的错误基本就是由于这些语句的不兼容导致的。

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

4.Select a Compiler Optimization Level

这里编译等级,其实不是重点,默认即可。

5.Object and Library Compatibility

关于使用库存在的一些问题,在编译的时候,添加关键字: -fshort-enums -fshort-wchar(一般默认都是添加了的):

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

6.Data Packing

这里主要是说数据结构,也是上面的指令不兼容的问题。如果之前使用typedef __packed struct定义,则替换成:__PACKED_STRUCT。

7.Assembler Migration

汇编迁移:这一节可以说是重点。

很多RTOS都有一个或多个与汇编有关的源代码文件,所以,很多有RTOS的工程,编译后都会存在许多错误。常见的就是“asm”这个关键字。

文件中大概说明了:兼容GNU标准,不兼容ARM标准。其中还特别强调了关于Inline Assembler的一点,仅支持GNU标准:

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

本节重点带领大家分析官方的资料,下一章节,实际应用中,我们的快捷的解决方法。

 

实际应用解决方法

上面官方的解决办法,可以总结为两点:

1.修改工程配置;

2.修改源代码;

实际应用中,我们也是这样按照官方一步一步修改源代码吗?

答案:如果兼容的源代码,替换即可; 如果没有,就只有按照官方说明一步一步修改。

下面,我就来教大家如何使用官方提供的、兼容V6.9的代码替换,这种快捷解决问题的办法。

1.解决CMSIS不兼容问题

下载最新的CMSIS文件替换你工程中CMSIS文件。

下面是关于CMSIS的一份官方说明,大概意思就是向下兼容。

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

下载地址:http://www.keil.com/dd2/Pack

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

如果我们安装了最新的MDK-ARM V5.25,在安装目录下都有这些文件:

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

这种方法可解决Cortet-M等处理器程序编译的错误问题,如STM32F0、F1、F4等Cortet-M等程序。

2.解决带FreeRTOS编译错误问题

FreeRTOS解决办法,除了解决上面CMSIS的问题,还需要解决操作系统部分汇编带来的问题,简单说就是【FreeRTOS\Source\portable\RVDS】这个目录下源代码不兼容的问题。

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

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

3.其他

其他RTOS解决的办法可参考上面讲述的内容。目前许多RTOS厂家逐步在完善兼容的问题。

没有替换的,就只有按照官方提供的办法修改源代码。实在不能解决,就只能使用之前V5编译器了。

【目前我测试过STM32F0、F1、F4等裸机程序,UCOS、FreeRTOS操作系统,都使用V6.9成功编译,并在板卡上成功运行,后续还会验证其它程序】

最后

微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,在我的底部菜单查看更多精彩内容!

长按识别二维码 关注

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

标签:MDK,V6.9,兼容,编译,编译器,V5,ARM
来源: https://www.cnblogs.com/xiaoheikkkk/p/16520877.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有