WSN_OS学习之任务状态转换框架(一)
来源:互联网 发布:q叔淘宝店叫什么名字 编辑:程序博客网 时间:2024/05/22 09:38
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
- WSN_OS学习之任务状态转换框架(一)
- 系统任务状态转换框架
- 任务状态转换
- ci框架学习之路(一)
- KJframeforandroid框架之 KJBlog学习(一)
- Android框架学习之Retrofit(一)
- Android框架学习之GreenDao(一)
- CI 框架-学习之路(一)
- C#学习之路-任务、线程(一)
- VxWorks任务状态的转换
- SpringMVC框架学习之框架初体验(一)
- uC/OS iii(三)任务管理之任务状态
- NeHe学习之框架一
- AsyncTask异步任务线程框架(一)
- 新手学习任务(一)
- myabtis框架学习(二) 之 细节学习 (一)
- 深度学习框架之Pytorch学习(一)
- Quartz任务调度框架学习一(Hello Quartz!)
- Luogu-2680 (二分答案+树上差分)
- http://blog.sina.com.cn/s/blog_59fabe030102v81s.html
- Fedora下编译安装Wireshark
- okhttp+gson转化成javabean(天气接口)
- windows安装配置zookeeper后启动出现的错误:java.io.IOException: Unable to create data directory:xxxxxxx
- WSN_OS学习之任务状态转换框架(一)
- AUTOCOMMIT自动提交该参数要大写才能生效,否则即使小写autocommit改为off,但小写的autocommit并不生效
- Python模块(学习使用模块和安装第三方模块)
- 数据库的基本操作(1)
- xss练习-prompt(1) to win
- 集合遍历之Iterator与foreach
- Hibernate--组件
- python爬虫实践----爬取京东图片
- 查分约束系统板子