FreeRTOS的任务调度有抢占、时间片轮询。抢占存在于不同任务优先级,时间片轮询是在同等优先级的任务。
任务的状态有:运行、就绪、打断、挂起、删除
对应任务的状态的有以下几个链表:pxReadyTasksLists[ uxPriority ]、xPendingReadyList、pxDelayedTaskList、pxOverflowDelayedTaskList、xSuspendedTaskList、xTasksWaitingTermination
各种链表对应的TCB中ListItem的关系如下表:
pxReadyTasksLists | xPendingReadyList | pxDelayedTaskList | pxOverflowDelayedTaskList | xSuspendedTaskList | xTasksWaitingTermination |
xGenericListItem | xEventListItem | xGenericListItem | xGenericListItem | xGenericListItem | xGenericListItem |
1、在任务刚创建时,会将任务添加至该链表 2、当任务的优先级更改时,如果任务之前已经在此链表,需要将其移除,然后根据最新的优先级在添加到此链表 3、如果任务被挂起时,调用TaskResume,将会将指定的任务添加到对应优先级的链表中 4、当调用xTaskResumeAll时,将PendingReadyList中的所有任务都添加到对应优先级的 |