用户工具

站点工具


gm_issue:正负号计算

输出数据的正负号是按照补码的方式表示的,也就是其二进制数据的最高位如果为1则表示负数。程序编写的时候,可以采用强制转化为有符号的short类型来解决符号的问题,具体做法是,将数据的高位强制DataH转化为short类型,然后再左移8位,和低字节DataL进行与操作。例如加速度包的解析方法:
加速度包一共有11个字节,chrTemp[11],其中chrTemp[3]为X轴加速度的高8位,chrTemp[2]为X轴加速度的低8位,那么加速度的解析代码如下:
float a[0];
a[0]=(( ((short)chrTemp[3])«8)|chrTemp[2])/32768*16;
其中( ((short)chrTemp[3])«8)|chrTemp[2]得到short类型的有符号数据,short类型的数据表示范围是-32768~32767之间,加速度的量程范围是正负16g,所以需要除以32768再乘以16。这样处理以后,得到的数据就是有符号的float类型数据了。
以55 51 78 FD 4E 03 85 F8 FC 0E F3为例,此包是加速度包,根据协议X轴的加速度是0XFD78,也就是十进制的-648,根据公式转换-648/32768*16 = -0.31g
详细的图文换算可参看此链接:http://elecmaster.net/forum.php?mod=viewthread&tid=812&page=1&extra=#pid1582

gm_issue/正负号计算.txt · 最后更改: 2020/05/07 10:13 由 witmotion