arm中除法和浮点运算

本文深入探讨了在ARM架构下,定点除法和浮点除法的实现方式。详细介绍了ARM中定点除法的软件库实现,以及如何通过链接gcc库解决编译错误。同时,讲解了浮点数除法的软件模拟与硬件加速方法,并提供了开启硬件浮点运算的具体步骤。

在学习正点原子I.MX6ull芯片开发板的时候,有两个裸机实验(串口和spi)涉及到了除法运算以及浮点运算,

先声明,除法运算(定点和浮点,浮点除法是浮点运算的一种)和浮点运算是两个东西:

1.除法分为定点除法和浮点除法,arm中定点除法例如32位无符号整形除法,是没有直接的汇编指令的,需要借助软件库来实现;

2.浮点数的除法可以调用软件库来进行软件模拟,也可以借助硬件进行浮点数运算(协处理器,cp15指令开启硬件浮点运算)。

 

一、定点数除法指令需要链接gcc库:

使用定点数除法运算的时候编译提示错误 (可以看出来uidiv uldiv,这些函数是针对int 和long 这些定点数进行除法运算的函数):

bsp_uart.c:(.text+0xd4):对‘__aeabi_uidivmod’未定义的引用
bsp_uart.c:(.text+0xe2):对‘__aeabi_uidiv’未定义的引用
bsp_uart.c:(.text+0xec):对‘__aeabi_uidiv’未定义的引用
bsp_uart.c:(.text+0x156):对‘__aeabi_uldivmod’未定义的引用
bsp_uart.c:(.text+0x166):对‘__aeabi_uidiv’未定义的引用
bsp_uart.c:(.text+0x17a):对‘__aeabi_uidiv’未定义的引用
bsp_uart.c:(.text+0x186):对‘__aeabi_uldivmod’未定义的引用
bsp_uart.c:(.text+0x1e2):对‘__aeabi_uidiv’未定义的引用
bsp_uart.c:(.text+0x236):对‘__aeabi_uidiv’未定义的引用
bsp_uart.c:(.text+0x240):对‘__aeabi_uidiv’未定义的引用

原因是ARM,没有定点数的除法指令。libgcc库包含除法指令的代码,于是加上链接库gcc:

-lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-li

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值