我尝试使用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做一个项目,两者都存在同样的问题。
您应该(在某处)有一个名为 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
)才能使更改生效。