上位机与下位机的交流:编码与字节序的实验
下午在南区的讨论班居然提前结束了,而且,到预定吃晚饭的时候还剩两个半小
时,按包师弟的说法,真是个尴尬的时间啊。干做两个半小时,太无聊,如果赶
回所编程序,似乎时间又不太够的样子。我甚至想提议去暴走吧,但是想到冷得
冻肺子的天气,想到包师弟和我都正感冒,也就只是想想。
包师弟说:要编这程序的想法,真是搅得人...
我忘了他原来的措词,为避免他跑上来纠正,只好留了空白。大意是,热血沸腾
啊,夜不能寐啊之类的。现场表现是坐立不安。
好吧。
我们迅速用了十来分钟重新回顾了一下以前做过的计划,然后跑出来打车去所里。
1. 实验计划及基本原理
我们要做的是一个原型实验,确定STM32某芯片 (意法半导体) 的浮点型变量的编
码方案与PC[http://en.wikipedia.org/wiki/IEEE_754-2008]是相同的,且大小
头 (Endianness) 也是一样的。
几天来,包师弟已经把下位机的板子都整完了,昨天半夜的时候邮件说USB芯片
及驱动都整完了。
我们计划的技术路线是:由上位机通过USB向下位机发送一个浮点数的二进制形
式,下位机接收到以后,写到串口,然后用PC从串口读了显示出来。
如果PC下发的和最后显示的如果不一致,即可判定STM32与PC使用了不同的浮点
变量编码。我们希望一致。
为初学者同学们解释一下,这并非是为了验证PC-STM32-串口的链路是正常的,
而是为了验证上位机与下位机使用相同的方式表示一个浮点。
上位机就是PC,下位机是单片机或者ARM芯片的机器。
有的同学可能会问:难道上位机和下位机表示同一个数,会使用不同的方式,不
都是"3.14"这样的形式么?
可能不相同,一定不是"3.14"这样的形式。因为我们知道,计算机只接受二进
制,而"3.14"显示不是二进制。所以"3.14"是以一种有点诡异的方式表示的。
(1) 编码
在上位机中,一个浮点数,比如3.14,需要经过归一化、求符号、求指数、求有
效数字、求尾数……一系列的步骤,终于变成了下面的形式。
如果是32位系统,用十六进制表示就是: 4048F5C3
具体的步骤和4048F5C3中每个二进制位的含义略过,感兴趣的同学请去文后的两
个地址自行观赏。
我和包师弟打算用实验确认,上位机与下位机使用了相同的计算方法,或者说,
相同的编码方法。即,当上位机发送3.14的时候,它发送4048F5C3这四个字节;
下午在南区的讨论班居然提前结束了,而且,到预定吃晚饭的时候还剩两个半小
时,按包师弟的说法,真是个尴尬的时间啊。干做两个半小时,太无聊,如果赶
回所编程序,似乎时间又不太够的样子。我甚至想提议去暴走吧,但是想到冷得
冻肺子的天气,想到包师弟和我都正感冒,也就只是想想。
包师弟说:要编这程序的想法,真是搅得人...
我忘了他原来的措词,为避免他跑上来纠正,只好留了空白。大意是,热血沸腾
啊,夜不能寐啊之类的。现场表现是坐立不安。
好吧。
我们迅速用了十来分钟重新回顾了一下以前做过的计划,然后跑出来打车去所里。
1. 实验计划及基本原理
我们要做的是一个原型实验,确定STM32某芯片 (意法半导体) 的浮点型变量的编
码方案与PC[http://en.wikipedia.org/wiki/IEEE_754-2008]是相同的,且大小
头 (Endianness) 也是一样的。
几天来,包师弟已经把下位机的板子都整完了,昨天半夜的时候邮件说USB芯片
及驱动都整完了。
我们计划的技术路线是:由上位机通过USB向下位机发送一个浮点数的二进制形
式,下位机接收到以后,写到串口,然后用PC从串口读了显示出来。
如果PC下发的和最后显示的如果不一致,即可判定STM32与PC使用了不同的浮点
变量编码。我们希望一致。
为初学者同学们解释一下,这并非是为了验证PC-STM32-串口的链路是正常的,
而是为了验证上位机与下位机使用相同的方式表示一个浮点。
上位机就是PC,下位机是单片机或者ARM芯片的机器。
有的同学可能会问:难道上位机和下位机表示同一个数,会使用不同的方式,不
都是"3.14"这样的形式么?
可能不相同,一定不是"3.14"这样的形式。因为我们知道,计算机只接受二进
制,而"3.14"显示不是二进制。所以"3.14"是以一种有点诡异的方式表示的。
(1) 编码
在上位机中,一个浮点数,比如3.14,需要经过归一化、求符号、求指数、求有
效数字、求尾数……一系列的步骤,终于变成了下面的形式。
如果是32位系统,用十六进制表示就是: 4048F5C3
具体的步骤和4048F5C3中每个二进制位的含义略过,感兴趣的同学请去文后的两
个地址自行观赏。
我和包师弟打算用实验确认,上位机与下位机使用了相同的计算方法,或者说,
相同的编码方法。即,当上位机发送3.14的时候,它发送4048F5C3这四个字节;