BLE GATT:为什么在整数types中存储小数?

我正在学习蓝牙技术,特别是如何实现GATT特性规格,以便我可以编写外设驱动程序。 在几乎所有的规格中,他们都希望使用整型数据types来保存十进制值(当数据是十进制值时)。

例如, 循环功率测量规格规格将Pedal Power Balance存储到uint8 。 正如您所见, Pedal Power Balance值的分辨率为1位小数(例如: 10.1 )。 GATT 格式types规范有很多types的小数点数字( float32等)。

为什么GATT不使用被devise为保存十进制数字的数据types? 我的猜测是限制通过BLE发送的数据的大小。 那是对的吗?

我正在编写NodeJs代码来快速certificate一些技术。 用我的假设,这里是我怎么猜测一个精确到一个有符号的8位整数一个十进制小数“打包”。 我在这里使用加速度(可以是+/-,所以使用signed int):

 'use strict'; const oneG = -9.806649999788; let int8Buf = new Buffer.alloc(8); //to hold signed 8-bit integer int8Buf.writeInt8(oneG * 10, 0); console.log(int8Buf.readInt8(0) / 10); 

按照我的预期运行这个输出-9.8

问题:

  1. GATT是否使用这种“包装”技术来节省空间?
  2. 我正确地做这个?
  3. NodeJS有一个库来处理这个数据打包和解包吗? 看起来像一个非常普遍的情况。 我搜查了NPM,但我不确定这个概念是什么。

像这样的缩放整数用于简化在小型embedded式设备上的实现。

出于成本和功耗的原因,所使用的微控制器通常没有FPU(即硬件支持浮点计算)。 在那些没有FPU的软件上,可以使用软件浮点库,但是这些库很慢(所以它们消耗功率),而且它们占用了代码空间。 即使在具有FPU的微控制器上,使用它也会增加功耗,并且使用四个字节作为浮点数也会增加RAM使用率(另一个稀缺资源),而缩放整数版本只有一个字节。

由于这些原因,当需要分数量时,在embedded式世界中使用缩放整数是常态。

在GATT特性的情况下,也希望使用较小的数据types,因为通常希望特性的值不超过20个字节。 这是因为ATT MTU通常设置为23个字节(而ATT有3个字节的开销),因为这是可包含在单个链路层分组中的最长的ATT分组(如果蓝牙4.2的数据长度扩展不是实现)。