hardfp ABI理解

ABI是什么,由谁提供,写在什么规范里 这些规范确保了不同组件之间的二进制接口的一致性,使得在不同的编译器和操作系统上生成的二进制代码能够正确地交互和执行。促进不同编译器、操作系统和硬件平台之间的二进制兼容性。通过遵循统一的ABI规范,不同的软件模块(如库、驱动程序和应用程序)可以在相同的操作系统和硬件平台上无缝地协同工作,即使它们是由不同的开发者、使用不同编程语言或编译器生成的。开发者在编写、编译和链接应用程序时,需要遵循相应的ABI规范,以确保生成的二进制代码能够与目标平台的ABI兼容,从而实现正确的函数调用、内存访问和数据传递。 阅读详情

ABI即“Application Binary Interface”,即编译器将C代码编译成汇编代码时使用的一种规则。

ABI规范一般包括:

(1)C类型的表示(int,short,long,union,struct...)

(2)调用约定(Calling Convention),包括:如何传递函数参数和返回值;如果使用寄存器和堆栈。

 

在编译带有浮点参数的函数时,有三种可能的编译选项:-mfloat-abi=soft/softfp/hard。

"soft"选项:表明不使用FPU硬件,而是使用GCC的整数算术运算来模拟浮点运算。

"softfp"选项:表明要使用FPU硬件来做浮点运算,只是,函数的参数传递到整数寄存器(r0-r3)中,然后再传递到FPU中。

"hard"选项:表明要使用FPU硬件来做浮点运算,并且,函数的参数直接传递到FPU的寄存器(s0、d0)中。

 

hardfp ABI和hardfloat运算不是一码事。

hardfp ABI也称为VFP模式的ABI;只是一种编译规则;而hardfloat运算则表示用FPU来做浮点运算。

soft ABI和softfp ABI这两者统称为标准模式ABI。

 

因此,在涉及到浮点函数调用时,

用-mfloat-abi=soft编译的app或者库,在用-mfloat-abi=softfp编译的OS中是可以跑的;

用-mfloat-abi=softfp编译的app或者库,在用-mfloat-abi=soft编译的OS中,如果SoC中没有FPU,那么是不能跑的。

而-mfloat-abi=softfp/soft与-mfloat-abi=hard,是互不兼容的。

 

注意,Code sourcery 2007/2008均不支持-mfloat-abi=hard,从Code Sourcery 2009q1才开始支持-mfloat-abi=hard。

 

MeeGo从1.2.0开始,全部基本库都用-mfloat-abi=hard编译。对应的rpm package architecture称为"armv7hl",而OBS中的调度器称为"armv8el"。

使用"armv8el"而不是"armv7hl"作为OBS的调度器是一个历史原因,MeeGo官方本来有计划在后续将"armv8el"调度器改成"armv7hl",但随着MeeGo项目的关闭,也许不会再改了。

 

 

Linux 内核使用浮点问题​ 一、硬浮点与软浮点 1. 硬浮点 编译器将代码直接编译成硬件浮点协处理器(浮点运算单元FPU)能识别的指令,这些指令在执行的时候ARM核直接把它转给协处理器执行。FPU 通常有一套额外的寄存器来完成浮点参数传递和运算。使用实际的硬件浮点运算单元(FPU)会带来性能的提升 2. 软浮点 编译器把浮点运算转成浮点运算的函数调用和库函数调用(即用整数运算模拟浮点运算),没有FPU的指令调用,也没有浮点寄... 阅读详情

相关推荐

解决STM32CubeIDE调用第三方.a库文件报错?从‘VFP register arguments’错误到完整避坑指南

本文详细解析了STM32CubeIDE中调用第三方.a库文件时常见的‘VFP register arguments’报错问题,提供了从临时修复到彻底根治的系统化解决方案。通过深入理解ARM浮点调用规范,指导开发者正确配置编译选项和重建静态库,确保二进制兼容性。同时分享了多版本库管理、自动化路径配置等进阶技巧,帮助提升嵌入式开发效率。

