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
。
问题:
- GATT是否使用这种“包装”技术来节省空间?
- 我正确地做这个?
- NodeJS有一个库来处理这个数据打包和解包吗? 看起来像一个非常普遍的情况。 我搜查了NPM,但我不确定这个概念是什么。
像这样的缩放整数用于简化在小型embedded式设备上的实现。
出于成本和功耗的原因,所使用的微控制器通常没有FPU(即硬件支持浮点计算)。 在那些没有FPU的软件上,可以使用软件浮点库,但是这些库很慢(所以它们消耗功率),而且它们占用了代码空间。 即使在具有FPU的微控制器上,使用它也会增加功耗,并且使用四个字节作为浮点数也会增加RAM使用率(另一个稀缺资源),而缩放整数版本只有一个字节。
由于这些原因,当需要分数量时,在embedded式世界中使用缩放整数是常态。
在GATT特性的情况下,也希望使用较小的数据types,因为通常希望特性的值不超过20个字节。 这是因为ATT MTU通常设置为23个字节(而ATT有3个字节的开销),因为这是可包含在单个链路层分组中的最长的ATT分组(如果蓝牙4.2的数据长度扩展不是实现)。
- 如何在@types上为范围/命名空间包安装TypeScript声明?
- 如何访问模块内的TypeScript定义?
- 将自定义types的数组传递给来自node-pg和SQL注入的postgres函数
- Typescript和Node js得到“不是函数错误”
- 是否有必要在Node.js中设置一个Content-Type?
- 500错误:对于使用ResourceJS的Mongoose模型,对于path\“_ id \”中的值转换为ObjectId失败
- 在Node.js中,读取一个.html文件的目录并在其中search元素属性?
- 在全新的快递项目doctype 5`上出现错误,您现在必须使用`doctype html`
- 区分节点的本地function和匿名function