我正在为几个文档很差的MCU开发一个程序。到目前为止,最紧迫的问题是,我必须让所有这些MCU不断地通信(发送/接收)浮点数据,而且我不知道浮点类型的具体规范是什么。换句话说,如果我将一个浮点类型沿串行/并行连接发送到另一个MCU,则无法确保它具有相同的值。我所看过的每一个地方都没有给出它们如何处理的具体细节(精度、尾数、符号位的位置等)。
我有标准的定点整数类型,如int和long;这明确适用于浮点类型,如float和double。
最糟糕的是,我不能访问每个单片机的标准库。,这意味着我不能使用std::numeric_limits或其他类似的东西。
作为最后的手段,我可以创建自己的struct、class或其他类型,并使用一些位置良好的逻辑运算符来让每个数据类型做我想做的事情,但这对我的项目最终是不可取的。同样的,对于每一种浮点类型的位结构的测试和错误也适用于每一种MCU。
那么,是否有可能不仅看到浮点类型的具体情况,而且如果它们不遵循标准,也有可能改变它们?还是像“你需要一个更好的单片机”一样简单?
编辑#1:
由于我最近测试了我的12个MCU,其中只有5个支持IEEE标准的单精度和双精度。另外七种都使用独特的格式来实现单精度和双精度。
编辑2:
按照建议,我运行了卡汉的偏执狂测试脚本,这是西蒙·伯恩的建议:
您可以尝试运行Kahan的偏执测试脚本,它可以在Netlib的几种不同语言中使用。这试图通过测试计算来找出浮点特征。
这对我的两个MCU来说效果很好。其余五个没有足够的内存来运行测试。但是,我确实成功地解码了这两种方法,它们都有非常奇怪的处理符号位和endianess的方法,我将不得不研究一些奇怪的逻辑操作,以便形成一个绝对兼容的层。
发布于 2015-12-08 13:55:54
您可以尝试运行Kahan的偏执测试脚本,它可以在Netlib的几种不同语言中使用。这试图通过测试计算来找出浮点特征。
https://stackoverflow.com/questions/34137197
复制相似问题