weixin_26834815的博客 370

编译选项中的硬浮点与软浮点区别

一、硬浮点与软浮点 1. 硬浮点 编译器将代码直接编译成硬件浮点协处理器(浮点运算单元FPU)能识别的指令,这些指令在执行的时候ARM核直接把它转给协处理器执行。FPU 通常有一套额外的寄存器来完成浮点参数传递和运算。使用实际的硬件浮点运算单元(FPU)会带来性能的提升 2. ...

sdsszk的博客 1万+

HARDFP ABI理解

ABI即“Application Binary Interface”,即编译器将C代码编译成汇编代码时使用的一种规则。 ABI规范一般包括: (1)C类型的表示(int,short,long,union,struct...) (2)调用约定(Calling Convention),包括:如何传递函数参数和返回值;如果使用寄存器和堆栈。 在编译带有浮点参数的函数时,有

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 1214

ARM GCC浮点编译选项

1      浮点类型-mfloat-abi 1.1      选项 -mfloat-abi=soft/softfp/hard 支持3种类型,各类型含义如下: n  soft 不使用硬件浮点单元,gcc使用软浮点库来完成浮点运算。适用于不含FPU的CPU。 n  softfp 使用硬浮点单元,会生成硬浮点指令,生成何

kevin.ji的专栏 8178

-mfloat-abi=softfp的问题,指定fpu为neon

测试使用的C语言程序源码如下,程序源码文件是arm-c-disassemble.c: int sum(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } 1、编译但是不汇编,查看产生的汇编源码程序源码: arm-Linux-androideabi-gcc -S -

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 7689

ARM Compiler 5深度解析

本文深入剖析ARM Compiler 5的核心机制与实战应用,涵盖编译优化、内存布局、浮点配置、启动流程及构建工具链。重点揭示其在遗留嵌入式项目中的稳定性优势与常见陷阱,如ZI初始化性能问题、ABI混用风险等,并提供向armclang迁移的实用策略。

kkk56的博客 1168

编译工具链 之二 详解 ELF 格式及标准、UNIX 发展、ABI

在计算机及嵌入式系统中,二进制文件也有一定的标准格式,通常会包含在各平台的应用程序二进制接口 (Application Binary Interface,ABI)规范中。它是编译工具链必须要遵守的规范(编译工具链产生符合 ABI 的二进制文件)

技术干货 2548

STM32F030F4P6 ADC多通道定时器触发DMA搬运

主函数中等待转换完成的标志位,然后打印出来。ADC回调函数中将数值赋值给变量。配置定时器1s读一次。

qq_24426625的博客 1355

ARM vfp neon 浮点优化

-mfloat-abi=softfp的问题,指定fpu为neon

WangMark的专栏 2061

火山引擎实时对话AI实战:5分钟搞定WebRTC+大模型+ASR/TTS全链路集成

本文详细介绍了如何利用火山引擎的实时对话AI解决方案,快速集成WebRTC、大模型、ASR和TTS服务,构建低延迟、高保真的实时语音对话应用。通过实战代码示例,从环境准备、音频流管理到全链路串联与性能优化,为开发者提供了一套端到端的集成指南,适用于智能客服、在线教育等互动场景。

weixin_29051245的博客 1128

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 948

ARM架构Linux开发全攻略:从交叉编译到内核定制与实战应用

在计算架构演进中,ARM处理器凭借其精简指令集(RISC)设计,实现了卓越的能效比,成为移动和嵌入式领域的基石。其工作原理在于通过更简单的硬件逻辑降低功耗,这一特性在数据中心和边缘计算场景中价值凸显,能显著降低总拥有成本(TCO)。随着ARM生态的多样化,从服务器到物联网设备,Linux作为开源、高度可定制的操作系统,成为连接这些碎片化硬件的关键。其技术价值体现在通过工具链、内核编译和驱动适配,为特定硬件定制高效系统。在应用场景上,ARM Linux广泛服务于家庭服务器、边缘计算网关和定制化嵌入式产品。本文

