在FreeRTOS中,xDelayedTaskList1
和 xDelayedTaskList2
是用于管理延时任务的两个链表。它们的区别和用途如下:
-
基本概念:
- xDelayedTaskList1 和 xDelayedTaskList2 是FreeRTOS内核用来存储延时任务的两个链表。
- 延时任务是指那些由于调用了
vTaskDelay
或vTaskDelayUntil
等函数而被阻塞,等待某个时间点才会重新进入就绪状态的任务。
-
主要区别:
- xDelayedTaskList1: 当前延时任务链表。它存储了所有当前在延时状态下的任务。当这些任务的延时时间到期时,它们会从这个链表中移除并被添加到就绪任务列表中。
- xDelayedTaskList2: 备用延时任务链表。这个链表用于存储那些需要在未来某个时间点(通常是下一次系统节拍周期)检查是否应该进入就绪状态的任务。
-
用途和切换:
- FreeRTOS使用这两个链表来优化延时任务的管理。在每一个系统节拍中,内核只需要检查
xDelayedTaskList1
中的任务。 - 当系统节拍(tick)计数器溢出(即从最大值回到0)时,两个链表会交换角色:
xDelayedTaskList2
变为xDelayedTaskList1
,而原来的xDelayedTaskList1
变为新的xDelayedTaskList2
。这样做是为了确保在系统节拍溢出后延时任务的时间计算仍然正确。
- FreeRTOS使用这两个链表来优化延时任务的管理。在每一个系统节拍中,内核只需要检查
-
切换时机:
- 在每次系统节拍(tick)中断处理函数(通常是
xTaskIncrementTick
)执行时,内核会检查当前系统时间是否达到下一个溢出点。如果是,就会交换这两个链表。
- 在每次系统节拍(tick)中断处理函数(通常是
总结来说,xDelayedTaskList1
和xDelayedTaskList2
是FreeRTOS用于管理延时任务的两个链表,通过交替使用来有效管理和调度这些任务,确保系统能够正确处理不同的延时需求。