找回密码
 立即注册
查看: 763|回复: 16

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

[复制链接]

1

主题

8

回帖

31

积分

新手上路

积分
31
发表于 2024-6-13 14:07:43 | 显示全部楼层 |阅读模式
我这是一个接受串口的代码,出现了奇怪的逻辑,这问题卡住我项目一段时间了


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


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



截图202406131404273904.jpg

CLU-V20240601.rar

72.09 KB, 下载次数: 86

回复

使用道具 举报 送花

1

主题

8

回帖

31

积分

新手上路

积分
31
发表于 2024-6-13 14:08:24 | 显示全部楼层
尝试过将RxBuff指定到data xdata都没效果
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6845

积分

论坛元老

积分
6845
发表于 2024-6-13 15:29:46 | 显示全部楼层
数据一致的话比较结果为真会执行对应指令的:
截图202406131524499133.jpg
先判断一下 Out_3 对应的指示灯在脚位置高时是否能亮,排除硬件问题。
其次避免点亮后在其它地方又被熄灭,可通过硬件仿真确认程序运行情况。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-13 16:17:42 | 显示全部楼层
你想要的逻辑是啥呢,万一就是你的程序达不到设定要求不能执行if(RxBuff[4] == DataLen)这一句
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-04 00:16:27
已绑定手机

19

主题

3191

回帖

4930

积分

论坛元老

积分
4930
发表于 2024-6-13 16:46:32 来自手机 | 显示全部楼层
加个printf看下有没有跑到,或者硬件仿真看下什么情况
回复 支持 反对

使用道具 举报 送花

1

主题

8

回帖

31

积分

新手上路

积分
31
发表于 2024-6-13 16:47:15 | 显示全部楼层
乘风*** 发表于 2024-6-13 15:29
数据一致的话比较结果为真会执行对应指令的:

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

Out_3确认过是可以正常点亮的
回复 支持 反对

使用道具 举报 送花

1

主题

8

回帖

31

积分

新手上路

积分
31
发表于 2024-6-13 16:50:30 | 显示全部楼层
xxxe*** 发表于 2024-6-13 16:17
你想要的逻辑是啥呢,万一就是你的程序达不到设定要求不能执行if(RxBuff[4] == DataLen)这一句 ...

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

使用道具 举报 送花

1

主题

8

回帖

31

积分

新手上路

积分
31
发表于 2024-6-13 16:50:58 | 显示全部楼层
so*** 发表于 2024-6-13 16:46
加个printf看下有没有跑到,或者硬件仿真看下什么情况

硬件确认过是没问题的,直接Out_3=1是可以点亮的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-13 17:53:18 | 显示全部楼层
也有可能是Out_3亮了一下就灭了呢,   
你把 if(RxBuff[4] == DataLen)
    {
        Out_3 = 1;
    } else {
        Out_3 = 0;
    }
改成
if(RxBuff[4] == DataLen)
    {
        Out_3 = 1;
    } 试试呢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-05-02 23:40:52

0

主题

336

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-6-13 18:10:10 | 显示全部楼层
还有就是LED_SYS变化过吗
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 10:19 , Processed in 0.119006 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表