你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

keil arm编译BUG

[复制链接]
yyq006 提问时间:2017-5-12 14:04 /
今天调试一个程序,发现老是死在一个地方,仔细看了一下好像是keil编译器的问题:   414:         while(tx2ready){};
0x0800256A 7978      LDRB     r0,[r7,#0x05]
0x0800256C 2800      CMP      r0,#0x00
0x0800256E D1FD      BNE      0x0800256C



本来tx2ready是作为一个发送完成标志,发送完成后在中断里清零,可以再次发送,但看编译结果,
0x0800256A 7978      LDRB     r0,[r7,#0x05]         //往r0里送tx2ready的值

0x0800256C 2800      CMP      r0,#0x00               //比较

0x0800256E D1FD      BNE      0x0800256C         //非零跳转,但实际跳到了第二行,直接比较,r0的值并没有更新,形成死循环。

不知大家有没有遇到这个问题,我用的keil版本是uVision V5.23.0.0
收藏 1 评论5 发布时间:2017-5-12 14:04

举报

5个回答
moyanming2013 回答时间:2017-5-12 14:26:51
你确保tx2ready被成功写0以及写0后被立即在while中判断了吗?
即使你都确保了,tx2ready应该被修饰为volatile。
qianfan 回答时间:2017-5-12 14:32:14
volatile: +1
yyq006 回答时间:2017-5-12 14:07:52
1.png
yyq006 回答时间:2017-5-12 16:28:02
moyanming2013 发表于 2017-5-12 14:26
你确保tx2ready被成功写0以及写0后被立即在while中判断了吗?
即使你都确保了,tx2ready应该被修饰为volati ...

确实是我的疏忽,感谢提醒。
yyq006 回答时间:2017-5-12 16:28:23

确实是我的疏忽,感谢提醒。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版