# debug 心得

又称:遇到的各种奇怪问题

# Keil 的编译优化

编译优化默认开启 O3,可能会导致调试时汇编代码与 C 代码顺序不一致

# Volatile

问题:调试中发现变量已经满足循环退出的条件,但始终未退出

如果没有使用 volatile 声明,编译器可能会优化掉对它的重复读取操作,导致主循环中永远看不到它的变化

资料 [https://zhuanlan.zhihu.com/p/1911474605773809001]

需要声明为 Volatile 类型

据说是编译器自动优化掉了,也许关闭编译优化也可以解决?

# DMA 自动装载

问题:23 年 H 题,连续两次 ADC 采样出现了问题

DMA 启动后,相应的装载不占用系统时钟

出于同步的原因,需要依据情况 HAL_Delay 相应时间,或者等待传输完成的中断标志位

# DMA 中断只触发一次

待研究

试一试关闭 DMA 重新打开

# 大的全局数组

问题:串口通讯,重定向 printf,程序总是卡死

参考 https://blog.csdn.net/networkhunter/article/details/83959254

和这篇文章里面一样,申请了大空间的全局数组,后面把数组拆分小就解决了,原因不明

建议不要使用 printf

Edited on Views times