升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
烧录后 Reset And Run 重启失效
存在于 MDK ARM 5.28 之后包括 5.37 的版本. 这些版本即使勾选 Reset And Run, 在烧录后也不会自动重启执行
需要做以下设置
- Debug -> ST-Link Debugger -> Settings
- 切换到 Pack 标签页, 取消勾选 Enable
- 点击 OK 保存

编译器版本判断失效
不能再通过__GNUC__判断是否为 gnu arm gcc toolchain, 因为 Arm Compiler 6 默认定义了 __GNUC__ , 如果用这个做宏判断, 会造成错误的代码被编译. 参考 CMSIS 的做法用 __ARMCC_VERSION 来判断
#if defined __CC_ARM
// Arm Compiler 5
#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
// Arm Compiler 6
#elif defined __GNUC__
// Normal GCC
或者
#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
// Arm Compiler 5 or 6
#elif defined __GNUC__
// Normal GCC
#endif
关于 printf 串口输出的 retarget
用 Arm Compiler 6 的时候, printf retarget 和 Arm Compiler 5 的做法是一样的
int fputc(int ch, FILE *f)
{
return uartSendChar(ch);
}
int fgetc(FILE *f)
{
return uartReceiveChar();
}
选择 Use MicroLIB 编译报错
如果勾选 MicroLIB 后 build 报错:
.\Objects\xxx.axf: Error: L6218E: Undefined symbol __use_two_region_memory (referred from startup_stm32f40_41xxx.o).
.\Objects\xxxaxf: Error: L6218E: Undefined symbol __initial_sp (referred from entry2.o).
需要重新 rebuild 一下.
具体原因查看这篇 https://chowdera.com/2022/02/202202011447342750.html
因为 keil 在你点击编译的时候只会编译内容有变动的部分(指预处理后的部分). 当你选择使用 MicroLIB 的时候, 编译器会自动添加宏定义
__MICROLIB, 相对应的, 头文件中的内容就会有所改变, 导致包含了头文件的 .c 文件内容改变. 而 startup 中处存在的条件汇编语句却没有得到预处理和汇编: 被抛弃的部分是堆栈的初始化处理程序, 可以看出定义了__MICROLIB宏和没有定义时堆栈的初始化是交由不同的函数处理的. 但是编译的时候没改变这里的条件汇编, 结果没有初始化的程序了, 因此报错"符号未定义". 解决方式同样很简单, 点击重新编译即可.
编译参数变化
Language C
使用 C99
Language C++
使用 C++03
Optimization
选择 –Oz
如果选择了 AC5 的默认优化等级-O0 会导致代码执行效率低. AC6 编译器 –O0 优化等级时, n 级条件表达式可能会产生巨大的栈需求. 需要调整为–O0 以外的优化等级
安装AC5编译器
如果必须使用AC5, 需要单独安装
- 前往https://developer.arm.com/downloads/view/ACOMP5, 选择Arm Compiler 5.06 update 7 (build 960) Win32下载
- 运行安装包, 安装路径需要改为 C:\Keil_v5\ARM\AC506U7
- 运行Keil MDK5
- 打开 Manage Project Items 对话框, 切换到 Folders / Extensions 对话框, 在 User Arm Compiler 右侧点开浏览按钮, 在弹出的对话框中, 点击 Add Another ARM Compiler Version to List, 定位到刚才安装的路径
- 保存后, 在 Config Target Options 对话框中, 就能看到 Use default compiler version 5 选项了
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等的更多相关文章
- SharePoint 2010升级到sharePoint 2013后,人员失去对网站的权限的原因及解决方法。The reason and solution for permission lost after the upgrading
昨天碰到了一个问题,一个网站在从SharePoint 2010升级到SharePoint 2013后,人员都不能登录了,必须重加赋权,人员才能登录,这样非常麻烦. 原因:是认证方式的问题.在Share ...
- 升级10.11.6后CocoaPods的坑,之前10.11.4已经安装好的,居然没了Failed to locate Homebrew!
升级10.11.6后CocoaPods的坑,之前10.11.4已经安装好的,居然没了,用命令 sudo gem install cocoapod 装不上,换 sudo gem install -n/u ...
- 升级xcode6和ios8后,unity遇到的一些小问题
升级最新的Xocde6后,如果不是最新版本的unity,虽然也可以也可以正常的build,但如果想通过unity连真机进行profile的话,就会在xocde中报错,这个的主要原因是unity的配置里 ...
- xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)
xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题) 前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是 ...
- DZ升级到X3.2后,UCenter用户管理中心进不了了
前天将DZ升级到X3.2后,UCenter用户管理中心进不了了,输入的密码也对,验证码也对,就是点登录后没反应,又回来输入前的状态.如果更换密码后,显示密码错误,证明密码是没错的.但就是进不了.大家看 ...
- 升级3.2.3后 could not find driver
求解,之前一切正常,升级3.2.3后提示找不到数据库驱动我用的是mysql,也没有设置DB_DSN错误位置FILE: C:\Users\Administrator\workspace\test\Thi ...
- thinkjs升级到3.0后的图片上传
似乎当thinkjs升级到3.0后,才接手了一个项目.只是在实际运用过程中,还是发现了与2.2的些许差别——今天先分享关于图片上传的一些问题. 1.上传文件,我们选择了jQuery的插件:http:/ ...
- 排错-升级Exchange 2013 CU22后程序名称显示异常
近期在按需更新Exchange 2013 CU22补丁以便解决Microsoft Exchange Server ADV190007 Guidance for "PrivExchange&q ...
- CentOS6.5把MySQL从5.1升级到5.6后,MySQL不能启动
解决了:进入mysql安装目录 cd /var/lib/mysql删除了如下三个文件:ibdata1 ib_logfile0 ib_logfile1 CentOS6.5把MySQL从5.1升级到5 ...
- springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 7230 and RFC 3986
1.springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本而之前用的是tomcat7 get请求报400 异常信息为 The valid characters are ...
随机推荐
- 问题--flask无法发邮件,无法登录
1.问题 早上测试项目的时候,一直无法正确发送邮件,无法接收,但是查不出原因是什么 2.解决 改变了一下思路,去登录了不需要邮件验证码的用户,发现错误 这个错误提示是一个数据库连接错误,表明应用程序无 ...
- PolarD&N2023秋季个人挑战赛—Misc全解
签个到叭 题目信息 压缩包带密码,放到010查看PK头错误,改回去.. 解压后得到 562+5Yiw5Lmf5LiN6IO96L+Z5LmI566A5Y2V5ZGA77yM5b+r5p2l55yL55 ...
- css - 使用 figure 和 figcaption 快速实现 图片加文字的垂直方向的布局 ( 不支持ie9以下版本 )
一,属性介绍 1. 浏览器支持 注释:Internet Explorer 8 以及更早的版本不支持 <figure> 标签.Internet Explorer 9, Firefox, Op ...
- [转帖]使用systemd-analyze 工具来分析各个服务进程的启动性能
https://www.cnblogs.com/xingmuxin/p/11413784.html systemd-analyze是一个分析启动性能的工具,用于分析启动时服务时间消耗.默认显示启动是内 ...
- [转帖]TiDB之修改root密码
https://www.modb.pro/db/337530 当忘记TiDB root 密码时,可以通过设置skip-grant-table参数来跳过密码验证,登录成功以后再修改root密码. 方法一 ...
- [转帖]Native Memory Tracking 详解(3):追踪区域分析(二)
https://www.modb.pro/db/539804 上篇文章 Native Memory Tracking 详解(2):追踪区域分析(一) 中,分享了NMT追踪区域的部分内存类型--Java ...
- [转帖]Java 平台调试体系
https://www.cnblogs.com/xiaojiesir/p/15652619.html Java 平台调试体系(Java Platform Debugger Architecture,J ...
- Opentelemetry Metrics API
Opentelemetry Metrics API 目录 Opentelemetry Metrics API 概览 在没有安装SDK情况下的API行为 Measurements Metric Inst ...
- flutter项目目录介绍
1 flutter项目目录介绍 android 安卓平台的的相关代理 build 编译后的 ios ios 平台的的相关代理 lib 自己写代码的目录 包好自己的代码 资源 test 放测试文件的 p ...
- 手撕Vue-Router-实现router-view
前言 在上一篇 [手撕Vue-Router-实现router-link] 中,我们实现了 router-link 组件,这一篇我们来实现 router-view 组件. 实现思路 router-vie ...