[FreeRTOS 功能应用] 任务通知 功能应用


一、基础知识点

[FreeRTOS 基础知识] 任务通知 概念
[FreeRTOS 内部实现] 任务通知

本实验是基于STM32F103开发移植FreeRTOS实时操作系统,任务通知实战操作。
使用工具:Keil、串口工具


二、代码讲解

1、使用osThreadCreate创建两个任务

osThreadDef(Task1, vTask_s, osPriorityHigh, 0, 1000);
Task1_Handle = osThreadCreate(osThread(Task1), NULL);
if( Task1_Handle != NULL )
{
	printf("Succeeded in creating Sender1_Handle Queue. Procedure!\n\r");
}
else
{
	printf("Fail in creating Sender1_Handle Queue. Procedure!\n\r");
}

osThreadDef(Task2, vTask_r, osPriorityNormal, 0, 1000);
Task2_Handle = osThreadCreate(osThread(Task2), NULL);		
if( Task2_Handle != NULL )
{
	printf("Succeeded in creating Seceiver_Handle Queue. Procedure!\n\r");
}
else
{
	printf("Fail in creating Seceiver_Handle Queue. Procedure!\n\r");
}		

2、task2 接收数据处理函数

void vTask_r(void const * argument)
{
	uint32_t ulValue, ulResult;
	 for(;;)
	 {
		ulResult =  xTaskNotifyWait(0,0,&ulValue, portMAX_DELAY);
		if (ulResult == pdPASS)
			printf("BWD:xTaskNotifyWait ok, data:%d \n\r", ulValue);
		
		vTaskDelay(pdMS_TO_TICKS(300));   // 延时300ms
	}	
}

使用xTaskNotifyWait()等待接收通知,接收数据成功后打印接收到的数值。

3、task1 发送数据处理函数

void vTask_s(void const * argument)
{
	uint32_t i=0;
	char c;
	
  for(;;)
  {
		for (i =0;i < 3; i++)
		{	
				c = 'a'+ i;
				if (xTaskNotify(Task2_Handle, (uint32_t)c, eSetValueWithOverwrite ) == pdPASS)
						printf("BWD --- send ok, data = %d \n\r", (uint32_t)c);
				else
						printf("BWD --- send fail.\n\r");
		}
		vTaskDelay(pdMS_TO_TICKS(300));   // 延时300ms
	}	
}

使用xTaskNotify()向指定task2任务发送通知,发送的数据使用覆盖的模式进行。


三、结果演示

从串口可以看出,由于发送的数据使用覆盖的方式,所以代码中循环调用xTaskNotify函数发送时,会将数据进行覆盖。因此task2接收时只会接收都最后一个数值量。
在这里插入图片描述


四、代码下载

[ FreeRTOS ] 任务通知 功能应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bazinga bingo

您的鼓励就是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值