FreeRtos实时系统: 十四.FreeRTOS的任务通知
- 一.任务通知的简介
- 二.任务通知值和通知状态
- 三.任务通知相关API函数介绍
- 四.任务通知模拟信号量实验
- 五.任务通知模拟消息邮箱实验
- 六.任务通知模拟事件标志组实验
- 七.课堂总结
一.任务通知的简介
任务通知使用内存较小,任务创建时结构体内就已经创建好了。
任务通知值的更新方式:
任务通知的优势和劣势:
相对常规二值信号量快45%左右。
二.任务通知值和通知状态
任务通知值:
任务通知状态:
三.任务通知相关API函数介绍
任务通知API函数主要有两类:
1、发送通知
三个任务发送通知都是由一个函数定义的:
函数原型:
第二个形参都是0,代表数组成员的第一个成员。
eAction任务通知方式共有以下几种:
2、接收通知
ulTaskNotigyTake():
xTaskNotifyWait():
四.任务通知模拟信号量实验
模拟二值信号量释放:
模拟二值信号量获取:
模拟计数型信号量释放:
模拟计数型信号量获取:
区别在于第一个形参,pdFALSE成功接收后不清零,pdTRUE接收后清零。
五.任务通知模拟消息邮箱实验
发送:
xTaskNotify( task2_handler, key, eSetValueWithOverwrite );
使用覆写的方式将键值发送给task2。
接收:
xTaskNotifyWait( 0, 0xFFFFFFFF, ¬ify_val, portMAX_DELAY );
接收发送的值,进入时不清零,退出清零,将值保存在notify_val中,通过switch判断notify_val打印接收到的值。
六.任务通知模拟事件标志组实验
发送:
xTaskNotify( task2_handler, 0x01, eSetBits);
向任务二使用设置位的方式发送0x01,相当于将bit0置1。
接收:
xTaskNotifyWait( 0, 0xFFFFFFFF, ¬ify_val, portMAX_DELAY );
进入任务不清零,退出时清零,将接收到的值存在notify_val中,最长延时。