微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > ARM下浮点数Middle-Endian问题的处理

ARM下浮点数Middle-Endian问题的处理

时间:05-25 来源:互联网 点击:

在跨体系结构的传输中不会改变其存储格式,从而保证读取的数据一致。但是嵌入式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软件开发者提供一些有用的帮助。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top