Ошибка компиляции 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 (если у вас все еще открыт файл в редакторе с предыдущего шага, вы можете щелкнуть значок двух стрелок, чтобы перейти к файлу:
). Файл - и, вероятно, весь каталог, в котором он находится - не должен быть серым / зачеркнутым. Щелкните правой кнопкой мыши на файле и выберите
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
из того, что вы написали, скомпилировано) и сравните результаты.