• 计算信息帧的校验和(备忘)


    #include <stdio.h>

    #define INS_HEADER1 0x55 //标准帧头1
    #define INS_HEADER2 0xAA //标准帧头2

    //规定了数据帧当中的固定成员,其余数据成员由单元实现的功能决定
    //这里的公用的数据成员必须添加
    typedef struct INS_HEAD
    {
      char head1; //帧头1,0x55
      char head2; //帧头2,0xAA
    }HEAD;

    //数据类型枚举
    typedef enum INS_DATA_TYPE
    {
      TYPE_CMD = 0x00, //命令帧
      TYPE_MESS = 0x01, //数据帧
      TYPE_INFO = 0x02, //信息帧
      TYPE_REP = 0x03, //报告帧
    }DATA_TYPE;

    //单元类型,指明信息帧对应的任务单元
    typedef enum INS_UNIT_TYPE
    {
      PC_UNIT = 0x00, //PC单元,指明命令帧是PC下发的
      TIME_UNIT = 0x01, //时间单元
      /*
      其他单元根据新功能添加
      */
    }UNIT_TYPE;

    //指明数据方向(应用程序到底层或者底层到应用程序)
    typedef enum INS_DST_TYPE
    {
      MESS_TO_LOWER = 0x01,
      MESS_TO_PC = 0x01,
    }DST_TYPE;


    //信息帧错误类型
    typedef enum INS_DATA_ERR_TYPE
    {
      INS_MSG_OK = 0x00,
      INS_HEAD_ERR = 0x01,
      INS_CMD_ERR = 0x02, //命令错误(非命令帧)
      INS_CRC_ERR = 0x03, //数据错误(包含数据长度以及校验错误等)
    }ERR_TYPE;

    //系统错误类型
    typedef enum INS_SYSTEM_ERR_TYPE
    {
      TASK_ERR = 0x00, //任务错误
      QUEUE_ERR = 0x01, //队列错误
      SEMAPHORE_ERR = 0x02, //信号量错误
    }SYSTEM_ERR_TYPE;

    //标准的信息头(包括两个帧头、帧长度、帧类型),任何信息帧头需要包含这些信息
    typedef struct INS_MESSAGE_HEAD_STR
    {
      HEAD Head;
      char Dat_Len;  
      DATA_TYPE DataType;
    }MESSAGE_HEAD_STR;

    typedef enum INS_CRC_TYPE
    {
      CRC_ERR = 0x00,
      CRC_OK = 0x01,
    }CRC_TYPE;

    CRC_TYPE Cal_CRC(MESSAGE_HEAD_STR *insMsg)
    {
      char CRC_RST = 0;
      char *pS, *crc;

      pS = &insMsg->Dat_Len + 1;//从表示数据帧长度的写一个元素开始计算校验和

      crc = pS + insMsg->Dat_Len;

      for(; pS < crc; pS++)
      {
        CRC_RST += *pS;
      }

      if(CRC_RST == *crc)
        return CRC_OK;

      return CRC_ERR;
    }

    int main(int argc, char *argv[])
    {

      char rst = 10;

      rst = Cal_CRC((MESSAGE_HEAD_STR *)array);

      printf("rst = %d ", rst);

      return 0;
    }

  • 相关阅读:
    Power BI 了解DAX中LASTDATE和MAX之间的区别
    js去除字符串中所有html标签 替换某特殊字符 以及获取URL 参数
    Power BI Dax 动态账期,并将该月余下的天数计入下一个月
    Power BI 设置多级文件夹
    在Excel 中对 Power BI Desktop进行分析
    Power BI:如果我创建具有垂直布局(纵向模式)的报表会怎样?
    在PowerPoint 中嵌入Power BI 方法(二)
    将 PowerPoint 作为浏览器使用
    Power Point 中嵌入Power BI
    通过自动日期/时间和DAX变量提高Power BI性能
  • 原文地址:https://www.cnblogs.com/timemachine213/p/10609914.html
Copyright © 2020-2023  润新知