通信协议的解包打包
篇一:freescale单片机与PC串口通信发送单精度浮点小数打包与解包
freescale单片机与PC串口通信发送单精度浮点小数打包与解包
by smile跃日少年
先说一下我做的工作:PC向单片机发送三个单精度浮点数,然后单片机处理这三个数据,得到想要的控制量。PC上位机使用LabVIEW,单片机使用飞思卡尔MC9S12XMAL。数据不是仪器控制类的,不是这边发送一个命令,那边接收到命令,再返回一个信息这样的;我做的是一端一直发送数据,而不管另一端是否接收。
无论是哪种单片机,串口发送和接收数据都以字节为单位的。PC与单片机通信一般都是用二进制流,这样便于打包与解包,且速度快,不容易出错。
如果你要发送的只是一个字节的数据,那么可以直接接收,很容易转换和处理。但是我们发送的信息往往超过一个字节,比如说浮点小数。单片机是一个一个字节发送的,浮点小数不能直接发送到串口,必须先把浮点小数按一定协议转换成字节。我们都知道无论什么数据在计算机中的存储形式都是二进制,整数是,小数也是。单精度小数的存储国际上使用ieee754协议,一个单精度浮点小数在计算机用四个字节来存储,这样很自然能想到,可以把单精度浮点小数转换成计算机存储的四个字节的形式,再发送到串口,接收方再按照ieee754协议转换成单精度浮点小数,这样就完成了数据的传递。 1.ieee754协议单精度转字节
先看看单精度浮点小数在计算机中的存储形式:
float 数据类型总共占据 32 个位 bit,其中第一个位为数据符号(Symbol,在下面简称为S),该