[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("校验成功!");
}