为啥队列执行的顺序,和我想的不一样
我天真的认为:
vTaskUserIF任务发送队列后,会先打印 "K2键按下,向xQueue1发送数据成功",
然后接收任务vTaskMsgPro才打印"接收到消息队列数据ucQueueMsgValue = 8"。
可是实际是相反的。为什么?
实际打印顺序:
接收到消息队列数据ucQueueMsgValue = 8
K2键按下,向xQueue1发送数据成功
static void vTaskTaskUserIF(void *pvParameters)
{
if( xQueueSend(xQueue1, (void *) &ucCount,(TickType_t)10) == pdFail )
{
printf("K2键按下,向xQueue1发送数据成功\r\n");
}
}
static void vTaskMsgPro(void *pvParameters)
{
BaseType_t xResult;
const TickType_t xMaxBlockTime = pdMS_TO_TICKS(300); /* éèÖÃ×î′óμè′yê±¼äÎa300ms */
uint8_t ucQueueMsgValue;
while(1)
{
xResult = xQueueReceive(xQueue1,
(void *)&ucQueueMsgValue,
(TickType_t)xMaxBlockTime);
if(xResult == pdPASS)
{
printf("接收到消息队列数据ucQueueMsgValue = %d\r\n", ucQueueMsgValue);
}
}
}
=================================================
任务名 任务状态 优先级 剩余栈 任务序号
vTaskUserIF R 1 318 1 发送任务
IDLE R 0 113 5
vTaskMsgPro B 3 444 3
vTaskLED B 2 444 2 接收任务
vTaskStart B 4 489 4
优先级不同,MsgPro优先级高于UserIF eric2013 发表于 2021-2-27 09:30
优先级不同,MsgPro优先级高于UserIF
不是啊。
任务vTaskTaskUserIF的优先级最高,所以我认为,此任务里面,先打印"K2键按下,向xQueue1发送数据成功"。 可是这个是后打印的。
static void vTaskTaskUserIF(void *pvParameters)
{
if( xQueueSend(xQueue1, (void *) &ucCount,(TickType_t)10) == pdFail )
{
printf("K2键按下,向xQueue1发送数据成功\r\n");
}
} snakeemail 发表于 2021-2-27 09:38
不是啊。
任务vTaskTaskUserIF的优先级最高,所以我认为,此任务里面,先打印"K2键按下,向xQueue1发送 ...
理解有偏,FreeRTOS里面,优先级数字越小,优先级越低,空闲任务最低位0
感谢。我还事先在网上查了下freertos的优先级,结果看的是unix优先级。真是惭愧。:dizzy:
页:
[1]