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

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

ID:27459220

大小:28.00 KB

页数:6页

时间:2018-12-04

ARM下浮点数Middle-Endian问题的处理.doc_第1页
ARM下浮点数Middle-Endian问题的处理.doc_第2页
ARM下浮点数Middle-Endian问题的处理.doc_第3页
ARM下浮点数Middle-Endian问题的处理.doc_第4页
ARM下浮点数Middle-Endian问题的处理.doc_第5页
资源描述:

《ARM下浮点数Middle-Endian问题的处理.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、ARM下浮点数Middle-Endian问题的处理  摘要:本文描述了嵌入式GIS软件从X86平台移植到ARM体系结构平台的过程中遇到的浮点数存储字节顺序问题,并对该问题进行了详细分析,最终确定是ARM体系结构下浮点数的Middle-Endian存储问题,并提供了解决方案。  随着嵌入式微处理器芯片性能的日益提高,嵌入式设备也得到了广泛的应用。随着应用的扩展,嵌入式软件的开发也呈现出功能多样化、平台多样化和体系结构多样化等特点。  由于可移植性好,相当一部分嵌入式软件都是用C/C++语言开发的,而

2、C/C++语言编写的程序中数据存储字节顺序是与编译平台所用的CPU相关的,所以嵌入式软件移植过程中,数据存储字节顺序是需要重点处理的地方。  在嵌入式GIS软件从X86体系结构下移植到ARM体系结构的过程中,遇到了浮点数据存储字节顺序的问题。该问题既不是Big-Endian,也不是Little-Endian,而是Middle-Endian字节顺序。本文先介绍该嵌入式GIS软件开发平台和运行平台,再对移植过程中遇到的问题进行跟踪和分析。找到问题根源,最终给出两种解决方案。    1嵌入式GIS软件 

3、 嵌入式GIS软件是用C++语言开发的,运行在PDA上的嵌入式软件。该软件系统结构如图l所示。  在以嵌入式硬件设备为硬件平台的基础上,内核版本为2.4.30的嵌入式Linux操作系统和QT/Embedded图形界面开发包构成了嵌入式GIS软件的软件平台。嵌入式GIS软件通过第三方库GDAL/OGR,提供对多种格式(如Shapefile、mapinfo)等矢量电子地图的读取操作。  嵌入式GIS软件的运行平台是以ARM920T为处理器的三星公司的SMDK开发板。电子地图数据来自官方发布的某区域电子

4、地图数据。  嵌入式GIS软件在X86上调试通过后,使用2.95.3版本的arm-linux-gcc编译器交义编译嵌入式GIS软件和其他组件;最终将该软件移植到SMDK上运行。  移植到SMDK开发板上之后,嵌入式GIS软件能够正常显示软件框架;在读取Shapefile格式电子地图时,进入死循环状态。根据debug信息显示,嵌入式GIS软件所读取的Shapefile电子地图显示范围的4个double类型数值,与X86下读取的数值不一致。例如,Shapefile文件中的数据为-3.383700,而在

5、ARM平台下凄出的数值则为7.49530le+68。ARM体系结构下读出的错误数据将导致嵌入式GIS软件运行时逻辑出错,不能正确最示电子地图。    2Middle-Endian  在不同的体系结构之问移植嵌入式软件时,数据存储字节顺序是需要处理的问题之一。  提到数据存储字节顺序,就要提到Big-Endian和Little-Endian。在各个体系结构处理器设计之初,Big-Endian和Little-Endian的分歧就一直存在,它们代表着每个字节在不同体系结构下的不同存储方式。如图2所示,数

6、值0x1234ABCD在不同的字节顺序下具有不同存储顺序。  字节顺序的不同,经常导致读取跨平台的文件数据不一致。针对嵌入式GIS软件移植过程中发生的数据不一致问题,对ARM体系结构的字节顺序进行了测试,方法如下:  Return(htonl(1)==1)?BIG:LITTLE;  测试结果显示,ARM同X86一样.采用的是Little-Endian字节顺序存储数据,并不存在Big-Endilan和Lit-tle-Endian之间转换不当的问题。  使用简单的二进制数据文件模拟X86下的Shape

7、file文件。在X86体系结构下,分别在二进制文件中写入int、f1oat和double类型数据,得到X86下的数据文件。将该数据文件转移到SMDK开发板上,读取该数据文件中的数值并打印。  测试结果显示ARM体系结构下读取X86体系结构下生成的二进制文件,int和float类型数据与X86体系结构下一致,只有double类型数据不一致。经过进一步验证,将double类型数据以十六进制形式打印,就可以发现问题的关键,如图3所示。  同样的double类型数据0x1234ABCD,在ARM体系结构下

8、读出变成0xABCD1234。所以在ARM平台下读取的地图数据发生了变化,导致嵌入式GIS软件逻辑判断出错,不能正确运行。  原来ARM处理器对浮点数double类型的存储不支持IEEE标准,既不是Litrlc-Endian字节顺序,也不是Big-Endian字节顺序。在ARM平台下,每个double类型分为两个字,每个字内部采用LittleEndian字节顺序,而两个字之间采用BigEndian字节顺序组织,即MiddleEndian字节顺序。  目前还不能通过硬件或者软件调节改

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。