Llllllssssssskk 发表于 2024-6-13 14:07:43

【STC15W408S】碰到诡异的变量判断相等跟预期不符合问题

我这是一个接受串口的代码,出现了奇怪的逻辑,这问题卡住我项目一段时间了


RxBuff == 9,能判断到
DataLen == 9, 能判断到
但是RxBuff == DataLen,就判断不到
代码中的Out_1 Out_2 Out_3分别控制3个灯,现在的现象只亮了前面两个灯


代码见图片
完整代码见附件



Llllllssssssskk 发表于 2024-6-13 14:08:24

尝试过将RxBuff指定到data xdata都没效果

乘风飞扬 发表于 2024-6-13 15:29:46

数据一致的话比较结果为真会执行对应指令的:

先判断一下 Out_3 对应的指示灯在脚位置高时是否能亮,排除硬件问题。
其次避免点亮后在其它地方又被熄灭,可通过硬件仿真确认程序运行情况。

xxxevery 发表于 2024-6-13 16:17:42

你想要的逻辑是啥呢,万一就是你的程序达不到设定要求不能执行if(RxBuff == DataLen)这一句

soma 发表于 2024-6-13 16:46:32

加个printf看下有没有跑到,或者硬件仿真看下什么情况

Llllllssssssskk 发表于 2024-6-13 16:47:15

乘风飞扬 发表于 2024-6-13 15:29
数据一致的话比较结果为真会执行对应指令的:

先判断一下 Out_3 对应的指示灯在脚位置高时是否能亮,排除 ...

Out_3确认过是可以正常点亮的

Llllllssssssskk 发表于 2024-6-13 16:50:30

xxxevery 发表于 2024-6-13 16:17
你想要的逻辑是啥呢,万一就是你的程序达不到设定要求不能执行if(RxBuff == DataLen)这一句 ...

我发送的是一条9个字节长度的串口数据,每接收一个字节,这个接收中断会进来一次
DataLen表示接收数据的长度,只有接收到9个字节的数据,DataLen==9,Out_2才会点亮,其他比如收了8个字节,是会执行Out_2=0的
我现在的现象是发送完9个字节后,只有2个灯是亮着的,即最后一个字节回调的时候,判断1满足,判断2满足,但是判断3不满足,这就很奇怪

Llllllssssssskk 发表于 2024-6-13 16:50:58

soma 发表于 2024-6-13 16:46
加个printf看下有没有跑到,或者硬件仿真看下什么情况

硬件确认过是没问题的,直接Out_3=1是可以点亮的

xxxevery 发表于 2024-6-13 17:53:18

也有可能是Out_3亮了一下就灭了呢,   
你把 if(RxBuff == DataLen)
    {
      Out_3 = 1;
    } else {
      Out_3 = 0;
    }
改成
if(RxBuff == DataLen)
    {
      Out_3 = 1;
    } 试试呢

xxxevery 发表于 2024-6-13 18:10:10

还有就是LED_SYS变化过吗
页: [1] 2
查看完整版本: 【STC15W408S】碰到诡异的变量判断相等跟预期不符合问题