完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
作者为本版版主,我帮忙转帖。
现在有很多操作系统的内部任务状态机制不全,直接导致了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 内部状态机出错。 |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:39 , Processed in 0.443889 second(s), Total 67, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号