gcc在CM4内核上启用硬件浮点运算单元

背景:用arm-none-eabi-gcc编译器编译STM32F407的代码,不带操作系统。

编译连接选项:-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard

-mcpu表示内核是cortex-m4内核;

-mthumb代表编译为thumb指令集

-mfloat-abi代表是否使用硬件浮点运算单元,有3种可选择:soft、softfp和hard。hard表示启用硬件浮点单元。

-mfpu代表硬件浮点运算单元的名称,具体的值可在《Cortex M3与M4权威指南》的17章节可找到。

注:《Cortex M3与M4权威指南》中提到CM4支持32位(float)浮点运算,double型的怎么支持要试过才知道。


    编译器配置好支持硬件浮点运算单元后,只表示会生成相关的浮点运算指令,CM4需要软件配置相关寄存器后才能执行浮点运算指令。因此还需要在软件代码中配置相关寄存器启用硬件浮点运算。(百度上说有些新编译器配置使用硬件浮点运算单元后会自动在软件中加入对相关寄存器的配置,而不需要自己显式的在代码中配置寄存器。这个说法本人未做实验)。


  启用硬件浮点运算单元后,如果用到了标准库,那么链接时会产生xxx uses VFP register arguments的错误,这是因为gcc的标准库是基于OS的,当前编译的项目不使用OS,所以不能使用gcc的标准库文件。

    在链接选项中加入 -nostartfiles  -nostdlib将不会链接标准库,那么在代码中也不应该出现诸如printf的标准库函数。至于要如何才可以使用标准库,目前还不清楚。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值