|
现在有很多操作系统的内部任务状态机制不全,直接导致了bug的产生,具体名字就不指明了。
Raw os 的内部任务状态非常健全,以下结构体定义了任务的状态机制。
enum RAW_TASK_STATUS
{
RAW_RDY = 0,
RAW_PEND,
RAW_PEND_TIMEOUT,
RAW_PEND_TIMEOUT_SUSPENDED,
RAW_SUSPENDED,
RAW_PEND_SUSPENDED,
RAW_DLY,
RAW_DLY_SUSPENDED,
RAW_DELETED,
RAW_INVALID_STATE
};
任务创建的时候调用 raw_task_create 将会根据参数直接把任务引向两个状态
1 RAW_RDY
2 RAW_SUSPENDED
任务的RAW_RDY状态通过raw_sleep函数转为 RAW_DLY 状态。
当一个任务阻塞在semphore, mutex, queue, event, memory 上的时候这个任务将进入RAW_PEND 状态,如果说有超时时间限制的话,那它将进入RAW_PEND_TIMEOUT状态。
假如一个任务通过raw_task_suspend 把其它任务suspend 住的话,将会根据那个任务当时的状态转化,比如从RAW_PEND 转化为RAW_PEND_SUSPENDED,
RAW_PEND_TIMEOUT转化为RAW_PEND_TIMEOUT_SUSPENDED,RAW_DLY 转为 RAW_DLY_SUSPENDED 状态。
任务通过 raw_task_resume 可以去掉一个suspend 状态,但是不能去除其他状态,比如从RAW_PEND_TIMEOUT_SUSPENDED 转化到 RAW_PEND_TIMEOUT,
RAW_DLY_SUSPENDED 转化到RAW_DLY.
任何状态的任务都可以被raw_task_delete 掉从而转为结束状态RAW_DELETED.
RAW_INVALID_STATE 状态通常是raw os 内部状态机出错。
|
赞赏
-
1
查看全部赞赏
-
|