Freertos利用队列传递变量值

记录部分代码

 

void CreateTask()
{		
	
	xTaskCreate(LED_Task, "LED", 30, NULL, 0, &LED_Handle);
	xTaskCreate(OLED_Task, "OLED", 150, NULL, 0, &OLED_Handle);
	xTaskCreate(Sensor_Task, "Sensor", 100, NULL, 1, &Sensor_Handle);
}

 简单写了个读取温度数据传送到oled显示。目前同步效果在debug模式下看较为及时。

#include "OledTask.h"

TaskHandle_t OLED_Handle;
TaskHandle_t Sensor_Handle;


/* 队列句柄, 创建队列时会设置这个变量 */
QueueHandle_t DS18B20_TempQue;

void OLED_Task( void *pvParameters )
{
	//创建存放队列的数据和返回标志位
		BaseType_t xStatus;
		short DS18B20_Temp;
	
		OLED_Init();
		OLED_Clear();
	
		for( ;; )
		{
			//Receive Data
			xStatus = xQueueReceive( DS18B20_TempQue, &DS18B20_Temp, 10 );
			
			OLED_ShowNum(0,2,DS18B20_Temp/10,2,16);
			OLED_ShowChar(16,2,'.',16);
			OLED_ShowNum(16+8,2,DS18B20_Temp%10,1,16);
			OLED_ShowCHinese(16+8+8,2,0);
			
			if( xStatus == pdPASS )
			{
				//Read Data
			
			}
			else
			{
				//Read err
				
				
			}
			osDelay(50);
		}
}

void Sensor_Task( void *pvParameters )
{
	//创建存放队列的数据和返回标志位
		short DS18B20_Temp;
		BaseType_t xStatus;
	
		/* 创建队列:长度为1, */
		DS18B20_TempQue = xQueueCreate( 1, sizeof( short ) );
	
		for( ;; )
		{
			//Read TempData
			DS18B20_Temp=DS18B20_Get_Temperature();
			
			//Send Data
			xStatus = xQueueSendToBack( DS18B20_TempQue, &DS18B20_Temp, 0 );
			
			if( xStatus != pdPASS )
			{
				//Read err
				
			}


			osDelay(200);
		}
}

       预留了用于处理错误的位置。可以设置个全局变量,在debug模式下查看数据是否一样。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

随风飘零翼

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值