打印
[STM32F1]

if语句见鬼了

[复制链接]
8821|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我用stm32写的代码,if语句的判断是false,却进去了语句
沙发
禁基的矮子|  楼主 | 2017-11-3 11:33 | 只看该作者
我用if语句来进行校验,temp就是用来校验的值,if语句的两个条件都为false,程序却停在了断点那里,请问这是啥原因

TIM图片20171103113135.png (203.42 KB )

TIM图片20171103113135.png

TIM图片20171103113128.jpg (178.34 KB )

TIM图片20171103113128.jpg

TIM图片20171103113135.png (203.42 KB )

TIM图片20171103113135.png

TIM图片20171103113128.jpg (178.34 KB )

TIM图片20171103113128.jpg

使用特权

评论回复
板凳
240011814| | 2017-11-3 11:47 | 只看该作者
我也碰到过这种情况,你把汇编窗口打开,看看编译的汇编指令对不对

使用特权

评论回复
地板
禁基的矮子|  楼主 | 2017-11-3 13:04 | 只看该作者
240011814 发表于 2017-11-3 11:47
我也碰到过这种情况,你把汇编窗口打开,看看编译的汇编指令对不对

汇编是对的,用的是bne指令,跳转过去

使用特权

评论回复
5
kingkits| | 2017-11-3 13:14 | 只看该作者
你分成2个if试一试,

使用特权

评论回复
6
kingkits| | 2017-11-3 13:16 | 只看该作者
把RX_buf[0]==0 的判断放到for循环前面

使用特权

评论回复
7
kingkits| | 2017-11-3 13:17 | 只看该作者

if(RX_buf[0] != 0)

使用特权

评论回复
8
kingkits| | 2017-11-3 13:20 | 只看该作者
另外,你确定你在调用函数是RF_buf[11]数据已经收到了吗

使用特权

评论回复
9
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])

使用特权

评论回复
10
戈卫东| | 2017-11-3 14:29 | 只看该作者
sonicll 发表于 2017-11-3 13:25
RX_buf[]这个数组的类型是char还是unsigned char?
RX_buf需要和temp类型相同,否则判断相等可能出错
试试  ...

对,有符号数会做符号扩展。虽然8BIT看起来是一样的,但比较的时候却不一样

使用特权

评论回复
11
mmuuss586| | 2017-11-3 14:53 | 只看该作者
看程序没错;
改成2个IF看看;或者多加几个括号;

使用特权

评论回复
12
禁基的矮子|  楼主 | 2017-11-3 16:45 | 只看该作者
戈卫东 发表于 2017-11-3 14:29
对,有符号数会做符号扩展。虽然8BIT看起来是一样的,但比较的时候却不一样 ...

是的,都是unsigned char 型

使用特权

评论回复
13
禁基的矮子|  楼主 | 2017-11-3 16:46 | 只看该作者
kingkits 发表于 2017-11-3 13:16
把RX_buf[0]==0 的判断放到for循环前面

修改了,只放了前面的一个条件,还是会跳转进去

使用特权

评论回复
14
禁基的矮子|  楼主 | 2017-11-3 16:47 | 只看该作者
更诡异的是,程序是偶尔进if

使用特权

评论回复
15
feelhyq| | 2017-11-3 17:35 | 只看该作者
禁基的矮子 发表于 2017-11-3 16:47
更诡异的是,程序是偶尔进if

把优化关掉

使用特权

评论回复
16
Latin_newday| | 2017-11-3 18:08 | 只看该作者
本帖最后由 Latin_newday 于 2017-11-3 18:12 编辑

是否有可能你在这里处理数据的时候,刚好进入中断接收新的数据放进RX_buf,rxcnt也变了;
这样中断回来,你这个if判断就成立了。
另外是否有重传机制?

使用特权

评论回复
17
丁弋宇| | 2017-11-3 18:26 | 只看该作者
Latin_newday 发表于 2017-11-3 18:08
是否有可能你在这里处理数据的时候,刚好进入中断接收新的数据放进RX_buf,rxcnt也变了;
这样中断回来,你 ...

正解

使用特权

评论回复
18
禁基的矮子|  楼主 | 2017-11-3 21:46 | 只看该作者
Latin_newday 发表于 2017-11-3 18:08
是否有可能你在这里处理数据的时候,刚好进入中断接收新的数据放进RX_buf,rxcnt也变了;
这样中断回来,你 ...

没有,我是接受完数据就把串口关了,关了之后再去对数据进行校验。

使用特权

评论回复
19
sky.sun.zz| | 2017-11-3 21:54 | 只看该作者
禁基的矮子 发表于 2017-11-3 11:33
我用if语句来进行校验,temp就是用来校验的值,if语句的两个条件都为false,程序却停在了断点那里,请问这 ...

C++优化等级太高了,选择0级应该就可以了。

使用特权

评论回复
20
禁基的矮子|  楼主 | 2017-11-4 07:39 | 只看该作者
sky.sun.zz 发表于 2017-11-3 21:54
C++优化等级太高了,选择0级应该就可以了。

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

使用特权

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

本版积分规则

12

主题

59

帖子

0

粉丝