新手,对检验和一点都不懂,谁帮我弄一个函数。

2019-12-27 18:46发布

最近在弄一个SMT8L串口通信,从机的供应商给出了数据包的格式,10bit 异步转输方式。

数据包的格式以下:


  
          1Byte    1Byte         1Byte         1Byte         1Byte         1Byte   1Byte
        0x22           0xee          len            CMD_H        CMD_L        Data             CS
                                                       
1        0x22,0xee 数据包引导头。                                               
2        Data 域的总长度                                               
3        CMD  命令 由两字节组成                                               
4        CS 数据包的校验和字节                                               
                                                       
        计算方式以下:                                               
         CS= 0-(Len+CMD_H+CMD_L+Data[0]+… +Data[N-1]                                               

这个验验和字节,如何弄,函数应怎么写。

没弄过,谁帮个忙。。
7条回答
zouzhichao
2019-12-27 23:00
  1. uint8_t fun(const uint8_t* src) {
  2.         uint8_t cnt, sum;
  3.         uint16_t cmd;
  4.         if (0x22 != *src++) {
  5.                 return 0xff;
  6.         }
  7.         if (0xee != *src++) {
  8.                 return 0xff;
  9.         }
  10.         cnt = *src++;
  11.         cmd = (uint16_t)(*src++);
  12.         cmd <<= 8;
  13.         cmd |= (uint16_t)(*src++);
  14.         for (sum = 0; cnt != 0; cnt--) {
  15.                 sum += *src++;
  16.         }
  17.         sum += *src;
  18.         return sum;
  19. }
复制代码

一周热门 更多>