предупреждение о времени соединения о регистрах VPF - PullRequest
1 голос
/ 30 января 2020

Я пытаюсь перенести проект из Cortex M0 в Cortex M4 с аппаратным расширением с плавающей запятой, новая цель так c равна nRF52832 .

Я получаю ошибку от компоновщика следующее

arm-unknown-eabi/bin/ld: error: x.o uses VFP register arguments, firmware does not

, где firmware - это имя выходного файла для компоновщика.

Это проблема с ABI arm для плавающей запятой, я хочу использовать FPU, запрашиваемый портом FreeRTOS, который я хочу использовать, но я не понимаю, как настроить флаги компоновщика, чтобы сделать это возможным.

Это набор флагов компоновщика, который я сейчас использую

-L/path/to/nrfx/mdk
-Wl, --no-undefined
-Wl,--as-needed -march=armv7e-m+fp -mthumb -mfloat-abi=hard -mabi=aapcs
-Wl, --start-group support/libs/libQRCode.a support/libs/libSPIFFS.a
-Wl, --no-undefined
-Wl, --as-needed
-Wl, --gc-sections --specs=nosys.specs -T/path/to/linker_script.ld /toolchain/path/to/lib/libm.a
-Wl, --end-group

1 Ответ

2 голосов
/ 29 февраля 2020

Флаг -mfloat-abi является флагом только для компилятора, поэтому нет смысла передавать его компоновщику.

Для того, чтобы иметь возможность создать образ прошивки, использующий жестко плавающий ABI все объектные файлы, передаваемые компоновщику, должны быть скомпилированы для использования этого ABI. Скорее всего, проблема связана с тем, что вы передаете компоновщику один или несколько объектных файлов, скомпилированных с помощью мягкого плавающего ABI; например, путь к файлу /toolchain/path/to/lib/libm.a в командной строке компоновщика выглядит подозрительно, вам следует использовать версию libm.a с плавающей запятой, которую вы, скорее всего, найдете в подпапке hard/ вашего пути к библиотеке инструментов.

...