jjzjj

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

芜湖_ 2023-08-16 原文

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的版本:

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

有关【软件入门】Keil:从AC5到AC6的更多相关文章

  1. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  4. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  5. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  6. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  7. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  8. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  9. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  10. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

随机推荐