Ошибка компиляции Truestudio для компиляции FreeRTOS на STM32

Я сталкиваюсь с ошибкой компиляции для FreeRTOS компиляции на STM32 с использованием Truestudio.

/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:236: undefined reference to `HAL_SYSTICK_Config'
/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:240: undefined reference to `HAL_SYSTICK_CLKSourceConfig'
/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:243: undefined reference to `HAL_NVIC_SetPriority'
Src/main.o: In function `main':
/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:107: undefined reference to `HAL_Init'
Src/main.o: In function `MX_GPIO_Init':
Src/main.o: In function `main':
/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:147: undefined reference to `osThreadCreate'
/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:151: undefined reference to `osThreadCreate'
/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:155: undefined reference to `osThreadCreate'
/home/dd/Atollic/TrueSTUDIO/STM32_workspace_9.0/STM32L071KZ_RTOS/Debug/../Src/main.c:167: undefined reference to `osKernelStart'

Есть идеи, как решить эту проблему?

1 ответ

"Неопределенная ссылка" - это ошибка компоновщика, которая в вашем случае, скорее всего, означает, что вы не скомпилировали все необходимые файлы или необходимые функции были "отключены" директивой препроцессора. Однако, видя, как ваш компоновщик жалуется на HAL_Init отсутствует - который не окружен каким-либо #if, #ifdef или подобное - означает, что ваша проблема, вероятно, связана с тем, что исходные файлы вообще не компилируются. Это также не является отсутствующей проблемой статической библиотеки, так как HAL поставляется в виде исходного кода.

Чтобы решить вашу проблему, сделайте следующее:

  • Убедитесь, что соответствующие исходные файлы (не заголовки) включены в ваш проект. Например, HAL_Init находится в stm32f7xx_hal.c (для STM32F7, F4 и т. д. есть аналогичный файл, в зависимости от того, что вы используете). В Eclipse / Truestudio самый простой способ сделать это - через Top menu -> Navigate -> Open Resource... (CTRL+Shift+R) и введите имя файла. Если его там нет - файл не добавлен в ваш проект, и на этом этапе вы должны добавить его.

  • Если вы открыли файл, это не обязательно означает, что он собирается, так как он может быть исключен. В зависимости от того, как вы добавили каталог, Eclipse может иногда решить отключить его как целое по умолчанию. Перейдите к файлу в Project Explorer (если у вас все еще открыт файл в редакторе с предыдущего шага, вы можете щелкнуть значок двух стрелок, чтобы перейти к файлу: https://i.imgur.com/mGf0lHf.png). Файл - и, вероятно, весь каталог, в котором он находится - не должен быть серым / зачеркнутым. Щелкните правой кнопкой мыши на файле и выберите Resource Configurations -> Exclude from Build..., Убедитесь, что он НЕ проверен на конфигурацию проекта, которую вы пытаетесь создать.

Чтобы в дальнейшем убедиться, что вы все сделали правильно и нужные файлы действительно скомпилированы, щелкните по нему правой кнопкой мыши (например, stm32f7xx_hal.c) и выберите Build Selected File(s), То, что вы должны увидеть, это командная строка компилятора и ее вывод, например arm-none-eabi-..., Если файл исключен из сборки, вы увидите только Info: Internal Builder is used for build с последующим hh:mm:ss Build Finished (took Xs.YYYms) но нет строки с аргументами командной строки компилятора. Попробуйте сделать это с файлом в вашем проекте, который знает, что нужно скомпилировать (main.c из того, что вы написали, скомпилировано) и сравните результаты.

Другие вопросы по тегам