FreeRTOS基于任务通知的信号量 事件标志组 消息邮箱

FreeRTOS创建的任务都有一个任务控制块。
任务控制块本质上是一个结构体变量,用于记录任务的相关的消息。
结构体变量中有一个专门用于任务通知的32位变量ulNotifiedValue

ulNotifiedValue可取代计数信号二值信号事件标志组
特点: 节省内存,提高效率,只有一个任务等待

  • ulNotifiedValue数值进行加一或减一就是计数信号量
  • ulNotifiedValue数值取值0或1就是二值信号量
  • ulNotifiedValue数值按位设置bit0-bit31就是事件标志组

任务信号量

ulNotifiedValue 计数信号表示可用的资源大小,多用于任务同步

任务计数信号API功能
BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify )释放信号量,信号量+1
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit,TickType_t xTicksToWait )获取信号量,信号量-1或清零,参数1为pdFALSE表示计数信号,参数1为pdTRUE表示二值信号
void vTaskNotifyGiveFromISR(TaskHandle_t xTaskToNotify,BaseType_t *pxHigherPriorityTaskWoken )释放信号量,信号量+1(中断)
**释放信号量**
xTaskNotifyGive(xHandleTaskMsgPro);
**获取计数信号量**
ulNotifiedValue = ulTaskNotifyTake(pdFALSE,xBlockTime);
**获取二值信号量**
ulNotifiedValue = ulTaskNotifyTake(pdTRUE,xBlockTime);

任务事件标志组

ulNotifiedValue的bit0-bit31用于事件标志

任务事件标志API功能
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify,uint32_t ulValue, eNotifyAction eAction )设置事件标志位,eAction表示任务通知类型,事件标志模式为eSetBits
BaseType_t xTaskNotifyWait(。。。)获取事件标志位
aseType_t xTaskNotifyFromISR(。。。)设置事件标志位(中断)

参数 eNotifyAction: 任务通知模式
                    eNoAction 无任务通知,控制块中的ulNotifiedValue值无效
                    eSetBits  事件标志组模式
                    eIncrement 信号量模式
                    eSetValueWithOverwrite 消息邮箱模式
                    eSetValueWithoutOverwrite 消息邮箱不允许覆盖模式
 
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue,eNotifyAction eAction ); 

任务消息邮箱

消息邮箱本质上就是长度为1的消息队列。
任务消息邮箱是将任务控制块中的ulNotifiedValue值当作单个消息。

任务消息邮箱API功能
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify,uint32_t ulValue, eNotifyAction eAction )发送消息,eAction表示任务通知类型,消息邮箱模式为eSetValueWithOverwrite
BaseType_t xTaskNotifyWait(0x00000000,0xFFFFFFFF,&ulValue,xMaxBlockTime)接收消息
aseType_t xTaskNotifyFromISR(。。。)设置事件标志位(中断)
xResult = xTaskNotifyWait(0x00000000, 0xFFFFFFFF, &ulValue,MaxDelay);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值