FreeRTOS 体验教程:8.什么是freeRTOS的任务通知?

FreeRTOS 任务通知使用教程

任务通知是 FreeRTOS 提供的一种高效的线程间通信机制。每个 RTOS 任务都有一个 32 位的通知值,任务创建时,这个值被初始化为 0。任务通知相当于直接向任务发送一个事件,接收到通知的任务可以解除阻塞状态,前提是这个阻塞事件是因等待通知而引起的。发送通知的同时,也可以可选地改变接收任务的通知值。本文将详细介绍如何在 FreeRTOS 中使用任务通知。

任务通知的更新方式

可以通过以下方法向接收任务更新通知:

  • 不覆盖接收任务的通知值
  • 覆盖接收任务的通知值
  • 设置接收任务通知值的某些位
  • 增加接收任务的通知值

1. 任务控制块的通知定义

任务通知的定义在 taskTCB 任务控制块中,受控于宏 configUSE_TASK_NOTIFICATIONS。该宏默认开启,所以任务通知功能默认启用。
image.png
image.png

2. 任务通知的基本用法

任务通知可以只发送通知,不附带任何值。这种用法类似于信号量,因此任务通知的接口也提供了类似信号量接口的形式,方便使用和区分:

  • xTaskNotifyGive:释放任务通知(类似于 xSemaphoreGive 释放信号量)
  • ulTaskNotifyTake:获取任务通知(类似于 xSemaphoreTake 获取信号量)

2.1 使用示例

以下示例展示了 task1 每隔 8 秒释放一个任务通知给 task2task2 每隔 1 秒尝试获取任务通知,获取超时时间为 10 秒。

void NotifyTask1_entry(void* parameter)
{
   
	uint32_t send1 = 1;
	uint32_t ret_num;
	while(1)
	{
   
		vTaskDelay(configTICK_RATE_HZ*8);
		ret = xTaskNotifyGive(task2StaticHandle);
	}
}
void NotifyTask2_entry(void* parameter)
{
   
	while(1)
	{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值