anheku1562的博客 401

将运算放大器(运放)用作比较器

我们研究了一些经典的运算放大器电路。这些电路中运用了负反馈,因此通常就可以使运算放大器工作在线性区域内。 但是,也可以将运算放大器用作比较器,从而使其以非线性方式工作。由于其输入受到硬驱动,因此其输出电压会对电源轨产生猛烈的冲击。如下文所示,这可能并不总是一种好的设计方法。 变为非线性 在线性应用中,可以对运算放大器做如下理想假设:无限增益和带宽、零输出阻抗、无限输入阻抗,以及输入之间为零伏。也可以将运算放大器以非线性方式使用,但有一些地方要特别注意和处理。 一种常见的配置是仅使用开环运算放大器(无反馈),

ltqdxl的博客 3万+

S32DS实战:从零开发汽车级ARM MCU应用,集成BLE与低功耗优化

嵌入式系统开发中,集成开发环境(IDE)是连接底层硬件与上层应用软件的关键桥梁,它通过整合编译器、调试器和芯片支持包,极大提升了开发效率与代码可靠性。其核心原理在于提供统一的工程管理、自动化配置和可视化调试,对于汽车电子、工业控制等要求高可靠性的领域尤为重要。S32 Design Studio for ARM(S32DS)作为一款专为ARM Cortex-M内核微控制器打造的免费IDE,深度集成了GNU工具链、硬件抽象层和实时调试工具,实现了从项目创建到量产固件的平滑路径。本文以KEA、S32K等车规级MC

weixin_34290631的博客 447

redhawk-sc(seascape)学习日志2

design view是主view,是所有seascape view中最root的部分,一个design view可以驱动多种类型分析比如静态IR drop,动态IR drop以及EM.这些分析可以在不同的PVT和翻转率下.Design view是一个必须的view对于redhawk中的任何类型分析来说。seascape view相当于一个容器,用于保存各种和设计相关的数据,类似于逻辑信息、物理信息等等,每个view都有其对应的输入件和依赖,这些view都是redhawk用于各种类型的分析所需。

qq_39493558的博客 3497

RTOS任务调度原理:高优先级任务为何在低优先级任务执行时无法响应

实时操作系统(RTOS)的核心在于其确定性的任务调度机制,它通过优先级抢占确保关键任务及时执行。其基本原理是调度器仅在特定调度点(如任务主动阻塞、中断退出时)运行,比较就绪态任务的优先级并切换上下文。这一机制的技术价值在于为嵌入式系统提供可预测的响应时间,广泛应用于工业控制、汽车电子和物联网设备等对实时性要求高的场景。当低优先级任务执行**长时间非阻塞运算**且无中断发生时,调度器无法被触发,导致高优先级任务虽处于就绪态却无法获得CPU,造成系统响应延迟。理解**任务状态机**与调度点,是优化实时性、避免此

weixin_33508411的博客 287

i.MX31嵌入式多媒体处理器:ARM11核心与IPU/GPU硬件加速架构解析

在嵌入式系统开发中,异构计算架构通过集成专用硬件加速单元来提升特定任务的处理效率,是实现高性能、低功耗设计的关键原理。这种技术方案的核心价值在于将计算密集型任务(如视频编解码、图形渲染)从通用处理器(CPU)卸载至专用硬件,从而显著降低系统功耗并提升实时性。其典型应用场景包括便携式媒体播放器、移动互联网设备和工业控制界面等对多媒体处理能力有较高要求的领域。本文以飞思卡尔i.MX31处理器为例,深入剖析其ARM1136JF-S核心与图像处理单元(IPU)、图形处理单元(GPU)协同工作的机制。该芯片的IPU模

