OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6109|回复: 10

keil|编译的奇怪问题

[复制链接]

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
发表于 2017-6-13 08:34:52 | 显示全部楼层 |阅读模式
1金钱


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

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

把红色这行删除,逻辑就正常了。

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



最佳答案

查看完整内容[请看2#楼]

你把sec_flag定义时加上volatile试试,应该就可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
发表于 2017-6-13 08:34:53 | 显示全部楼层
你把sec_flag定义时加上volatile试试,应该就可以了
回复

使用道具 举报

13

主题

448

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1755
金钱
1755
注册时间
2015-2-7
在线时间
369 小时
发表于 2017-6-13 09:26:31 | 显示全部楼层
打断点调试
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3567
金钱
3567
注册时间
2016-1-8
在线时间
544 小时
发表于 2017-6-13 09:43:20 | 显示全部楼层
printf  马上就找出来哪出问题了
回复

使用道具 举报

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
 楼主| 发表于 2017-6-13 10:11:25 | 显示全部楼层

软仿单步调试,watch里直接观察到数值是对的。但没看过STM的汇编,要不很容易分析出来
回复

使用道具 举报

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
 楼主| 发表于 2017-6-13 10:12:38 | 显示全部楼层
Sun_Fly 发表于 2017-6-13 09:43
printf  马上就找出来哪出问题了

打印“sec_flag”?
我觉得和这个没关系
去掉sec_flag=1;  其他什么也不改,反复实验,软件仿真硬件实际使用都正常
回复

使用道具 举报

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
 楼主| 发表于 2017-6-13 17:28:56 | 显示全部楼层
顶一顶,有遇到类似问题的吗?
回复

使用道具 举报

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
 楼主| 发表于 2017-6-13 18:52:13 | 显示全部楼层
本帖最后由 fghlw 于 2017-6-13 19:04 编辑
335920284 发表于 2017-6-13 17:49
你把sec_flag定义时加上volatile试试,应该就可以了

为什么?是不是这样编译后会强制每次更新状态?
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2017-6-13 20:33:16 | 显示全部楼层
这个是常识啊!这种必须volatile类型。
回复

使用道具 举报

11

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2015-6-7
在线时间
39 小时
 楼主| 发表于 2017-6-14 07:57:14 | 显示全部楼层
谢谢了,测试确实如此
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2017-6-14 09:13:01 | 显示全部楼层
当中断与主函数main有访问一个变量是就必须要使用volatile修饰变量,这样保证变量不会被编译优化从而出现你这种问题。
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-18 09:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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