从这个课时开始会介绍事件控制块组件,该组件主要功能用于实现任务等待/恢复操作。这个组件是后面要学习的信号量、邮箱等六大任务间同步与通信组件的基础。
在后面可以看到,实现这两大组件时,基本模式都一样:在事件控制块结构之上再添加与特定组件相关的数据。
主要内容
事件控制块的实现比较简单,包含两部分:类型字段指明了该控制块当前用于哪种同步与通信组件;链表用于组织在等待事件的任务。
在当前课时中,仅讲述事件控制块的初始化,初始化过程较简单,此处不再赘述。
重点难点
这里说明下“事件”是什么。
在实用中,可能出现很多情况,比如外部中断地发生、某些资源就绪、某个任务发出一个消息等等,诸如此类状况的变化,都可以描述为事件。然后用信号量、邮箱等这些以事件控制块为基础同步与通信组件进行管理。例如:
- 使用信号量进行任务间同步。A任务在信号量上等待,B任务释放信号量进而给A发出一个同步信号;
- A任务通过邮箱向B任务发送了一个消息。
注意事项
常见问题
tTask中delayNode好像可以用linkNode代替?
Q:tTask中delayNode好像可以用linkNode代替?
A:不可以。delayNode用于任务插入到延时队列,linkNode用于插入到事件控制块中。在任务在事件控制块上等待时,可能同时设置了超时,此时任务需要同时在事件控制块中等待,在延时队列中等待,所以需要 两个结点用于插入不同的链表中。
struct _tEvent是什么意思
Q:struct _tEvent是什么意思
A:这是C语言的前置声明,具体可百度下 前置声明