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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版