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..
“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 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+nofp但是什么都没有改变谢谢你,最后我按照你的指导解决了我的问题。我选择了错误的gcc:gcc-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+nofp但是什么都没有改变谢谢你,最后我按照你的指导解决了我的问题。我选择了错误的gcc:gcc-arm-linux-gnueabihf
,正确的是:arm-none-eabi
和cmake-DBOARD=nrf52840_pca1059-mcpu=cortex-a53+nofp+nosimp再次感谢你,你让我开心了:用“-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”功能,这有许多问题需要解决。使用“-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”功能。