【问题标题】:Truestudio compilation error for FreeRTOS compilation on STM32STM32 上 FreeRTOS 编译的 Truestudio 编译错误
【发布时间】:2019-01-01 02:01:49
【问题描述】:

我在使用 Truestudio 在 STM32 上编译 FreeRTOS 时遇到编译错误。

/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'

知道如何解决这个问题吗?

【问题讨论】:

  • 您的项目设置不正确。您需要添加所有包含路径,将 .c 文件添加到您的项目中,最后添加所有库

标签: stm32 freertos truestudio


【解决方案1】:

“未定义的引用”是一个链接器错误,在您的情况下,这可能意味着您没有编译所有必要的文件或所需的函数被预处理器指令“禁用”。然而,看到你的链接器如何抱怨HAL_Init 丢失——它没有被任何#if#ifdef 或类似物包围——意味着你的问题可能是由于源文件根本没有被编译。这也不是缺少静态库的问题,因为 HAL 是以源代码的形式交付的。

要解决您的问题,请执行以下操作:

  • 确保相应的文件(不是头文件)包含在您的项目中。比如HAL_Init位于stm32f7xx_hal.c(对于STM32F7、F4等有类似的文件,看你用什么)。在 Eclipse / Truestudio 中,最简单的方法是通过Top menu -> Navigate -> Open Resource... (CTRL+Shift+R) 并输入文件名。如果它不存在 - 该文件未添加到您的项目中,此时您应该添加它。

  • 如果您确实打开了文件,这并不一定意味着它正在构建,因为它可能被排除在外。根据您添加目录的方式,Eclipse 有时可能会决定默认将其作为一个整体禁用。转到项目资源管理器中的文件(如果您在上一步的编辑器中仍然打开文件,您可以单击两个箭头图标导航到文件:)。该文件 - 可能还有它所在的整个目录 - 不应该是灰色的/删除线。右键单击该文件并选择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 来自您发布的内容确实已编译)并比较结果。

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2016-09-07
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多