[STM32F1]

if语句见鬼了

[复制链接]
7181|44
手机看帖
扫描二维码
随时随地手机跟帖
禁基的矮子|  楼主 | 2017-11-3 11:31 | 显示全部楼层 |阅读模式
我用stm32写的代码,if语句的判断是false,却进去了语句
禁基的矮子|  楼主 | 2017-11-3 11:33 | 显示全部楼层
我用if语句来进行校验,temp就是用来校验的值,if语句的两个条件都为false,程序却停在了断点那里,请问这是啥原因
TIM图片20171103113135.png
TIM图片20171103113128.jpg
TIM图片20171103113135.png
TIM图片20171103113128.jpg

使用特权

评论回复
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级应该就可以了。

我试试,不过这段代码不是一直会跑进去,而是偶尔跑进去

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

51

帖子

0

粉丝