embedded - 比较 freertos 中的任务
问题描述
我有一个(cpp)对象,它可以在多个任务之间共享,但由单个任务拥有(在 TaskHandle_t ownerTask 中创建对象时保存所有者任务句柄)。现在,当我运行该对象的某个函数时,我需要检查请求该函数执行的当前任务是否是所有者任务。
如何测试当前任务是否与已保存句柄的任务相同?问题是项目中的 configuse_TRACE_FACILITY 设置为 0(并且是这样的),因此 TCB(这是句柄指向的)没有成员 uxTaskNumber。
自己在 TCB 中添加一个成员来跟踪任务编号(例如 taskID)然后在将任务添加到就绪列表时设置它是一个好主意吗?
解决方案
有一个xTaskGetCurrentTaskHandle()
函数可以返回TaskHandle_t
,这就是我假设你想要的。
然而,真正的问题是你为什么首先想要这样的功能。对我来说,这听起来像是您正在尝试创建某种自己的资源所有权逻辑 - 为什么不使用互斥锁?如果您的目标是不通过最初创建它的任务以外的任务使用给定对象,您可以例如在对象内嵌入一个递归互斥锁(而不是任务句柄),然后获取互斥锁而不将其返回。然后检查对象所有权的逻辑可以简单地尝试以 0 等待时间获取互斥锁。
推荐阅读
- vb.net - 通过找出一个表单类是否已经打开,只打开一次表单
- python-3.x - 我正在使用 LabelEncoder 在我的数据框中标记分类数据。我收到此错误。'(slice(None, None, None), 2)' 是无效键
- java - Maven项目从eclipse正确运行但不是命令行
- oracle - 填写数据库连接信息给定的服务名称
- java - Android 从 xlsx 读取数据
- swift - PhoneNumberKit 返回 AG 以获得免费电话号码
- java - 使用 spring-data-jdbc 从数据库中检索聚合子对象中的一对多关系时映射不正确
- c# - 使用 iis 10,我如何为所有请求启用 CORS?WebAPI2
- python - 是否有将 [ 1 0 1 0 ] 的向量转换为 [ 1 0 0 0 ] 的函数?
- ruby - 从两台计算机启动 Jekyll 站点(不是同时)