OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3400|回复: 6

本人C基础差,帮忙看下下面这段程序逻辑是不是有问题

[复制链接]

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2019-1-3
在线时间
30 小时
发表于 2019-9-30 18:28:58 | 显示全部楼层 |阅读模式

  1. <div class="blockcode"><blockquote>case 2 :      
  2.         if (start_code==1)
  3.           {
  4.              RxData[address_counter] =RxBuf;
  5.              address_counter++ ;           
  6.           }
  7.              if(address_counter>8)
  8.              {  
  9.                start_code=0;  address_counter=0 ;            
  10.                dmx_data[0]= RxData[1];
  11.                dmx_data[1]= RxData[2];
  12.                dmx_data[2]= RxData[3];
  13.                dmx_data[3]= RxData[4];
  14.                dmx_data[4]= RxData[5];
  15.                dmx_data[5]= RxData[6];
  16.                dmx_data[6]= RxData[7];
  17.                dmx_data[7]= RxData[8];
  18.              }
  19.              if(dmx_data[3]==0xaa) {check_flag=1; break1=0;  }
  20.              else if(dmx_data[3]==0x66)
  21.               {
  22.                  RxData[address_counter+8] =RxBuf;
  23.                  address_counter++ ;
  24.                 if(address_counter>3)
  25.                 {
  26.                   dmx_data[8] =RxData[9];
  27.                   dmx_data[9] =RxData[10];
  28.                   dmx_data[10]=RxData[11];
  29.                   address_counter=0; check_flag_configuration=1; break1=0;
  30.                 }
  31.               }
  32.              // }
  33.                break;
复制代码

               dmx_data[0]= RxData[1];
               dmx_data[1]= RxData[2];
               dmx_data[2]= RxData[3];
               dmx_data[3]= RxData[4];
               dmx_data[4]= RxData[5];
               dmx_data[5]= RxData[6];
               dmx_data[6]= RxData[7];
               dmx_data[7]= RxData[8];
             }
             if(dmx_data[3]==0x55) {start_code=0; check_flag=1; break1=0;  }
             else if(dmx_data[3]==0x66)
              {
                if(address_counter>2)
                {  
                  dmx_data[8] =RxData[0];
                  dmx_data[9] =RxData[1];
                  dmx_data[10]=RxData[2];
                  start_code=0; address_counter=0; check_flag_configuration=1; break1=0;
                }
              }
               break;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2019-1-3
在线时间
30 小时
 楼主| 发表于 2019-9-30 18:31:45 | 显示全部楼层
串口要接收8位和11位数据,不能多接也不能少接,主要是通过第四位是0xaa和0x66来判断是8位还是11位,目前老是接收11位的时候数据有问题,希望有人指点下,谢谢
回复 支持 反对

使用道具 举报

21

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
423
金钱
423
注册时间
2019-5-12
在线时间
168 小时
发表于 2019-10-1 20:21:28 | 显示全部楼层
胡松松 发表于 2019-9-30 18:31
串口要接收8位和11位数据,不能多接也不能少接,主要是通过第四位是0xaa和0x66来判断是8位还是11位,目前老 ...

在第四位判断只有一个if0x55 else if 0x66,没有0xaa呀
回复 支持 反对

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2019-1-3
在线时间
30 小时
 楼主| 发表于 2019-10-24 08:57:04 | 显示全部楼层
hejun96 发表于 2019-10-1 20:21
在第四位判断只有一个if0x55 else if 0x66,没有0xaa呀

嗯,写错了,应该是判断0x55,   但是还是不行,我debug的时候,还是接收11位数据有问题
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2017-6-11
在线时间
24 小时
发表于 2019-11-3 10:41:49 | 显示全部楼层
你先判断了address_counter,如果address_counter大于8就使address_counter=0;所以你不可能收到11字节的数据,逻辑不对,应该先判断第3个数据,再判读address_counter
回复 支持 反对

使用道具 举报

0

主题

78

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1593
金钱
1593
注册时间
2018-10-11
在线时间
224 小时
发表于 2019-11-5 08:53:54 | 显示全部楼层
这么久了还在搞这个吖...

楼上说的有道理,address_counter太早就清0了....
话说,DMX是循环的数据流,你接收的时候就把有用的数据取出来就行了,没用的数据就丢掉,没有所谓的什么不能多接也不能少接的...
回复 支持 反对

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2019-1-3
在线时间
30 小时
 楼主| 发表于 2019-11-23 09:08:19 | 显示全部楼层
spritels 发表于 2019-11-5 08:53
这么久了还在搞这个吖...

楼上说的有道理,address_counter太早就清0了....

   大哥见笑了,搞了很久很久,还没把之前那个搞顺
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 12:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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