记录部分代码
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模式下查看数据是否一样。