最新KEIL软件:无法再支持AC5编译器的解决方案

文章目录

  • 最新KEIL软件中编译器不再支持AC5解决方案
  • 一、前言
  • 二、问题复现
  • 三、解决方案
  • 方案一:直接安装AC5(即Arm Compiler 5)
  • 方案二:将AC5工程移植到AC6
  • 一、按照官方文档说明进行配置
  • 二、修改源代码
  • 最新KEIL软件中编译器不再支持AC5解决方案

    一、前言

    新版Keil使用的是AC6(即Arm Compiler 6)编译器,而旧版Keil使用的是AC5(即Arm Compiler 5)编译器。KEIl5最新版本官方不再默认安装V5编译器,也就是KEIl5软件中已经没有了AC5(即Arm Compiler 5),最新的支持AC6(即Arm Compiler 6),导致某些代码无法兼容。新版本的KEIl5,搭配CubeMX使用没有出现什么问题。在查看正点原子代码的时候,编译莫名其妙会出现很多问题,就是因为编译器不再支持AC5(即Arm Compiler 5),只支持AC6(即Arm Compiler 6),所以出现部分代码不支持出现报错和警告。因此现在解决方案就有两个:一个是重新安装AC5(即Arm Compiler 5);另一个是根据现在的编译器来进行配置,进行代码修改兼容将AC5的代码移植为AC6。

    二、问题复现

    打开一个工程,然后直接编译,出现一段没见过的提示:

    *** Target ‘Target 1’ uses ARM-Compiler ‘Default Compiler Version 5’ which is not available.
    *** Please review the installed ARM Compiler Versions:
    ‘Manage Project Items – Folders/Extensions’ to manage ARM Compiler Versions.
    ‘Options for Target – Target’ to select an ARM Compiler Version for the target.
    *** Rebuild aborted.
    翻译一下:
    *** 目标’Target 1’使用ARM-编译器’默认编译器版本5’,该版本不可用。
    *** 请查看已安装的ARM编译器版本。
    管理项目项目 – 文件夹/扩展程序 "来管理ARM编译器版本。
    目标的选项 – 目标 "为目标选择一个ARM编译器版本。
    *** 构建失败。

    使用CubeMX建的工程看了一下设置,发现那些工程中在Target选项卡中选择的都是version6;保存设置(Arm Compiler:Use default compiler version 6)后重新进行编译,会发现Errors以及Warnings会有好多个。

    三、解决方案

    方案一:直接安装AC5(即Arm Compiler 5)

    1、前往Arm Compiler 5 (ACOMP5)下载AC5,选择的版本是Arm Compiler 5.06 update 7。也可以选择其他版本:
    注:下载链接:https://developer.arm.com/downloads/view/ACOMP5

    2、根据操作系统选择下载版本,笔者的是window11选择的是Win32。

    3、下载好进行解压,解压后进入解压后的文件夹并且选中setup.exe,右击鼠标点击以管理员身份运行进行安装,将其安装到Keil所在的安装目录下。例如笔者安装在D:\KEIL5\Keil_v5_Arm&C51,则AC5就安装到D:\KEIL5\Keil_v5_Arm&C51\Arm目录下,如图所示:
    注:为便于管理给AC5编译器新建一个文件夹ARMCC,把AC5安装文件放置在ARMCC中。
    一般来讲,AC5编译器的放置位置与ARMCLANG在同一级文件夹下。


    4、打开工程,打开Manage Project Items(标号1);点击Folders/Extensions选项卡(标号2);点击ARM Compiler右侧的拓展选项(标号3);点击Add another ARM Compiler Version to List;选中刚刚安装的AC5(刚安装好的ARMCC文件夹),点击确定,保存后关闭选项卡。在设置中选择使用AC5(Arm Compiler:Use default compiler version 5)后重新进行编译,编译成功。



    方案二:将AC5工程移植到AC6

    一、按照官方文档说明进行配置

    1、Switch the Compiler in µVision IDE

    即配置工程,将编译器切换到AC6:Project(标号1) -> Option for Target (标号2)-> Target(标号3).Arm Compiler下拉框中选择Use default compiler version 6或者V6.18(标号4)

    2、Diagnostic Settings: Warnings and Errors和Object and Library Compatibility

    即诊断设置,也就是配置工程,编译时警告输出的方式:先切换到AC6(1.Switch the Compiler in µVision IDE(即上一步配置工程)),再配置(默认AC5-like即可)。关于使用库存在的一些问题,在编译的时候,添加关键字: -fshort-enums & -fshort-wchar(一般默认都是添加了的),按照下图进行配置即可。

    这里想说一点:V6编译器检查的规则更加严格,简单来说,就是编译的警告会更多。如以前的一些代码编译都是没有警告,但用V6就可能有警告。

    3、Incompatible Language Extensions

    即V5和V6的指令不兼容,我们需要修改不兼容的代码。其实,就那么几条不兼容的语句,编译之后见到的错误基本就是由于这些语句的不兼容导致的。

    4、Data Packing

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

    5、Assembler Migration

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

    很多RTOS都有一个或多个与汇编有关的源代码文件,所以,很多有RTOS的工程,编译后都会存在许多错误。常见的就是“asm”这个关键字。
    文件中大概说明了:兼容GNU标准,不兼容ARM标准。其中还特别强调了关于Inline Assembler的一点,仅支持GNU标准:

    二、修改源代码

    根据上面说明,已经修改完工程配置。接下来就需要修改源代码,如果兼容的源代码,替换即可; 如果没有,就只有按照官方说明一步一步修改。

    使用官方提供的、兼容V6的代码替换这种快捷解决问题的办法。

    解决CMSIS不兼容问题

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

    如果MDK-ARM安装目录下不是最新的CMSIS文件。则需要下载最新的CMSIS文件替换你工程中CMSIS文件。
    注:CMSIS文件下载地址:http://www.keil.com/dd2/Pack

    例如笔者的安装目录为D:\KEIL5\Arm\Packs\ARM\CMSIS\5.9.0
    其中5.9.0即为CMSIS文件的版本,并且从CMSIS文件下载地址网站可以看出CMSIS文件最新版本为5.9.0。若在CMSIS文件下载地址网站有最新版本,则需要下载最新的CMSIS文件替换你工程中CMSIS文件

    若下载了最新的CMSIS文件(标号1),双击标号1,弹出安装界面,然后点击弹出界面的“Next"(标号2),即可完成安装最新的CMSIS文件。

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

    针对正点原子解决CMSIS不兼容问题

    若使用的是正点原子的标准库程序,则需要按照下面两图进行配置,如图所示:

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

    物联沃分享整理
    物联沃-IOTWORD物联网 » 最新KEIL软件:无法再支持AC5编译器的解决方案

    发表评论