历史上的今天
返回首页

历史上的今天

今天是:2025年03月03日(星期一)

正在发生

2021年03月03日 | 怎样处理ARM体系下浮点数Middle-Endian问题

2021-03-03 来源:eefocus

由于可移植性好,相当一部分嵌入式软件都是用C/C++语言开发的,而C/C++语言编写的程序中数据存储字节顺序是与编译平台所用的CPU相关的,所以嵌入式软件移植过程中,数据存储字节顺序是需要重点处理的地方。


在嵌入式GIS软件从x86体系结构下移植到ARM体系结构的过程中,遇到了浮点数据存储字节顺序的问题。该问题既不是Big-Endian,也不是Little-Endian,而是Middle-Endian字节顺序。本文先介绍该嵌入式GIS软件开发平台和运行平台,再对移植过程中遇到的问题进行跟踪和分析。找到问题根源,最终给出两种解决方案。


1 嵌入式GIS软件


嵌入式GIS软件是用C++语言开发的,运行在PDA上的嵌入式软件。该软件系统结构如图l所示。



在以嵌入式硬件设备为硬件平台的基础上,内核版本为2.4.30的嵌入式Linux操作系统和QT/Embedded图形界面开发包构成


了嵌入式GIS软件的软件平台。嵌入式GIS软件通过第三方库GDAL/OGR,提供对多种格式(如Shapefile、mapinfo)等矢量电子地图的读取操作。


嵌入式GIS软件的运行平台是以ARM920T为处理器的三星公司的SMDK开发板。电子地图数据来自官方发布的某区域电子地图数据。


嵌入式GIS软件在x86上调试通过后,使用2.95.3版本的arm-linux-gcc编译器交义编译嵌入式GIS软件和其他组件;最终将该软件移植到SMDK上运行。


移植到SMDK开发板上之后,嵌入式GIS软件能够正常显示软件框架;在读取Shapefile格式电子地图时,进入死循环状态。根据debug信息显示,嵌入式GIS软件所读取的Shapefile电子地图显示范围的4个double类型数值,与X86下读取的数值不一致。例如,Shapefile文件中的数据为-3.383 700,而在ARM平台下凄出的数值则为7.49530le+68。ARM体系结构下读出的错误数据将导致嵌入式GIS软件运行时逻辑出错,不能正确最示电子地图。


2 Middle-Endian



在不同的体系结构之问移植嵌入式软件时,数据存储字节顺序是需要处理的问题之一。


提到数据存储字节顺序,就要提到Big-Endian和Little-Endian。在各个体系结构处理器设计之初,Big-Endian和Little-Endian的分歧就一直存在,它们代表着每个字节在不同体系结构下的不同存储方式。如图2所示,数值0x1234ABCD在不同的字节顺序下具有不同存储顺序


字节顺序的不同,经常导致读取跨平台的文件数据不一致。针对嵌入式GIS软件移植过程中发生的数据不一致问题,对ARM体系结构的字节顺序进行了测试,方法如下:


return(htonl(1)==1)?BIG:LITTLE;


测试结果显示,ARM同x86一样.采用的是Little-Endian字节顺序存储数据,并不存在Big-Endilan和Lit-tle-Endian之间转换不当的问题。


使用简单的二进制数据文件模拟x86下的Shapefile 文件。在x86体系结构下,分别在二进制文件中写入int、f1oat和double类型数据,得到x86下的数据文件。将该数据文件转移到SMDK开发板上,读取该数据文件中的数值并打印。


测试结果显示ARM体系结构下读取x86体系结构下生成的二进制文件,int和float类型数据与x86体系结构下一致,只有double类型数据不一致。经过进一步验证,将double类型数据以十六进制形式打印,就可以发现问题的关键,如图3所示。



同样的double类型数据0x1234 ABCD,在ARM体系结构下读出变成0xABCD1234。所以在ARM平台下读取的地图数据发生了变化,导致嵌入式GIS软件逻辑判断出错,不能正确运行。


原来ARM处理器对浮点数double类型的存储不支持IEEE标准,既不是Litrlc-Endian字节顺序,也不是Big-Endian字节顺序。在ARM平台下,每个double类型分为两个字,每个字内部采用Little Endian字节顺序,而两个字之间采用Big Endian字节顺序组织,即MiddleEndian字节顺序。


目前还不能通过硬件或者软件调节改变ARM体系结构对double类型数据的存储顺序,因此,对于类似嵌入式GIS软件这样需要读取其他体系结构平台下生成的二进制文件的程序,都需要对double类型数据的存储顺序进行处理。


3 解决方案


针对ARM体系结构下double类型数据存储的Middle-Endian问题,有两种解决方案。


(1)修改跨体系结构数据文件


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


推荐阅读

史海拾趣

Curtis Electromusic Specialties Inc公司的发展小趣事

在全球化的大背景下,供应链管理对于企业的运营效率至关重要。CUI公司高度重视供应链的优化和管理,通过建立完善的采购、生产和销售体系,实现了原材料的稳定供应和产品的快速交付。此外,公司还积极引入先进的生产设备和信息化管理系统,提高了生产效率和产品质量,为公司的快速发展提供了有力保障。

