首页 > 解决方案 > 比较 freertos 中的任务

问题描述

我有一个(cpp)对象,它可以在多个任务之间共享,但由单个任务拥有(在 TaskHandle_t ownerTask 中创建对象时保存所有者任务句柄)。现在,当我运行该对象的某个函数时,我需要检查请求该函数执行的当前任务是否是所有者任务。

如何测试当前任务是否与已保存句柄的任务相同?问题是项目中的 configuse_TRACE_FACILITY 设置为 0(并且是这样的),因此 TCB(这是句柄指向的)没有成员 uxTaskNumber。

自己在 TCB 中添加一个成员来跟踪任务编号(例如 taskID)然后在将任务添加到就绪列表时设置它是一个好主意吗?

标签: embeddedreal-timemicrocontrollerfreertos

解决方案


有一个xTaskGetCurrentTaskHandle()函数可以返回TaskHandle_t,这就是我假设你想要的。

然而,真正的问题是你为什么首先想要这样的功能。对我来说,这听起来像是您正在尝试创建某种自己的资源所有权逻辑 - 为什么不使用互斥锁?如果您的目标是不通过最初创建它的任务以外的任务使用给定对象,您可以例如在对象内嵌入一个递归互斥锁(而不是任务句柄),然后获取互斥锁而不将其返回。然后检查对象所有权的逻辑可以简单地尝试以 0 等待时间获取互斥锁。


推荐阅读