[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 ] 任务通知 功能应用

相关推荐

  1. FreeRTOS任务通知

    2024-07-13 12:24:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 12:24:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 12:24:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 12:24:02       58 阅读
  4. Python语言-面向对象

    2024-07-13 12:24:02       69 阅读

热门阅读

  1. 益铭祥元宇宙

    2024-07-13 12:24:02       27 阅读
  2. Jupyter Notebook基础:用IPython实现动态编程

    2024-07-13 12:24:02       27 阅读
  3. LCP 61. 气温变化趋势

    2024-07-13 12:24:02       24 阅读
  4. codeforce 954 div3 G2题

    2024-07-13 12:24:02       19 阅读
  5. elk部署springboot

    2024-07-13 12:24:02       25 阅读
  6. 音频筑基:入门50问

    2024-07-13 12:24:02       27 阅读
  7. 永恒之蓝:一场网络风暴的启示

    2024-07-13 12:24:02       29 阅读
  8. TensorFlow系列:第三讲:MobileNetV2使用介绍

    2024-07-13 12:24:02       23 阅读
  9. MySQL上亿数据查询优化:实践与技巧

    2024-07-13 12:24:02       19 阅读
  10. Jetson-AGX-Orin gstreamer+rtmp+http-flv 推拉流

    2024-07-13 12:24:02       20 阅读
  11. Mybatis-Plus最优化持久层开发

    2024-07-13 12:24:02       18 阅读
  12. 389. 找不同

    2024-07-13 12:24:02       20 阅读
  13. Python水平怎么样才能就业?

    2024-07-13 12:24:02       49 阅读
  14. Git: fatal: cannot lock ref‘HEAD‘: Unable to create

    2024-07-13 12:24:02       25 阅读
  15. 大数据学习之 scala基础(补充)

    2024-07-13 12:24:02       24 阅读
  16. Perl中的切分艺术:深入探索split函数的神秘力量

    2024-07-13 12:24:02       22 阅读