夜雨聆风学习资料网

ARTICLE · 1020944

FreeRTOS 事件组源码剖析:一个任务等三个

FreeRTOS 事件组源码剖析:一个任务等三个

FreeRTOS 事件组源码剖析:一个任务等三个

三个传感器都采完才计算,用信号量得连 Take 三次。中间要是有人插队,数就乱了。

更糟的是,计数信号量只能记“到了几个”,分不清是哪几个到的。而且一次 Give 只唤醒一个任务,想广播根本做不到。

FreeRTOS 的事件组就是来解决这些的。它其实没队列那么重,核心就两样:一个位变量存状态,一条链表管挂起的任务。

最妙的是,每个任务等什么条件,全存在它自己的链表节点里。同一个事件位上,能同时挂着等“或”、等“与”的不同任务。SetBits 一跑起来,挨个问一遍,各自判定互不干扰。

不过这设计也带来几个坑。因为高 8 位被内核拿去当控制位了,咱们能用的只有 24 个。还有,清位动作得等遍历完整个链表再统一做,这就导致函数返回时,刚设的位可能已经被清掉了。

原文FreeRTOS 事件组源码剖析:一个任务等三个传感器的的状态,谁在记着到了几个?
作者提示: 个人观点,仅供参考
广东,59分钟前,

相关学习资料