Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程

embedded/2024/11/16 19:35:00/

环境:

keil版本为5.38,版本务必高于5.30
在这里插入图片描述
STM32F4的pack包版本要高于2.9
在这里插入图片描述
软件包下载地址:https://zhuanlan.zhihu.com/p/262507061

一、更改Keil中编译器

在这里插入图片描述
在这里插入图片描述
更改后编译,会报很多错,先不管。

二、更改头文件依赖

观察报错会有条报错为:error: unknown register name vfpcc in asm,这是CMSIS库的版本过低,导致AC6不兼容,解决方法是升级CMSIS库,链接里面有下载包,一定要确保CMSIS库在5.0以上。
如果你Keil的CMSIS版本是5.0以上的还是存在报错,说明你工程里面的文件是老版本的,就不用升级了,按照下面步骤继续。

1. 删除工程CORE里面的.h文件

在这里插入图片描述
把这四个.h文件都删除

2.把Keil安装路径中的.h新文件复制到工程中的core文件夹中

在这里插入图片描述

3. 如果你工程用到了FreeRTOS,还需要用FreeRTOS源码中GCC的文件代替你工程中RVDS的文件。

三、修改部分语法

新的AC6中部分语法有更新,完成上述步骤后还可能报错,根据报错位置修改为AC6支持的语法格式就可以了。
错误有 pragma import(__use_no_semihosting) 、__asm void WFI_SET(void)、__FILE 等

print重定向修改为如下,这种格式能同时兼容AC5和AC6编译器,其中__CC_ARM是AC5编译器定义的标识,GNUC 和__clang__是AC6定义的标识,由此判断编译器版本。

#if 1
#ifdef  __CC_ARM
#pragma import(__use_no_semihosting)
struct __FILE 
{ int handle; 
}; 
#elif defined ( __GNUC__ ) || defined (__clang__)
__asm (".global __use_no_semihosting\n\t");   
#endifFILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   USART1->DR = (u8) ch;      return ch;
}#endif

http://www.ppmy.cn/embedded/138083.html

相关文章

LuaRocks如何安装数据库驱动?

大家好,我是袁庭新。通过LuaRocks来安装数据库驱动如何实现呢?这篇文章帮你搞定。 LuaSQL是从Lua到DBMS的简单接口。LuaSQL它使Lua程序能够: 连接到ODBC、ADO、Oracle、MySQL、SQLite、Firebird和PostgreSQL数据库; 执行任意的S…

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载

软件介绍 下载iOS旧版应用,简化繁琐的抓包流程。 一键生成去更新IPA(手机安装后,去除App Store的更新检测)。 软件界面 支持系统 Windows 10/Windows 8/Windows 7(由于使用了Fiddler库,因此需要.Net环境…

[Qt platform plugin问题] Could not load the Qt platform plugin “xcb“

Qt platform plugin 是 Qt 应用程序启动时加载的插件。不同的平台有不同的插件。 常见的插件有:linuxfb Wayland xcb 简单来说就是启动一个GUI程序, 离不开这些插件.选择其中一个就好 出现这个问题要么就是没有插件,要么就是插件依赖的库没有。 要么就是插件选则的…

《配电网高质量发展行动实施方案(2024~2027年)》发布,智能巡检机器人助力新型电力系统建设

8月,国家能源局印发《配电网高质量发展行动实施方案(2024~2027年)》(以下简称《方案》),深入推进配电网高质量发展重点任务落地见效。《方案》明确提出,要重点推进建设一批满足新型主体接入的项…

如何在JavaScript中实现保留两位小数

在JavaScript中,处理数字并格式化它们以显示特定的小数位数是一个常见的需求。特别是,当你需要显示货币、测量值或其他需要精确到两位小数的数据时,这一点尤为重要。本文将详细介绍几种在JavaScript中实现保留两位小数的方法。 1. 使用 toFi…

【代码大模型】Is Your Code Generated by ChatGPT Really Correct?论文阅读

Is Your Code Generated by ChatGPT Really Correct? Rigorous Evaluation of Large Language Models for Code Generation key word: evaluation framework, LLM-synthesized code, benchmark 论文:https://arxiv.org/pdf/2305.01210.pdf 代码:https:…

灵神DAY3 KMP算法

具体解释: 1. 真前缀和真后缀的定义 前缀:字符串的起始部分。例如,字符串 s "aabcaa" 的前缀是 ""、"a"、"aa"、"aab"、"aabc"、"aabca"、"aabcaa"。 …

「Qt Widget中文示例指南」如何创建一个窗口标志?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 窗口标志要么是类型…