ARM下浮点数Middle-Endian问题的处理
在跨体系结构的传输中不会改变其存储格式,从而保证读取的数据一致。但是嵌入式GIS软件的数据是官方发布的数据,很难对其进行修改,所以在本软件中这种方法不适用。
(2)应用程序中添加Middle-Endian处理
同Little-Endian和Big-Endian的处理类似,在底层代码中,凡是涉及double类型的数据读/写操作,都要事先对double类型的数据进行调换,以保证double类型数据存储的跨体系结构一致性。
嵌入式GIS软件是通过调用GDAL/OGR中的shpopen.c文件提供的函数对Shapefile文件进行读/写操作的。所以在shpopen.c文件中添加对Middle-Endian字节顺序进行判断的函数void EndianType(void),代码如下:
通过对浮点数1.982031在软件运行平台下的十六进制数值和其在X86下十六进制数值的比较,确定该运行平台是何种字节顺序。
经过验证,一旦该平台采用Middle-Endian字节顺序存储double类型数据,则可利用函数“void SwapWord(int length,dout)e*dValue);”对double类型数据进行交换,以获取正确的存储顺序。
经过修改后的sbpopen.c文件,增加了对ARM体系结构下Middle-Endian字节顺序的支持,最终解决了Micidle-Endian的问题,能够正确显示电子地图数据。
4 小 结
本文描述了嵌入式GIS软件从X86平台移植到ARM体系结构平台的过程中遇到的浮点数存储字节顺序问题,并对该问题进行了详细分析,最终确定是ARM体系结构下浮点数的Middle-Endian存储问题,并提供了解决方案。希望本文的开发经验可以对嵌入式GIS软件开发者提供一些有用的帮助。
ARM 下浮点数 Middle-Endian 相关文章:
- 基于ARM核的音频解码器单芯片系统(01-05)
- 美国国家半导体SolarMagic技术为公寓太阳能工程增加22.6%的发电量(06-21)
- 基于FPGA的多通道数据采集系统设计(09-30)
- 心电模拟波形发生系统的设计(06-15)
- 基于ARM和DS18B20的数字测温系统(10-21)
- 掉电保护在嵌入式系统中的设计应用(01-05)