Arm 编译器为没有FPU的设备生成FPU指令

Arm 编译器为没有FPU的设备生成FPU指令,arm,raspberry-pi3,nrf52,Arm,Raspberry Pi3,Nrf52,我正在Raspberry Pi 3b上构建zephyr以使用nRF52840加密狗。按照教程进行操作 一切包括: 下载 安装 cmake-DBOARD=nrf52840_pca1059.. 在I“make”处于内部版本之前一切正常,出现以下问题: /home/pi/zephyr/ext/hal/cmsis/Include/core_cm4.h:105:8:error:#error“编译器为没有FPU的设备生成FPU指令(检查是否有FPU)” #错误“编译器为没有FPU的设备生成FPU指令(检

我正在
Raspberry Pi 3b
上构建
zephyr
以使用
nRF52840加密狗
。按照教程进行操作

一切包括:

  • 下载
  • 安装
  • cmake-DBOARD=nrf52840_pca1059..
在I
“make”
处于内部版本之前一切正常,出现以下问题:

/home/pi/zephyr/ext/hal/cmsis/Include/core_cm4.h:105:8:error:#error“编译器为没有FPU的设备生成FPU指令(检查是否有FPU)” #错误“编译器为没有FPU的设备生成FPU指令(检查是否存在FPU)”

有人:

  • 与RasPi 3b一起使用
    Zephyr
  • 与nRF52840加密狗一起使用
    RASPI3B
  • 你能解决这个问题吗

您使用的GCC
GCC arm linux gnueabihf
是不正确的GCC。您应该使用PI专门使用的
arm none eabi gcc

除此之外,您还可以在可能的位置使用
-mcpu=name+attribs
禁用FPU指令和SIMD(单指令多数据)的生成


有关-mcpu的文档,请参阅。

您使用的GCC-arm-linux-gnueabihf是不正确的GCC。您应该使用PI专门使用的
arm none eabi gcc

除此之外,您还可以在可能的位置使用
-mcpu=name+attribs
禁用FPU指令和SIMD(单指令多数据)的生成


有关-mcpu的文档,请参阅。

您使用的是GCC还是什么?由于它是ARM芯片,您可能可以使用
-mcpu=name+nofp
禁用它,其中name指定您的ARM芯片。谢谢你的回复,这是真的,我使用的是gcc,它是基于Pi的gcc arm linux gnueabihf。嗨,我试过
cmake-DBOARD=nrf52840_pca1059-mcpu=cortex-m4+nofpgcc-arm-linux-gnueabihf
,正确的是:
arm-none-eabi
cmake-DBOARD=nrf52840_pca1059-mcpu=cortex-a53+nofp+nosimp再次感谢你,你让我开心了:你在使用GCC还是什么?因为它是一个ARM芯片,你可以用
-mcpu=name+nofp
禁用它,其中name指定了你的ARM芯片。谢谢你的回复,这是真的,我使用的是gcc,它是基于Pi的gcc arm linux gnueabihf。嗨,我试过
cmake-DBOARD=nrf52840_pca1059-mcpu=cortex-m4+nofpgcc-arm-linux-gnueabihf
,正确的是:
arm-none-eabi
cmake-DBOARD=nrf52840_pca1059-mcpu=cortex-a53+nofp+nosimpmalloc
strlen
等。您还必须使用
-nostlib
和可能的
-独立式
。参见:,等等。获得适当的gcc是人们的答案。在启用FPU之前,您可以对引导加载程序执行独立的操作,等等,但我看到的不是OP.Ahh,除非使用正确的选项编译glibc。然而,我认为这对他们是有效的,因为glibc已经不使用硬浮动,因为主板没有FPU。glibc是编译器的一部分;它是一个随主机
gcc
可执行文件提供的库。glibc将具有FPU指令,并在VFP寄存器中使用浮点参数。使用它可能看起来有效,但会导致意外的崩溃。例如
memset
memcpy
可能会决定使用霓虹灯寄存器,因为这样会更快。使用使用硬浮点编译的glibc是非常不负责任的。还有其他同时使用硬浮点和软浮点的“多库”gcc。获得正确的编译器是正确的做法。如果您打算在非FPU系统上使用hf工具,则应使用
-独立式
进行编译。根据您使用的“C”功能,这有许多问题需要解决。使用“-mcpu”或任何其他编译器选项禁用FP对99%的程序员都不起作用。“glibc”将使用硬浮动,您不能使用
malloc
strlen
等。您还必须使用
-nostlib
和可能的
-独立式
。参见:,等等。获得适当的gcc是人们的答案。在启用FPU之前,您可以对引导加载程序执行独立的操作,等等,但我看到的不是OP.Ahh,除非使用正确的选项编译glibc。然而,我认为这对他们是有效的,因为glibc已经不使用硬浮动,因为主板没有FPU。glibc是编译器的一部分;它是一个随主机
gcc
可执行文件提供的库。glibc将具有FPU指令,并在VFP寄存器中使用浮点参数。使用它可能看起来有效,但会导致意外的崩溃。例如
memset
memcpy
可能会决定使用霓虹灯寄存器,因为这样会更快。使用使用硬浮点编译的glibc是非常不负责任的。还有其他同时使用硬浮点和软浮点的“多库”gcc。获得正确的编译器是正确的做法。如果您打算在非FPU系统上使用hf工具,则应使用
-独立式
进行编译。这有许多问题需要解决,具体取决于您使用的“C”功能。