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

IAR调试时用到if条件语句执行异常的问题

[复制链接]
watercici 提问时间:2019-10-8 10:04 /
我在用IAR在线调试的时候,发现一个问题,比如:有一个函数是:decode(u8 id)
{
    if(id ==0x01)
   {
       a = 0x01;//代表一种执行动作
    }
   if(id == 0x02)
   {
      b = 0x01;//代表另一种执行动作
   }
}
我在调试的时候函数是这样的:decode(0x02)
但是单步执行到函数里面发现一下几种情况:1.id 的确是0x02,但是他两个if分支都去执行了;2.函数执行进去之后就id却不是0x02而是其他任意值,两个分支还是都执行,但是奇怪的是只有调试的时候这样,板子在机子上运行的时候没有任何异常。想问一下这是为什么?谢谢!在线等。。。。。

收藏 评论8 发布时间:2019-10-8 10:04

举报

8个回答
七哥 回答时间:2019-10-8 12:42:53
这种情况不大可能出现,你贴出来的程序应该是经过改写的。
调试程序时,要把汇编窗口也开着,看程序有没有被优化。
watercici 回答时间:2019-10-8 13:42:39
toofree 发表于 2019-10-8 12:42
这种情况不大可能出现,你贴出来的程序应该是经过改写的。
调试程序时,要把汇编窗口也开着,看程序有没有 ...

程序被优化if语句判断就会出错吗?程序代码是被改写的,这个只是举一个简单的例子说明,还有没有其他可能原因?
七哥 回答时间:2019-10-8 16:22:26
实测,不存在你说有情况。
20191008162029.jpg

按F11,单步执行,看结果。通过a、b值变化,得出程序执行的哪个分支。执行的时候,id==1时,也根本进不了 "b = 0x01;"的赋值语句
20191008162101.jpg

同样,id==2时,也根本进不了 "a = 0x01;"的赋值语句
20191008162135.jpg



评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

watercici 回答时间:2019-10-8 16:51:48
toofree 发表于 2019-10-8 16:22
实测,不存在你说有情况。

我觉得单测这个函数没有问题,会不会是整个程序其他地方影响的,我只是举这个例子方便叙述问题,就是您有没有遇到过这种情况,在一个比较复杂的完成项目程序中,局部if语句执行异常的情况。我觉得id是直接传进来的,和程序的其他地方没有关系,但是就是调试的时候跟踪下来是异常的。
废鱼 回答时间:2019-10-8 22:27:58
楼主应该是优化的问题,建议把优化关闭后再测试。实际上程序运行时正确的,但是我们仿真的时候,显示的过程会有所差别。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

慎微 回答时间:2019-10-9 08:47:06
是否 1) id 的定义有同名问题;2)是否多任务系统;3)是否中断改到这ID 值,4)是否ID 被乱指针改值。
zhao.zhao 回答时间:2019-10-9 09:41:27
流水线的问题,把优化等级设置为最低试试

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

watercici 回答时间:2019-10-9 17:10:48
mikecai 发表于 2019-10-9 08:47
是否 1) id 的定义有同名问题;2)是否多任务系统;3)是否中断改到这ID 值,4)是否ID 被乱指针改值。 ...

id只是一个局部参数,而且是直接传递的,没有同名;是单任务系统;没有中断更改ID的值;您说的第4点不太好确定

所属标签

相似问题

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