单片机卡死在while的原因

[复制链接]
1437|11
手机看帖
扫描二维码
随时随地手机跟帖
am5670252|  楼主 | 2018-2-11 22:21 | 显示全部楼层 |阅读模式
新手一枚,调试stm32串口中断时将标志位放在while循环里,即while(flag),当flag为0时发现程序仍然卡死在while循环这句,查资料发现原因:编译器优化导致的结果,如果要对一个变量每次都要读取值,那么需要在定义变量时加volatile,强制每次从内存直接加载这个值,防止优化导致的出错

相关帖子

xyz549040622| | 2018-2-12 07:49 | 显示全部楼层
可能存在优化的情况,你可以直接while(获取串口中断标志函数),你这样就不会被优化了。或者你可以将优化等级调整为0,看看是不是真的被优化掉了。

使用特权

评论回复
caijie001| | 2018-2-20 20:22 | 显示全部楼层
一楼

使用特权

评论回复
gx_huang| | 2018-2-20 21:44 | 显示全部楼层
肯定有这个可能的,加volatile属性是必要的,毕竟这个变量或者标志,会在中断函数里改变,本来就应该是volatile属性。

使用特权

评论回复
lihui567| | 2018-2-20 21:59 | 显示全部楼层
你这个标志位是怎么定义的

使用特权

评论回复
南极洲扫地人| | 2018-2-21 07:46 | 显示全部楼层
多谢分享,学习了

使用特权

评论回复
向Qian看| | 2018-2-21 08:42 | 显示全部楼层
要是计算机语言都用中文就好了

使用特权

评论回复
一路向北lm| | 2018-2-22 08:47 | 显示全部楼层
加看门狗

使用特权

评论回复
一路向北lm| | 2018-2-22 08:48 | 显示全部楼层
慢慢调试看是哪里的问题

使用特权

评论回复
am5670252|  楼主 | 2018-3-11 13:36 | 显示全部楼层
xyz549040622 发表于 2018-2-12 07:49
可能存在优化的情况,你可以直接while(获取串口中断标志函数),你这样就不会被优化了。或者你可以将优化等 ...

好的,谢谢

使用特权

评论回复
ddllxxrr| | 2018-3-11 16:59 | 显示全部楼层
说地很对,或者优化调为零

使用特权

评论回复
airwill| | 2018-3-11 17:38 | 显示全部楼层
volatile属性是必要的,不过这里没有提到采用的编译器. 有时候, volatile属性也不是一定能实现的, 比如 GCCARM,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

51

帖子

0

粉丝