打印
[STM32F1]

if语句见鬼了

[复制链接]
楼主: 禁基的矮子
手机看帖
扫描二维码
随时随地手机跟帖
21
computer00| | 2017-11-4 09:10 | 只看该作者 回帖奖励 |倒序浏览
增加两个临时变量,把缓冲区里的数据传递进去再试试看?

使用特权

评论回复
22
通宵敲代码| | 2017-11-4 10:40 | 只看该作者
又用盗版!

使用特权

评论回复
23
ddllxxrr| | 2017-11-4 10:49 | 只看该作者
有各种优化方案,楼主选的优化方案就落在那儿

使用特权

评论回复
24
禁基的矮子|  楼主 | 2017-11-4 12:59 | 只看该作者
ddllxxrr 发表于 2017-11-4 10:49
有各种优化方案,楼主选的优化方案就落在那儿

先试试把优化关了

使用特权

评论回复
25
小营七郎| | 2017-11-4 18:40 | 只看该作者
你重启以下编译器,把文件目录下的编译产生的中间垃圾全都删掉再来一遍估计就不会有这问题了.

使用特权

评论回复
26
大道至简| | 2017-11-4 20:53 | 只看该作者
这个有可能是仿真器的问题,我也不止一次看见这个问题。。。。。。

使用特权

评论回复
27
handlike| | 2017-11-4 22:42 | 只看该作者
换个写法

     if((temp==RX_buf[rx_cnt-1])&&(RX_buf[0]==0x00))
     {
         rx_add_flag=true;
     }
     else
    {
       rx_add_flag=false;
       return false;
    }

使用特权

评论回复
28
handlike| | 2017-11-4 22:48 | 只看该作者
以后还是少用二个否定关系或连接判断的语句

使用特权

评论回复
29
l4157| | 2017-11-4 23:39 | 只看该作者
volatile

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
禁基的矮子 + 2 很给力!
30
oayzw| | 2017-11-5 15:36 | 只看该作者
keil的调试器里有些变量的值没有实时更新,有时你看见的不是真实的值

使用特权

评论回复
31
linqing171| | 2017-11-5 20:24 | 只看该作者
贴反汇编。
ARM在ARM模式下,指令是有前缀的。有时候 if和else执行的是同样的指令,但是前缀不满足,指令相当于nop。在if内的代码少于3个汇编指令的时候,比清空流水线的代价要小。

使用特权

评论回复
32
lihui567| | 2017-11-6 08:16 | 只看该作者
是不是程序其他地方直接判断并往下执行了

使用特权

评论回复
33
blust5| | 2017-11-6 08:28 | 只看该作者
这个断点可能不是if里面,可能是判断完if语句之后,看下对应的汇编语句部分。

使用特权

评论回复
34
Houtz| | 2017-11-6 09:18 | 只看该作者
这种情况下可能是编译器开了优化所致,这样仿真的时候界面给人展现出来好像有些是不按逻辑执行,实际上CPU是按逻辑正确执行的。把优化级别改成-O0试试就可以了。专业STM32技术工程师,有问题可以跟我交流。375880228@qq.com

使用特权

评论回复
35
kingkits| | 2017-11-6 10:03 | 只看该作者
禁基的矮子 发表于 2017-11-3 16:46
修改了,只放了前面的一个条件,还是会跳转进去

如果是进入后面一个if
建议你在调用这个函数之前把rx_buf[]保存一下,
如果进入你的if(),你先确认你的数据是不是错误。

另一种办法是,先做个延时(大约接收一个字节所需的时间,看看),还有没有你说的那种情况

使用特权

评论回复
36
springvirus| | 2017-11-6 16:45 | 只看该作者
对于中断里对变量赋值,而在主程序里判断该变量,最好加上volatile
我在用MDK里,跑M058s程序调试碰到过

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
禁基的矮子 + 2 赞一个!
37
一路向北lm| | 2017-11-6 17:04 | 只看该作者
程序没问题,应该是收到中断的影响。把中断关了试下。

使用特权

评论回复
38
禁基的矮子|  楼主 | 2017-11-6 18:28 | 只看该作者
springvirus 发表于 2017-11-6 16:45
对于中断里对变量赋值,而在主程序里判断该变量,最好加上volatile
我在用MDK里,跑M058s程序调试碰到过 ...

编译器提示我 volatie uint8 * 和const uint8 *冲突emmmmm

使用特权

评论回复
39
springvirus| | 2017-11-8 16:07 | 只看该作者
禁基的矮子 发表于 2017-11-6 18:28
编译器提示我 volatie uint8 * 和const uint8 *冲突emmmmm

不是一个变量吗,怎么两种定义

使用特权

评论回复
40
宇宙星辰| | 2017-11-9 18:48 | 只看该作者
解决没有?坐等

使用特权

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

本版积分规则