单片机卡死在while的原因

[复制链接]
499|11
 楼主 | 2018-2-11 22:21 | 显示全部楼层 |阅读模式
新手一枚,调试stm32串口中断时将标志位放在while循环里,即while(flag),当flag为0时发现程序仍然卡死在while循环这句,查资料发现原因:编译器优化导致的结果,如果要对一个变量每次都要读取值,那么需要在定义变量时加volatile,强制每次从内存直接加载这个值,防止优化导致的出错
| 2018-2-12 07:49 | 显示全部楼层
可能存在优化的情况,你可以直接while(获取串口中断标志函数),你这样就不会被优化了。或者你可以将优化等级调整为0,看看是不是真的被优化掉了。
| 2018-2-20 20:22 | 显示全部楼层
一楼
| 2018-2-20 21:44 | 显示全部楼层
肯定有这个可能的,加volatile属性是必要的,毕竟这个变量或者标志,会在中断函数里改变,本来就应该是volatile属性。
| 2018-2-20 21:59 | 显示全部楼层
你这个标志位是怎么定义的
| 2018-2-21 07:46 | 显示全部楼层
多谢分享,学习了
| 2018-2-21 08:42 | 显示全部楼层
要是计算机语言都用中文就好了
| 2018-2-22 08:47 | 显示全部楼层
加看门狗
| 2018-2-22 08:48 | 显示全部楼层
慢慢调试看是哪里的问题
 楼主 | 2018-3-11 13:36 | 显示全部楼层
xyz549040622 发表于 2018-2-12 07:49
可能存在优化的情况,你可以直接while(获取串口中断标志函数),你这样就不会被优化了。或者你可以将优化等 ...

好的,谢谢
| 2018-3-11 16:59 | 显示全部楼层
说地很对,或者优化调为零
| 2018-3-11 17:38 | 显示全部楼层
volatile属性是必要的,不过这里没有提到采用的编译器. 有时候, volatile属性也不是一定能实现的, 比如 GCCARM,
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /4 下一条

分享 快速回复 返回顶部 返回列表