Diotec Electronics Corp公司的发展小趣事

Diotec Electronics Corp公司成立于XXXX年,由一群富有激情的工程师和技术专家创立。在初创期,公司专注于研发高性能的电子元器件,以应对当时市场上对高效率和可靠性元件的迫切需求。通过不断的技术创新,Diotec成功开发出了一款具有革命性的整流二极管,该产品以其卓越的性能和稳定性迅速赢得了市场的认可,为公司的发展奠定了坚实的基础。

普芯达电子(Chipswinner)公司的发展小趣事

随着公司规模的不断扩大和产品质量的不断提升,普芯达电子开始积极拓展市场,寻求更广阔的发展空间。公司通过与国内外知名企业和机构建立合作关系,共同开展技术研发和市场推广等活动,进一步提高了公司的知名度和影响力。同时,普芯达电子还积极参与国际展览和交流活动,与全球同行交流学习,不断提升自身的技术水平和市场竞争力。

灿科盟(Ckmtw)公司的发展小趣事

作为一家专注于连接器产品的企业,灿科盟始终注重技术创新和产品升级。近年来,公司在LED连接器部件生产领域取得了重要突破,成功打破了国外技术垄断。这一技术突破不仅提升了公司的市场竞争力,也为客户提供了更加优质的产品和服务。同时,公司还加大了对新能源、智能家居等新兴领域的研究和开发力度,以应对市场变化和挑战。

ELM [ELM Electronics]公司的发展小趣事

在追求经济效益的同时,ELM也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,ELM还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了ELM的社会责任感,也为公司的长期发展奠定了坚实的基础。

Cressall Power Resistors公司的发展小趣事

随着国内市场的饱和,Cressall开始将目光投向国际市场。公司积极参与国际电子行业的展会和交流活动,与国际同行建立了广泛的联系。通过与国外企业的合作,Cressall不仅引进了先进的技术和管理经验,还成功打开了多个海外市场。同时,公司还加强了与国际知名企业的战略合作,共同开发新产品,进一步提升了公司的国际竞争力。

问答坊 | AI 解惑

功率放大器设计

功率放大器设计…

查看全部问答>

Ultrahigh Bandwidth Sampling Scope via an NI-5154

Ultrahigh Bandwidth Sampling Scope via an NI-5154 and a Photonic Time Stretch Pre-processor…

查看全部问答>

飞思卡尔下一代MCU架构:coldfire+

今天飞思卡尔网站上发布了新的coldfire+ MCU,之所以说是coldfire+,按照FSL的说法是freescaleMCU架构演化的下一步。目前推出两个系列MCF51QX和MCF51JX。飞思卡尔推动下实在有点快,不久前推了一款coldfire v3的MPU,两款coldfire v1 mcu和i.mx535 ...…

查看全部问答>

hid-compliant device和usb 人体学输入设备区别

HID复合设备插上主机后会显示两个设备--hid-compliant device和usb 人体学输入设备, (1)这两个设备有什么区别? (2)我在调试这个HID设备时通过Bushound抓到的数据发现,对于同一条命令两种设备返回的结果不一样。对于usb 人体学输入设备,执 ...…

查看全部问答>

工作的问题,请教一下各位前辈

今年六月份毕业的时候,邀请我去实习的单位倒不少,我就找了一家离家里近的。在那做了3个多月,主要是布PCB和移植RTOS,还有写驱动,那家单位很小,只有我一个搞研发的。后来他的产品我很熟悉了,而且老板也没有要和我签约的意思。于是我就辞职了, ...…

查看全部问答>

关于CE5的补丁,做个调查,顺便散分!!!

大家做的产品,无论是量产的还是正在开发中的,都打上了CE5的补丁了吗?这些补丁全部打上之后对系统的性能会有改善或者倒退的影响吗? 我现在正在做的产品没有打任何补丁,但是总感觉电源管理有些问题,有时候睡眠唤醒收不到PBT_TRANSITION以及PBT ...…

查看全部问答>

用LED灯与特殊漆做造型天花版,仰望星空

好的天花板装潢可以提供隔音、隔热、遮盖樑柱、美化角落、管线配置的功能,是居家设计相当重要的一环,同时也是相对复杂的部份。因为在规划天花板时,要注意的地方和创意的可行性越来越受到人们的重视。   近年来流行LED灯,营造一些特殊氛围, ...…

查看全部问答>

2812和ARM7(S3C44B0X)如何通信?

请问工程师, 2812和ARM7(S3C44B0X)如何通信?…

查看全部问答>

用74系列反相器搭建的32.768Khz振荡电路

用74系列反相器搭建的32.768Khz振荡电路…

查看全部问答>

如何修炼5种“职场软实力”?

现在你是否正在工作中苦苦挣扎,完全不知道该何去何从?如果你对工作无比厌烦,一想起上班就昏昏欲睡,请举起手!你不是一个人!现在的经济形势远非从前,太多人没有调整好自己的心态和状态去适应新现实。就目前来看,再也没有所谓的线性职业发展道 ...…

查看全部问答>