我使用飞思卡尔K22(Cortex-M4F)与Kinetis Design Studio,其中包括一个GNU工具链。我尝试使用Invensense提供的仅二进制库,并使用GCC编译它,以便在Cortex-M4F上使用编译器的CPU选项" -mcpu = cortex-m4 -mthumb -mfloat-abi = hard -mfpu = vfpv4"
飞思卡尔工具链默认为" -mcpu = cortex-m4 -mthumb -mfloat-abi = hard -mfpu = fpv4-sp-d16"。当我尝试将我的程序与供应商二进制文件库链接时,我收到链接错误,如:
C:/freescale/kds_1.1.1/toolchain/bin /../ LIB / GCC /臂-NONE-EABI / 4.8.0 /../../../../臂-NONE-EABI /bin/ld.exe:error:./startup/startup.o使用VFP寄存器参数,22F_eval_spi_to_invensense_CHECKED_IN.elf不 C:/freescale/kds_1.1.1/toolchain/bin /../ LIB / GCC /臂-NONE-EABI / 4.8.0 /../../../../臂-NONE-EABI / bin中/ ld.exe:无法合并文件./startup/startup.o
的目标特定数据我可以为-mfpu = vfpv4重建Kinetis平台库,但我仍然会收到链接错误,大概是因为其他Kinetis库是用 " -mfpu = fpv4-SP-D16"
由于两者都适用于带有FPU的Cortex-M4,因此vpfv4和fpv4-sp-d16的GCC生成代码之间是否存在实际差异?它们实际上是不兼容的,还是链接器过于迂腐?