这些函数不能在屏蔽中断和临界代码区的代码中实现,下面是一些可以触发任务调度的函数:
在RTOS(如FreeRTOS)中,任务调度是由调度器(Scheduler)负责的,调度器会根据任务的优先级和状态决定哪个任务可以运行。以下是一些常见的可以触发任务调度的函数:
1. 任务阻塞函数
当任务进入阻塞状态(如等待事件、延时等),调度器会立即切换到其他就绪任务。
-
vTaskDelay()
任务延时,进入阻塞状态,等待指定时间后恢复。 -
vTaskDelay(pdMS_TO_TICKS(100)); // 延时100ms
vTaskDelayUntil()
精确周期延时,适用于周期性任务。 -
TickType_t xLastWakeTime = xTaskGetTickCount(); vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(100)); // 每100ms执行一次
-
xQueueReceive()
从队列中接收数据,如果队列为空,任务进入阻塞状态。 -
xQueueReceive(xQueue, &data, portMAX_DELAY); // 无限等待数据