任务调度
看的是alios things 2.1的代码。个人水平有限,只能粗略讲一下alios things的任务调度。如有错误,请指正。
任务状态
其任务状态定义如下
typedef enum {
K_SEED,
K_RDY, /**< READY, task in ready list (g_ready_queue) */
K_PEND, /**< PEND, task in tick list (g_tick_head) and block list (sem/mutex/queue/...) */
K_SUSPENDED,
K_PEND_SUSPENDED,
K_SLEEP, /**< SLEEP, task tick list (g_tick_head) */
K_SLEEP_SUSPENDED,
K_DELETED,
} task_stat_t;
K_RDY: 就绪态
K_PEND: 阻塞态
K_SLEEP:睡眠态
K_SUSPEND:挂起态
K_PEND_SUSPEND: 阻塞挂起态
K_SLEEP_SUSPEND: 睡眠挂起态
K_DELETED:删除态
K_SEED:并没有看到实际内核调度时对K_SEED有相关操作。所以不知道是干嘛用的。
任务状态转换
转换关系如图所示:
红色箭