我正在尝试使用vTaskList函数来监视正在使用的任务。 为了使用vTaskList,我在下面配置了宏。
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
和下面是显示任务列表的任务代码。
void TASK_LIST()
{
signed char pWriteBuffer[2048];
for(;;)
{
vTaskList(pWriteBuffer);
printf("task_name task_state priority stack tasK_num\n");
printf("%s\n", pWriteBuffer);
}
vTaskDelete(NULL);
return;
}
但是,该错误刚刚出现以供未定义的参考
什么原因导致此错误?
谢谢。
Ps。对于我的原始情况,没有宏 FreeRTOSConfig.h中的configUSE_STATS_FORMATTING_FUNCTIONS。所以我加了 手动。
答案 0 :(得分:0)
它从代码源中查找,因为它取决于FreeRTOS内核版本...
我检查了几个演示应用程序以查找您的特定版本,例如this one,也是 tasks.c 的代码源。设置您提到的那两个宏应该就足够了。因此,链接错误的实际原因似乎与配置本身无关。检查配置更改后是否重新构建了 tasks.c 源文件(如果没有,则无法正确处理项目中的依赖项)。还要仔细检查这些定义是否为真实的“ 1 ”-数字(不是“ l ”(小写的“ L”字母)或“ I ” (大写的“ I”字母),根据所使用的字体,很容易将其与“ 1”混淆。
更新
由于您正在使用Eclipse IDE,因此请看一下此official guidance of how to setup project。 Here您可以找到适用于您的FreeRTOS版本的Eclipse演示项目,尤其要检查Makefile,我猜您自动生成的Makefile缺少以下行:
$(RTOS_SOURCE_DIR)/tasks.c \
PS
对于v9.0.0,足以像您一样启用配置。但是v10.0.0也依赖于 configSUPPORT_DYNAMIC_ALLOCATION :如果在项目的 FreeRTOSConfig.h 中将其定义为默认值(“ 1”)以外的值-vTaskList将被排除。但是,在包含头文件task.h和online documentation中都没有提及这种依赖性。