【软件入门】Keil:从AC5到AC6

news/2025/2/4 6:05:59/

Keil:从AC5到AC6

前一阵安装了新版本的Keil,搭配CubeMX使用没有出现什么问题。但是今天查看以前代码的时候发现了一个很尴尬的问题,编译莫名其妙会出现很多问题。先把问题复现一下,在后面会讲如何解决:

1.问题复现

打开一个工程,然后直接编译,并不会现在令人愉快的0 Erros, 0 Warnings,而是一段没见过的提示:

在这里插入图片描述

*** Target 'LED' 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.
*** Build aborted.
翻译一下:
*** 目标'LED'使用ARM-编译器'默认编译器版本5',该版本不可用。
*** 请查看已安装的ARM编译器版本。管理项目项目 - 文件夹/扩展程序 "来管理ARM编译器版本。目标的选项 - 目标 "为目标选择一个ARM编译器版本。
*** 构建失败。

于是我打开用CubeMX建的工程看了一下设置,发现那些工程中在Target选项卡中选择的都是version6:

在这里插入图片描述

保存设置后重新进行编译,会发现Errors居然有200来个:

在这里插入图片描述

2.解决方法

出现该问题的原因是新版Keil使用的是AC6(即Arm Compiler 6)编译器,而旧版Keil使用的是AC5(即Arm Compiler 5)编译器。如果为了以后也使用AC6,那么方法是将AC5的代码移植为AC6;如果工程相当庞大,也可以让新版Keil使用AC5。

2.1.将AC5工程移植到AC6

打开sys.c文件,将代码替换为:

#include "sys.h"void WFI_SET(void)
{__ASM volatile("wfi");		  
}void INTX_DISABLE(void)
{		  __ASM volatile("cpsid i");
}void INTX_ENABLE(void)
{__ASM volatile("cpsie i");		  
}void MSR_MSP(u32 addr) 
{__ASM volatile("MSR MSP, r0"); 			//set Main Stack value__ASM volatile("BX r14");
}

打开usart.c文件,将下面这一段代码

#if 1
#pragma import(__use_no_semihosting)struct __FILE
{int handle;
};

替换为

#if 1
__ASM (".global __use_no_semihosting");  

再次编译,依然有很多问题:

在这里插入图片描述

我们在设置中更改这两项的选项:

在这里插入图片描述

再次编译:

在这里插入图片描述

还有4Errors, 1Warnings。我们在Manage Project Items处将core_cm3.c移除:

在这里插入图片描述

移除后再次编译就无错误了:

在这里插入图片描述

烧录一下也没有问题,LED0常亮:

在这里插入图片描述

在这里插入图片描述

参考文献:

Migrate from ARM C/C++ Compiler 5 to ARM Compiler 6

Update ARM Compilation Tools

2.2.在新版本Keil中添加AC5编译器

前往Arm Compiler 5 (ACOMP5)下载AC5,笔者选择的版本是Arm Compiler 5.06 update 7。也可以选择其他版本:

在这里插入图片描述

注意操作系统的选择:

在这里插入图片描述

下载好后安装,将其安装到Keil所在的安装目录下。例如笔者安装在D:\Keil_v5,则AC5就安装到D:\Keil_v5\Arm\目录下。如图所示:

在这里插入图片描述

打开工程,打开Manage Project Items,点击Folders/Extensions选项卡:

在这里插入图片描述

点击ARM Compiler右侧的拓展选项:

在这里插入图片描述

点击新增ARM Compiler:

在这里插入图片描述

选中刚刚安装的AC5,点击确定,保存后关闭选项卡。在设置中选择使用AC5:

在这里插入图片描述

成功编译:

在这里插入图片描述

参考文献:

What should I do if I want to download a legacy release of Arm Compiler?

Arm Compiler downloads index

PS.使用此方法也可以在旧版Keil里使用AC6,只需要在官网下载一个AC6即可。

3.何为AC5?何为AC6?

Arm Compiler 5(即AC5),在Keil MDK V4版本及V5早期的版本都是使用AC5。在2015年的时候,AC6发布了,并在随后新版本的MDK中集成了AC6,直到现在最新版本的MDK集成了AC6.18。用户可以通过2.1一节中的方法修改AC5或AC6的版本。

AC5在编译时可以选择3种优化级别或者是不优化:

在这里插入图片描述

AC6在编译时可以选择6种优化级别或者是不优化:

在这里插入图片描述

同时,还可以选择C的版本:

在这里插入图片描述

关于每个优化级别具体是怎样优化的等等更详细的内容在此就不展开了。


http://www.ppmy.cn/news/427854.html

相关文章

(一)AC6(System Workbench for STM32)简单介绍及创建一个简单的STM32的工程

一、说明 相信玩过STM32的同志都很熟悉KEIL(包括keil4ARM版本和keil5)和IAR编译器,受网上各种开源程序及教学的影响其中使用KEIL的居多;本人起初也是使用keil编译器的,但由于keil和IAR这两款编译器并不是免费的&#x…

CubeMX配置ETH+LWIP+FreeRTOS+AC6编译新手详细教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、工程通用配置1、RCC时钟配置2、SYS选项配置3、初始化USART1并使能中断4、工程名以及保存路径等配置 二、ETH配置1.硬件连接2、使能RMLL接口并根据原理图实际…

Keil5使用AC6编译器

Keil5使用AC6编译后,生成bin文件变为生成文件夹的解决办法 KEIL AC5到AC6需要注意的地方从AC5移植到AC6解决流程关键步骤 最近同事咨询改用keil的最新版本编译器编译原来的程序后,出现了报警以及生成bin文件异常的情况(源程序为IAP升级程序app程序部分)。…

Keil MDK使用编译器AC5与AC6生成浏览信息的差异

关注星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 很多使用过Keil MDK的工程师都发现了一个问题,Keil MDK编译代码的时候,速度很慢。 编译速度慢有几个原因: 编译器代码量大小工程配置(生…

机器学习之逻辑回归模型

1 逻辑回归模型介绍 逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是一种机器学习算法,属于分类和预测算法中的一种,主要用于解决二分类问题。逻辑回归通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将…

【从删库到跑路】详细讲解MySQL的函数和约束作用

🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 文章目录 🍔函数⭐字符串函数🎈字符串拼接函数&…

手机连接adb 相关问题汇总

目录 关于端口占用问题1 关于修改adb 端口配置问题2 方法3 方法4 关于端口占用问题1 转载链接:https://www.jianshu.com/p/902a89b06271 报错信息: error: no device/emulators found error: device still connecting 解决方案: 重启…

一起学 WebGL:纹理对象学习

大家好,我是前端西瓜哥,今天我们来了解 WebGL 的纹理对象(Texture) 纹理对象,是将像素(texels)以数组方式传给 GPU 的对象,常见场景是贴图,就是将图片的数据应用到 3D 物…