当前位置:网站首页>升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
2022-07-30 17:21:00 【IOsetting】
烧录后 Reset And Run 重启失效
存在于 MDK ARM 5.28 之后包括 5.37 的版本. 需要做以下设置
- Debug -> ST-Link Debugger -> Settings
- 切换到 Pack 标签页, 取消勾选 Enable
- 点击 OK 保存
判断编译器版本
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
#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://yzsam.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 以外的优化等级
边栏推荐
- Go新项目-编译热加载使用和对比,让开发更自由(3)
- C陷阱与缺陷 第6章 预处理器 6.3 宏并不是语句
- C陷阱与缺陷 第7章 可移植性缺陷 7.4 字符是有符号数还是无符号数
- 《痞子衡嵌入式半月刊》 第 59 期
- 关于内和调试无法查看ntdll内存的问题
- No qualifying bean of type问题解决
- 论文阅读之《DeepIlluminance: Contextual IlluminanceEstimation via Deep Neural Networks》
- Various meanings of SQL's PARTITION BY syntax (with examples)
- 图卷积神经网络的数学原理——谱图理论和傅里叶变换初探
- 习题:变量、常量和基本数据类型
猜你喜欢
随机推荐
FP6606CMP5 CPC-16L USB类型-C和PD充电控制器 百盛电子代理商
SYSCALL SWAPGS
【AAAI2020】阿里DMR:融合Matching思想的深度排序模型
Deep Feedback Network for Recommendation
Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions
Test Management and Specification
FP6606ACAW4 TQFN-20L (3mmx3mm) USB双端口充电控制器 百盛电子代理
升级Win11后不喜欢怎么退回Win10系统?
Insert data into MySQL in C language
Daily practice------Generate 13-digit bar, Ean-13 code rule: The thirteenth digit is the check code obtained by the calculation of the first twelve digits.
Weka 3.8.6安装与Weka 3.8.6功能介绍
bean的生命周期
Discuz magazine/news report template (jeavi_line) UTF8-GBK template
C陷阱与缺陷 第7章 可移植性缺陷 7.1 应对C语言标准变更
图卷积神经网络的数学原理——谱图理论和傅里叶变换初探
论文阅读之《Underwater scene prior inspired deep underwater image and video Enhancement (UWCNN)》
Oracle动态监听与静态监听详解
Dive deep on Netflix‘s recommender system(Netflix推荐系统是如何实现的?)
Error occurred while trying to proxy request The project suddenly can't get up
JMeter Notes 4 | JMeter Interface Introduction

![Valid bracketed strings [greedy exercise]](/img/1c/5cefb53bc4aba54dd79b0cc9b09b0d.png)








![[HarekazeCTF2019] Avatar Uploader 1](/img/2c/6dde7b8d34ba0deb334b4283e1e30e.png)