搜索
bottom↓
回复: 5

ucos 任务的状态疑问?求解中。。。

[复制链接]

出0入0汤圆

发表于 2011-12-24 12:10:43 | 显示全部楼层 |阅读模式
各位牛人,大虾:
    在此求教。
1:uCOS系统中,用户任务在系统中定义了六种状态,一种是运行状态,一种是挂起状态,还有剩下的四种是等待事件的状态。那么当一个用户任务完成后,调用延时函数OSTimeDly()时,该任务在任务就绪表中被注销就绪状态并赋予延时属性,但是其任务控制块没有被剥夺,任务状态标志OS_TASK_STAT也还是就绪状态没有被更改(这个用户任务不使用事件)。那么从任务就绪表的角度来看,这个任务不能不调度,不是就绪任务,从任务控制块的角度来讲其状态标志又指明他是一个就绪任务。这个时候任务是什么状态呢?从这角度讲,系统是不是应该再定义个延时状态?
2:为什么要给每个事件控制块构造一个任务等待表呢?前面的任务就绪表只需要一个就可以了,我观察在系统操作事件的函数中,都只对当前任务在等待任务表中操作,那么每个事件的等待任务表中应该总是至多只有一个标志位被置1。那么何必浪费内存,直接建立一个总的等待任务表,然后在事件操作函数中用任务的优先级作为参数不就好了么?
不解中,求教各位。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-1-7 00:18:58 | 显示全部楼层
额。。。半个月没人回帖。。。。都这么低调嘛?

出0入0汤圆

发表于 2012-1-10 12:10:11 | 显示全部楼层
我来答:
1)OSTimeDly() 会将调用此函数的任务从就绪表中摘除,并赋予延时属性,然后进行任务切换,其任务控制块会被剥夺。 虽然任务状态标志OS_TASK_STAT也还是就绪状态没有被更改,但是任务就绪表中没有这个任务,所以这个任务无法被调度。
在OSTimeTick (void)中判断延时到时候会将此任务重新放入任务就绪表中,然后在系统时钟中断退出时进行任务切换,回复原先的运行状态。

2)为什么要给每个事件控制块构造一个任务等待表呢?
  因为等待一个事件,一个资源的可能是好几个任务,这个任务等待表中列出了等待此事件的所有任务,ucos会选择其中任务优先级最高的任务,将其放入任务就绪表。
比如一个事件,假设为厕所,厕所门外有员工,项目经理,总经理依次排队,由于总经理具有最高的职位(类似ucos的优先级),此时最先使用厕所的就是总经理,尽管他排在队伍的最后。

出0入0汤圆

 楼主| 发表于 2012-1-10 12:35:20 | 显示全部楼层
回复【2楼】2005xxg  
-----------------------------------------------------------------------

继续请教楼上,这几天第二点弄懂了,第一点问题的关键在于不是任务被延时后能不能运行的问题,而是被延时后该任务处于何种状态的问题,如果说是等待状态,系统定义的等待状态只有等待事件的那几种状态,而没有等待延时的状态吧?而且此时TCB里的状态参数还是OS_STAT_RDY,这样说来不是有矛盾吗?

出0入0汤圆

发表于 2012-1-10 13:09:28 | 显示全部楼层
“第一点问题的关键在于不是任务被延时后能不能运行的问题,而是被延时后该任务处于何种状态的问题”
此时,严格讲是处于等待状态,尽管TCB里的状态参数还是OS_STAT_RDY,因为任务已经不在任务就绪表中了。
读一下源代码,就知道了,不必纠结于ucos的OS_STAT_RDY。

出0入0汤圆

 楼主| 发表于 2012-1-11 13:58:38 | 显示全部楼层
回复【4楼】2005xxg  
-----------------------------------------------------------------------
的确是这样,理论上这种情况下任务应该是属于等待状态了,为了与等待事件的状态区分,可以称之为等待延时的状态,因为两者原理是不一样的。
呵呵,最近在看2.52版的代码,一路代码读下来,缺陷还是很多的。即使是这种大牛编写的程序,多多少少也有不尽如人意的地方,难怪总是要修修补补。看来世界上本来就没有完美的东西吧,技术也是如此。不过是想把问题搞清楚,知其然也要知其所以然。谢谢楼上的指教。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 06:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表