[STM32F1] if语句见鬼了

[复制链接]
9981|44
 楼主| 禁基的矮子 发表于 2017-11-3 11:31 | 显示全部楼层 |阅读模式
我用stm32写的代码,if语句的判断是false,却进去了语句
 楼主| 禁基的矮子 发表于 2017-11-3 11:33 | 显示全部楼层
我用if语句来进行校验,temp就是用来校验的值,if语句的两个条件都为false,程序却停在了断点那里,请问这是啥原因
TIM图片20171103113128.jpg
TIM图片20171103113135.png
TIM图片20171103113128.jpg
TIM图片20171103113135.png
240011814 发表于 2017-11-3 11:47 | 显示全部楼层
我也碰到过这种情况,你把汇编窗口打开,看看编译的汇编指令对不对
 楼主| 禁基的矮子 发表于 2017-11-3 13:04 | 显示全部楼层
240011814 发表于 2017-11-3 11:47
我也碰到过这种情况,你把汇编窗口打开,看看编译的汇编指令对不对

汇编是对的,用的是bne指令,跳转过去
kingkits 发表于 2017-11-3 13:14 | 显示全部楼层
你分成2个if试一试,
kingkits 发表于 2017-11-3 13:16 | 显示全部楼层
把RX_buf[0]==0 的判断放到for循环前面
kingkits 发表于 2017-11-3 13:17 | 显示全部楼层

if(RX_buf[0] != 0)
kingkits 发表于 2017-11-3 13:20 | 显示全部楼层
另外,你确定你在调用函数是RF_buf[11]数据已经收到了吗
sonicll 发表于 2017-11-3 13:25 | 显示全部楼层
本帖最后由 sonicll 于 2017-11-3 13:31 编辑

RX_buf[]这个数组的类型是char还是unsigned char?
RX_buf需要和temp类型相同,否则判断相等可能出错
试试 (temp != (unsigned char)RX_buf[rx_cnt-1])

戈卫东 发表于 2017-11-3 14:29 | 显示全部楼层
sonicll 发表于 2017-11-3 13:25
RX_buf[]这个数组的类型是char还是unsigned char?
RX_buf需要和temp类型相同,否则判断相等可能出错
试试  ...

对,有符号数会做符号扩展。虽然8BIT看起来是一样的,但比较的时候却不一样
mmuuss586 发表于 2017-11-3 14:53 | 显示全部楼层
看程序没错;
改成2个IF看看;或者多加几个括号;
 楼主| 禁基的矮子 发表于 2017-11-3 16:45 | 显示全部楼层
戈卫东 发表于 2017-11-3 14:29
对,有符号数会做符号扩展。虽然8BIT看起来是一样的,但比较的时候却不一样 ...

是的,都是unsigned char 型
 楼主| 禁基的矮子 发表于 2017-11-3 16:46 | 显示全部楼层
kingkits 发表于 2017-11-3 13:16
把RX_buf[0]==0 的判断放到for循环前面

修改了,只放了前面的一个条件,还是会跳转进去
 楼主| 禁基的矮子 发表于 2017-11-3 16:47 | 显示全部楼层
更诡异的是,程序是偶尔进if
feelhyq 发表于 2017-11-3 17:35 | 显示全部楼层
禁基的矮子 发表于 2017-11-3 16:47
更诡异的是,程序是偶尔进if

把优化关掉
Latin_newday 发表于 2017-11-3 18:08 | 显示全部楼层
本帖最后由 Latin_newday 于 2017-11-3 18:12 编辑

是否有可能你在这里处理数据的时候,刚好进入中断接收新的数据放进RX_buf,rxcnt也变了;
这样中断回来,你这个if判断就成立了。
另外是否有重传机制?
丁弋宇 发表于 2017-11-3 18:26 | 显示全部楼层
Latin_newday 发表于 2017-11-3 18:08
是否有可能你在这里处理数据的时候,刚好进入中断接收新的数据放进RX_buf,rxcnt也变了;
这样中断回来,你 ...

正解
 楼主| 禁基的矮子 发表于 2017-11-3 21:46 | 显示全部楼层
Latin_newday 发表于 2017-11-3 18:08
是否有可能你在这里处理数据的时候,刚好进入中断接收新的数据放进RX_buf,rxcnt也变了;
这样中断回来,你 ...

没有,我是接受完数据就把串口关了,关了之后再去对数据进行校验。
sky.sun.zz 发表于 2017-11-3 21:54 | 显示全部楼层
禁基的矮子 发表于 2017-11-3 11:33
我用if语句来进行校验,temp就是用来校验的值,if语句的两个条件都为false,程序却停在了断点那里,请问这 ...

C++优化等级太高了,选择0级应该就可以了。
 楼主| 禁基的矮子 发表于 2017-11-4 07:39 | 显示全部楼层
sky.sun.zz 发表于 2017-11-3 21:54
C++优化等级太高了,选择0级应该就可以了。

我试试,不过这段代码不是一直会跑进去,而是偶尔跑进去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

60

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部