1. 作用
任务通知功能是干什么用的呢?举个例子,假设一种场景,当按下按键时,LED灯会亮。比较简单的实现代码如下:
void func(void)
{
if(pressed)
led on;
}
在基于时间片任务调度下,基于模块化的考虑,或者基于可读性的考虑,也可以按照如下代码实现
unsigned char button_state;
void led(void)
{
if (button_state == PRESSED)
led on;
}
void button(void)
{
while (button_gpio == PRESSED)
button_state = PRESSED;
}
void func(void)
{
while(1)
{
button();
led();
}
}
但是在有操作系统的情况下,每个任务都是一个死循环,那么这两个函数之间该如何通讯呢?这就是任务通知干的活。当然队列、信号量等都可以使用,这儿我们只讨论用任务通知如何实现该功能.
2. 任务通知的优点:
用事件通知解除阻塞任务会比二值信号量快45%并且使用更少的RAM空间。
3. 性能优势和使用限制
在实现相同功能的情况下,任务通知具有速度和RAM空间的双重优势。但是这种优势也有一定的限制:
- 只有唯一的任务可以接受通知的情况下,才可以使用。这个条件已经可以满足大部分的应用了。
- 只有以下情况,任务通知才可以替代队列:当有一个处在阻塞状态下的任务等待通知时,那个发送通知的任务如果不能马上完成发送,必须不能进入阻塞状态等待发送完成。

最低0.47元/天 解锁文章
1089

被折叠的 条评论
为什么被折叠?



