keil|编译的奇怪问题

2019-08-17 08:03发布



       sec_flag=1;
        
        while(1)
        {
                if(sec_flag)        
                {
                   。。。。。。。。。。。。。。
                   sec_flag=0;
                 }
         }

sec_flag在外部中断里也可以置“1”。但奇怪的是这段程序只执行一次就死了,外部中断置“1”无效(单步调试可以看到)。

把红 {MOD}这行删除,逻辑就正常了。

有碰到这种问题的吗?谢谢。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
fghlw
1楼-- · 2019-08-18 04:18
本帖最后由 fghlw 于 2017-6-13 19:04 编辑
335920284 发表于 2017-6-13 17:49
你把sec_flag定义时加上volatile试试,应该就可以了

为什么?是不是这样编译后会强制每次更新状态?
jinggx
2楼-- · 2019-08-18 04:33
 精彩回答 2  元偷偷看……
fghlw
3楼-- · 2019-08-18 08:29
谢谢了,测试确实如此
DongInker
4楼-- · 2019-08-18 10:40
当中断与主函数main有访问一个变量是就必须要使用volatile修饰变量,这样保证变量不会被编译优化从而出现你这种问题。

一周热门 更多>