基于STM32F407的FreeRTOS学习笔记(11)

在前面的学习中例如信号量、队列中经常会出现提示:在许多情况下,“任务通知”可以提供二进制信号量的轻量级替代方案。
那么本期内容着重于介绍什么是任务通知以及如何使用。
首先我们去freertos的官网,阅读开发者文档中关于“任务通知”的介绍。
我们可以了解到,任务通知是由一条(或多条)任务通知状态以及一个通知值 组成。
任务通知是直接发送给任务的,传递通知值以及改变通知状态。任务通知如同任务一样也可以进入阻塞状态进行等待。
灵活的运用任务通知可以快捷的替代信号量、队列以及事件组等任务间的通讯。
使用任务通知
freertos中有好几个发送任务通知的函数,我们一一介绍他们的用处以及区别。
首先是xtasknotify和xtasknotifyindexed,它们分别用来发送任务通知和像任务通知数组发送通知(自v10.4.0一条任务可以有多条任务通知)
参数作用如上,xtasktonotify是需要通知的任务句柄,uxindextonotify在xtasknotify是没有的,用在任务通知数组中的,ulvalue则是我们需要传递的32位通知值,最后eaction是用来确定我们传递通知值的方式。
除了上述的指定*eaction * 以外还有一些发送任务通知的函数。
例如xtasknotifygive,可以用来替代二进制信号量使用,也等效于eaction设置为eincrement,通知值自增1。
任务通知函数还有好几个函数,在此不一一介绍,感兴趣的观众可以去freertos的官网查看文档手册。·
下面我们来看一下等待任务通知的函数。
测试代码
测试代码非常简单,我们定义一个轮询按钮按下的函数,如果按钮按下,我们就用任务通知向我们的任务函数发送一个通知值。任务函数则一直等待任务值,如果收到通知,就打印通知值。、
void mid_task(void * pvparameters)//发送任务通知函数{ int i = 0; while(1) { if(key_scan(0)==1) { printf(key_pressrn); xtasknotify( (taskhandle_t) high_handler,//任务函数的句柄 (uint32_t) i,//通知值 (enotifyaction) esetvaluewithoverwrite );//用覆盖的方式传递 i++; } } vtaskdelay(10);}void high_task(void * pvparameters)//接收任务通知函数{ uint32_t notifynumber;//存放任务通知值 basetype_t err; while(1) { err = xtasknotifywait( (uint32_t) 0,//不清除位 (uint32_t) 0,//不清除位 (uint32_t * ) ¬ifynumber, (ticktype_t) 10 );//等待10 if(err == pdtrue) { printf(recieve notify is : %drn,notifynumber); } vtaskdelay(10); }}

中移物联网布局智慧城市,赋能数字生活
经纬恒润蓝牙数字钥匙助力问界M7上市发布
HUAWEI nova 2s配上它 将发生不可思议的事情
机油压力传感器怎么检测_机油压力传感器位置
IP地址的网路ID不同类型分类
基于STM32F407的FreeRTOS学习笔记(11)
云安全和传统安全有什么区别?
SPI总线协议和I2C总线协议
华为iMaster NCEIP网络实时数字地图实现一张地图管理全网
Mali GPU编程特性及二维浮点矩阵运算并行优化详解
浅谈连接器市场变化
高精度可调直流稳压电源电路讲解
分析师:华为P40 Pro将搭载新潜望式长焦镜头,明年出货量约900万部
无纺布表面污点在线检测系统介绍
MOS管集成电路的十条使用操作准则
Gartner发布Linux盛衰图 2-5年后成主流
文心一言什么时候推出 百度官宣文心一言3月16日见
RF功率半导体2018年突破15亿美元,GaN推动市场上扬
LED驱动电源的分类及特性简介
搅局者小米电视研发内幕曝光 创维死磕