我在PC上定义了一些结构体,所有结构体包括数据包头和数据包体两部分,包头定长,包体变长,现在要将结构体发送到板子上,使板子能够识别结构体中的内容,是将结构体打包成字符串发送呢还是通过别的方法,或者说,如果现有数据是数据包头和数据包体,怎么将包头和包体发送给板子并且板子能够识别包头和包体的内容,求各位大神指教啊,我是第一次接触嵌入式开发
------解决方案--------------------
以流的形式发过去,其实你字符串也是流啊,只要保证两边的大小一至就可以。
------解决方案--------------------
假设包头3个字节 某一时刻包体长度为12个字节 即该结构体包头+包体 = 15 字节
定义协议
协议头 0xAA 0x55
(协议头可以随便定义,主要是为了方便识别数据帧的起始,该协议头需要注意的是不要和结构体头 中可能出现的值重合,在这个例子中就是你的结构体不要连续出现0xAA 0x55 这两个值。这里协议头你可以自己定义一个字节,两个字节,三个字节,原则就是前面提到的)
从机地址
(一个字节长,可选项,如果上位机下面接了很多块板子,则必须标明每个从机地址码,用于识别该帧数据发给哪块板子)
数据帧长度
(这里数据帧长度就是你要发送的结构体,以本例来说就是15个字节)
数据帧数据
(变长,长度由数据帧长度标定。以本例来说就是把结构体里面所有成员统一按照某种对齐(大端OR小端)方式拆成一个个字节)
数据帧校验码
(可以采用CRC16或者其它CRC方式校验,简单点可以采用校验和方式。必选项,增强通信可靠性)
协议尾
(表明本帧数据结束,定义方式同协议头)
板子接收到完整数据帧后,根据数据帧长度即可知道结构体长度,然后取出数据帧数据,根据大端还是小端方式还原原始结构体内容。