[ROS串口通信]Serial.h --- 读入结构体

在ros1串口通信中,网上关于使用Serial.h进行串口通信的博客,大多是接收数组的,而接收结构体的较少
本文介绍使用c++ ROS1中Serial库.h读入结构体


//例如,结构体定义如下:

typedef struct __attribute__((packed))
  {
    uint16_t team;         /* 本身队伍 */
    uint16_t time;         /* 比赛开始时间 */
    uint8_t race;          /* 比赛类型 */
    uint8_t rfid;          /* 增益地点 */
    uint8_t base_hp;       /* 基地血量 */
    uint8_t sentry_hp;     /* 哨兵血量 */
    uint8_t ballet_remain; /* 剩余弹量 */
    uint8_t arm;           /* 兵种信息 */
  } Protocol_UpDataReferee_t;
 
typedef struct __attribute__((packed))
  {
    Protocol_UpDataReferee_t data;
    uint16_t crc16;
  } Protocol_UpPackageReferee_t;
 
serial::Serial ser;
Protocol_UpPackageReferee_t ref;
 
ser.read(reinterpret_cast<uint8_t *>(&ref), sizeof(ref));     //我们可以这么这来读取结构体
/*t<uint8_t *>(&ref)是结构体中第一个元素的的地址,
我们从这个地方开始读,然后读入sizeof(ref)大小的数据,这就是整个结构体了 */
 
//同样,我们也可以类似进行进行CRC校验:
if(crc16::CRC16_Verify(reinterpret_cast<uint8_t *>(&ref), sizeof(ref))){
  printf("校验成功!");
 
}
posted @ 2024-01-21 23:18  Tanگگ  阅读(56)  评论(0编辑  收藏  举报