欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

事件控制块的清空与状态查询

发布时间:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 事件控制块的清空与状态查询 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

    • 1 事件控制块的清空与状态查询
      • 1.1 设计实现

1 事件控制块的清空与状态查询

1.1 设计实现

事件控制块的清空:

事件控制块的查询:

/********************************************************************************************************** ** Function name : tEventRemoveAll ** Descriptions : 清除所有等待中的任务,将事件发送给所有任务 ** parameters : event 事件控制块 ** parameters : msg 事件消息 ** parameters : result 告知事件的等待结果 ** Returned value : 唤醒的任务数量 ***********************************************************************************************************/ uint32_t tEventRemoveAll (tEvent * event, void * msg, uint32_t result) {tNode * node;uint32_t count;// 进入临界区uint32_t status = tTaskEnterCritical();// 获取等待中的任务数量count = tListCount(&event->waitList);// 遍历所有等待中的任务while ((node = tListRemoveFirst(&event->waitList)) != (tNode *)0){ // 转换为相应的任务结构 tTask * task = (tTask *)tNodeParent(node, tTask, linkNode);// 设置收到的消息、结构,清除相应的等待标志位task->waitEvent = (tEvent *)0;task->eventMsg = msg;task->waitEventResult = result;task->state &= ~TINYOS_TASK_WAIT_MASK;// 任务申请了超时等待,这里检查下,将其从延时队列中移除if (task->delayTicks != 0){ tTimeTaskWakeUp(task);}// 将任务加入就绪队列tTaskSchedRdy(task); } // 退出临界区tTaskExitCritical(status); return count; }/********************************************************************************************************** ** Function name : tEventWaitCount ** Descriptions : 事件控制块中等待的任务数量 ** parameters : event 事件控制块 ** parameters : msg 事件消息 ** parameters : result 告知事件的等待结果 ** Returned value : 唤醒的任务数量 ***********************************************************************************************************/ uint32_t tEventWaitCount (tEvent * event) { uint32_t count = 0;// 进入临界区uint32_t status = tTaskEnterCritical();count = tListCount(&event->waitList); // 退出临界区tTaskExitCritical(status); return count; }

参考资料:

  • 【李述铜】从0到1自己动手写嵌入式操作系统
  • 总结

    以上是生活随笔为你收集整理的事件控制块的清空与状态查询的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。