weixin_34221775的博客 378

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 453

关于armhf (hard-float ABI for ARM)

3 Replies armhf是什么 在Ubuntu 12.04和Debian里,除了arm, armel,还出现了一个名为armhf的版本。这个东西是什么? 众所周知,armel是目前主要的ARM ABI。armhf则是armel的一个变种,主要区别在浮点计算上。 在armel中,关于浮点数计算的约定有三种。以gcc为例,对应的-mfloat-abi参数值有三个:so

kerson的专栏 2万+

【嵌入式DIY实例-ESP32篇】-热成像仪

在本文中,我们将使用 MLX90640 热像仪和 1.8 英寸 ST7735 TFT 显示屏,构建一款基于 ESP32 的高性能紧凑型热像仪。本项目旨在打造一款便携、响应迅速的热像仪,具有增强的图像质量、优化的帧率和精准的温度读数。

视觉与物联智能 877

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

15 ABI规范 栈帧结构,帧栈的形成过程

EIP 指令寄存器,其指向处理器下一条要执行的指令在内存的位置 ESP 栈指针寄存器 EBP 栈帧基地址寄存器 也就是说每一个函数所需要的栈帧,即每一个函数所对应活动记录的大小是固定的,由编译器在编译的时候指定。编译器在编译的时候就确定了当前函数所需要的栈空间的大小了。 最终表现为汇编代码中第一个字面常量。 函数结束的时候: move ebp, esp 1 先将 ebp寄存器的值 赋值给 esp寄存器 pop ebp 2 此时pop 弹出来的值是 上一个栈帧的基准地址,pop到EBP寄存器中,此时

奶牛养殖场小马 681

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【软件开发底层知识修炼】二十一 ABI-应用程序二进制接口一

前面学习了可执行程序的结构,点击链接查看上一篇文章:【软件开发底层知识修炼】二十 深入理解可执行程序的结构 本篇文章开始新的篇章,学习应用程序的二进制接口-ABI。 文章目录1 什么是ABI(Application Binary Interface)1 ABI的广义与侠义概念2 什么是EABI(Embedded Application Binary Interface)3 ABI规范示例...

厚积薄发 2971

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【ARM 浮点计算单元 FPU (FPA,VFP,NEON)介绍】

ARM 的 FPU支持IEEE 754标准的浮点数格式,并能够执行各种浮点数的基本运算,如加法、减法、乘法、除法等,以及一些更复杂的运算,如平方根、绝对值等。对于支持硬件浮点运算的系统,这是非常重要的,因为如果不正确地保存和恢复VFP的状态,可能会导致浮点运算的结果错误。但是在现代的ARM处理器中,如Cortex系列处理器,浮点单元通常是内置的,对于执行浮点数运算有极大的帮助。对于VFP,有几种可能的值,例如vfp、vfpv3、vfpv4等,这取决于你的处理器支持哪种版本的VFP。

生活需要深度 2050

ABI的调用约定,类型表示和名称修饰

ABI的调用约定,类型表示和名称修饰 如果懂汇编,或者有分析过函数调用栈帧的汇编语句,就可以深深体会ABI了 这里给出两个代码,下面配合下面的概念,有不懂的可以翻上来对照着看 C程序 void add (int, int, int); main(void) { int a = 1; int b = 2; int c = 0; add(a,b,c); c++; } void ...

weixin_44395686的博客 2755

ABI 及 ARM EABI

// https://www.veryarm.com/51150.html // https://www.cnblogs.com/gccbuaa/p/6809006.html // https://blog.youkuaiyun.com/emtribe/article/details/8598941 // https://blog.youkuaiyun.com/hongjiujing/article/details/2...

u011011827的博客 1205
上一篇: MeeGo本地OBS搭建步骤
下一篇: OpenSUSE11.4下的SVN配置
sonach
博客等级 码龄20年 25粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值