【STM32 系列】 —— 解决进入不了标志位的问题
引言
事情是这样的,博主使用串口接收某个数据后,在串口中断中置标志位,在主函数中进入标志位执行任务。但是这标志位死活进不去,博主还以为是串口的问题,改了一天的串口,幸好晚上发现是优化等级/代码规范的问题,接下来仔细说说。
对了,最好看看这一篇文章,对问题的产生和解决会有更好的了解:keil里中断服务函数设置标志位时加volatile
程序 / 问题
串口中断接收并置标志位
可以看到博主的串口中断函数,博主测试过是可以进入且标志位置一的。

while(1) 轮询标志位
这里就产生了问题,程序之间跳过if,直接不进去了,楼主就找问题啊。

解决方法 一
打开魔术棒 -> C/C++ -> Optimization
可以看到其中有不同的优化等级,将其选到较低的 -O0 或 -O1 就行了,这时就可以进入标志位了。
原理就是标志位被优化掉了。

解决方法 二
加上 "volatile" 关键词,防止标志位被优化。
例如:
点击查看代码
volatile uint8_t test_running_flag;
/* 这样就OK了!*/
总结
最后再次推荐看看这篇文章:keil里中断服务函数设置标志位时加volatile
博客导航
本文来自博客园,作者:膝盖中箭卫兵,转载请注明原文链接:https://www.cnblogs.com/Skyrim-sssuuu/p/18808822

浙公网安备 33010602011771号
https://orcid.org/0000-0001-5102-772X