WSN_OS学习之任务状态转换框架(一)

1.WSN_OS的任务状态

一共有7种状态,定义在wsn_type.h中。如下:

typedef WSN_U8 WSN_TAST_STATUS;        
enum
{
     WSN_READY= 0,                /** 就绪状态       ready state                      */
     WSN_SLEEP,                   /** 睡眠状态       sleep state                      */
     WSN_BLOCK_TIMEOUT,           /** 限时阻塞状态    block with timeout state         */
     WSN_BLOCK,                   /** 永久阻塞状态    block without timeout state      */
     WSN_PEND,                    /** 挂起状态       pend state                       */
     WSN_BLOCK_PEND,              /** 永久阻塞挂起状  WSN_BLOCK with WSN_PEND          */
     WSN_BLOCK_TIMEOUT_PEND       /** 限时阻塞挂起状态 WSN_BLOCK_TIMEOUT with WSN_PEND */
}; //WSN_TAST_STATUS

就绪态(WSN_READY): 任务具备运行资格且不被挂起,随时等待系统进行任务调度

睡眠态(WSN_SLEEP):处于就绪态的任务调用wsn_sleep( WSN_U32 dly )函数让自己睡眠

超时阻塞态(WSN_BLOCK_TIMEOUT): 任务需要某种资源而系统暂时无法提供 , 并且该任务选择等待一段时间(自己设置)

永远阻塞态(WSN_BLOCK):任务需要某种资源而系统暂时无法提供 , 并且该任务选择一直等下去

挂起态(WSN_PEND):处于就绪态的任务被挂起 , 被挂起的任务就是具备了运行的资格也不会放到就绪态让系统调度

永远阻塞挂起态(WSN_BLOCK_PEND):任务处于永远阻塞态,并被挂起

超时阻塞挂起态(WSN_BLOCK_TIMEOUT_PEND):任务处于超时阻塞态,并被挂起

2.WSN_OS的状态转换图
新建的任务默认是就绪状态
新建的任务默认是就绪状态

3.关于各状态的转换条件及涉及相关操作如下

1、 任务主动睡眠,调用了wsn_sleep(WSN_U32 dly )
相关操作:将任务状态改为睡眠态WSN_SLEEP、从就绪列表中删除、插入到系统时钟计数列表中、进行任务调度

2、 任务睡眠时间到了,在tick_list_update(WSN_VOID )中实现
相关操作:将任务状态改成就绪态WSN_READY、从系统时钟计数列表中删除、从任务控制链表中删除、添加到就绪列表中

5、永远阻塞任务,在获取资源(如互斥量、信号量、消息队列等)时,如果没有资源可用并且选择WSN_BLOCK_FOREVER
相关操作:将任务状态改成永远阻塞态WSN_BLOCK、记录阻塞类型、从就绪列表中删除、根据任务的优先级将任务加到阻塞队列中

6、唤醒阻塞任务,获取到所阻塞资源(如互斥量、信号量、消息队列等)或者事件的发生,调用了wsn_wakeup_task( WSN_TASK_TCB *p_tcb ),唤醒阻塞任务之后,必须调用调度程序。
相关操作:从系统时钟计数列表中删除、从任务控制链表中删除、添加到就绪列表中、任务状态改成就绪态WSN_READY、更新阻塞类型BLOCK_NON

7、超时阻塞任务,在获取资源(如互斥量、信号量、消息队列等)时,如果没有资源可用并且选择value,设置了等待时间
相关操作:将任务的状态改成超时阻塞态WSN_BLOCK_TIMEOUT、将任务加入系统时钟计数列表中,并设置timeout的值、记录阻塞类型、从就绪列表中删除、根据任务的优先级将任务加到阻塞队列中

8、唤醒超时阻塞任务,阻塞时间到了,在tick_list_update(WSN_VOID )中实现,或者是获取到所阻塞资源(如互斥量、信号量、消息队列等)或者事件的发生,调用了wsn_wakeup_task( WSN_TASK_TCB *p_tcb ),唤醒阻塞任务之后,必须调用调度程序。
相关操作:从系统时钟计数列表中删除、从任务控制链表中删除、添加到就绪列表中、任务状态改成就绪态WSN_READY、更新阻塞类型BLOCK_NON

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值