关于一个接口控制文档,我发现很难理解这个概念。有一个具有LSB为0.0625和MSB为2048的参数应该从一台设备传输到另一台设备。范围是0到2400。
这应仅用一个字传送。那是两个字节。
现在的问题是:我理解这个参数是由一个分辨率为0.0625的测量系统测量的。由于它是十进制数,我们如何使用纯整数的2个字节来传递这个连续的范围参数(2字节的无符号范围是0到65535)?
这个参数是速度,它是由INS-GPS航空电子系统测量的,并且仅用两个字节就被传送到CPU。
我该怎么理解呢?
如何将连续十进制参数表示为离散整数参数?
发布于 2018-01-27 15:42:00
以下函数将执行从物理值到16位代码的转换:
short valueToCode(double value) {
return round(16.0 * value);
}一个无符号的16位值有16位(当然),最左边的是MSB (最重要的位),最右边的是LSB (最不重要的位)。
读取为普通整数,LSB位置中的1位占值1,MSB位置中的1位占32768。
在您的例子中,16位数字表示分数部分的数字,一个LSB代表0.0625 (= 1/16),MSB代表2048年(= 32768/16)。这是一致的,这意味着你总是通过把16位代码除以16来得到小数,或者,如果你想找到最接近某个分数值的代码,那么乘以16,然后取最接近的整数。
一些示例(给出您想要实现的值、最接近该值的代码以及有效值):
Desired Code (dec + bin) Resulting Value
0.0625 1 = 0000000000000001 0.0625 (the LSB case)
0.1 2 = 0000000000000010 0.125
1.0 16 = 0000000000010000 1.0
20.5 328 = 0000000101001000 20.5
2048.0 32768 = 1000000000000000 2048.0 (the MSB case)https://softwareengineering.stackexchange.com/questions/364740
复制相似问题