解决FreeRTOS中Error: L6218E: Undefined symbol eTaskGetState (referred from apptask.o).问题

文章讲述了在使用FreeRTOS时遇到的eTaskGetState函数未定义错误,原因可能是库链接不正确或函数版本不匹配。作者指导如何查找函数位置,检查宏定义并提供了解决方案,包括在config.h中添加必要的宏定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习FreeRTOS中出现了一个问题。

Error: L6218E: Undefined symbol eTaskGetState (referred from apptask.o).

像这种问题通常表示你的代码中使用了 FreeRTOS 函数 eTaskGetState,但链接器找不到这个函数的定义。这通常发生在 FreeRTOS 库没有正确链接或你正在尝试调用的函数与你使用的 FreeRTOS 版本不匹配时。
但是我很确定我的FreeRTOS移植是正确的。

第一步查找函数位置

eTaskGetState() 函数用于获取 FreeRTOS 中任务的状态。
任务状态包括以下几种:

  • eRunning(运行中):任务当前正在运行或处于就绪状态,等待 CPU 时间片来执行。
  • eReady(就绪):任务已经准备好运行,但由于其他高优先级任务正在执行,它尚未获得 CPU 时间片。
  • eBlocked(阻塞):任务由于等待某些事件(例如信号量、消息队列、定时器等)而被阻塞,不能执行。
  • eSuspended(挂起):任务被暂停执行,它不会被调度执行,直到被明确地恢复。
  • eDeleted(已删除):任务已被删除并且不再存在。
    那么一定就是位于 task.c 中。

查看用法

Ctrl+F搜索"eTaskGetState()"

#if ( ( INCLUDE_eTaskGetState == 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_xTaskAbortDelay == 1 ) )

    eTaskState eTaskGetState( TaskHandle_t xTask )
    {
        eTaskState eReturn;
        List_t const * pxStateList;
        List_t const * pxDelayedList;
        List_t const * pxOverflowedDelayedList;
        const TCB_t * const pxTCB = xTask;
        ......
      }
      .....
  }

你会发现需要先定义宏

 INCLUDE_eTaskGetState == 1 
 configUSE_TRACE_FACILITY == 1
 INCLUDE_xTaskAbortDelay == 1 

那么这三个宏定义有什么作用呢?

  • INCLUDE_eTaskGetState:用于启用 eTaskGetState() 函数的宏定义。确保将此宏定义设置为 1,以便编译器包含该函数的定义。
  • configUSE_TRACE_FACILITY:用于启用 FreeRTOS 的跟踪功能。如果你的应用程序需要跟踪任务状态,你需要将此宏定义设置为 1。
  • INCLUDE_xTaskAbortDelay:如果你想使用 xTaskAbortDelay() 函数,你需要将此宏定义设置为 1。
    所以如果我们需要使用eTaskGetState(),需要将
INCLUDE_eTaskGetState 

定义为1.

在FreeRTOSconfig.h配置

直接插入就行

#define INCLUDE_eTaskGetState 1
#define configUSE_TRACE_FACILITY 1
#define INCLUDE_xTaskAbortDelay 1

问题解决

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值