为什么使用 STM32F4 在 FreeRTOS 中使用未定义符号 vApplication___Hook

问题描述 投票:0回答:1

我尝试使用FreeRTOS构建LED闪光灯,但项目中存在一些错误: 符号 prvIdleTask 引用的未定义符号 vApplicationIdleHook(文件tasks.o 中的 .text.prvIdleTask 部分) 符号 pvPortMalloc 引用的未定义符号 vApplicationMallocFailedHook(文件 heap_1.o 中的 .text.pvPortMalloc 部分) 符号 vTaskSwitchContext 引用的未定义符号 vApplicationStackOverflowHook(文件tasks.o 中的 .text.vTaskSwitchContext 部分) 符号 xTaskIncrementTick 引用的未定义符号 vApplicationTickHook(文件tasks.o 中的 .text.xTaskIncrementTick 部分) 它们看起来都很熟悉,因为我看到它们是 FreeRTOS 中的回调函数。

所以我不知道如何修复它,我尝试更改 configUSE_IDLE_HOOK 和 configUSE_TICK_HOOK 参数,但它仍然不起作用( 我尝试用KEIL和SEGGER Embedded Studio做一个项目,两者都存在同样的问题。

stm32 freertos rtos stm32f4discovery stm32f4
1个回答
0
投票

您应该(在某处)有一个名为 FreeRTOSConfig.h 的文件,用于配置 FreeRTOS。它有很多可以打开和关闭的东西。

如果启用“钩子”功能,那么您需要为钩子实现一个函数来完成您需要的操作。

寻找类似以下的行:

#define configUSE_TICK_HOOK            1
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configUSE_MALLOC_FAILED_HOOK   1

您应该将它们设置为零(以禁用该功能),或者自己实现缺少的功能。例如

void vApplicationStackOverflowHook( TaskHandle_t xTask, signed char * pcTaskName )
{
    log_error ( "STACK OVERFLOW DETECTED: ", pcTaskName );
}

请注意,如果您的依赖项未正确设置,您可能需要重新编译项目(即清理项目,相当于

make clean
)才能使更改生效。

© www.soinside.com 2019 - 2024. All rights reserved.