|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2008-9-6 10:28:10
|
显示全部楼层
ucos-II的深刻理解 转贴
岳老师的大脑好比一个CPU(性能很好,P4++,/*类比 C->C++*/ ),它上面跑了个实时操作系统,分时操作系统不能满足岳老师的快速响应外部事件的要求。为了满足实时性的要求,这个实时操作系统内核一定是可剥夺内核型的。移植个操作系统是个好事啊,可以使得任务能够得到更好的维护,比起前后台系统,不知道要方便多少倍。最关键的问题是这个操作系统,是学校领导们移植到岳老师的大脑里的,任务的优先级,及具体的任务是他们一手制定好的。
人事处的事算成一个任务,这个任务的优先级为0,我噻,最高优先级。其他的任务包括学生的事情只能排在它之后了。
这个人事处的任务写的有点问题,任务的第一行语句就是OS_ENTER_CRITICAL();我靠,任务进入临界代码段了,关中断了。直到任务的倒数第二行才是OS_EXIT_CRITICAL();任务的最后一行是OSTimeDlyHMSM(16,0,0,0);任务的倒数第二行语句的意思是开中断了,但是这时开中断已经没用了,这个人事处的任务虽说是个死循环,但是它执行一次的时间特别长,需要8个小时,在这整整8个小时的时间内是不允许中断的。总算经过人事处任务的长达8个小时的运行,执行到任务的最后一行了,OSTimeDlyHMSM(16,0,0,0);学校的领导总算良心发泄了,让人事处的任务主动放弃了CPU的占用权,延时了16个小时,也就是这个任务被挂起了,等待16个小时后,继续运行。这个延时不同于for,或while循环的延时,后者还是让CPU在不停的进行无谓的运行,以来等待这段延时时间。要知道啊,要不是人事处的任务主动放弃了CPU的占用权,别的任务是不可能得到运行的啊,因为人事处任务的优先级是最高的,对于可剥夺内核的操作系统,系统总让就绪状态优先级最高的任务处于运行状态。
学校的领导可没这么傻,让岳老师在这16个小时内可以不受干扰的做自己的事情,他们另外开了几个后门任务,而且除了人事处任务,后门任务,其他的任务是不允许关中断的。别小看了这些后门任务,它们平时什么都不做,被挂起了,但是这种挂起不是休眠状态,它们在等待信号量。那么这些信号量是谁发的呢,不是别人,正是学校的领导。尽管这16个小时内,岳老师可以做其他的事情,但是学校的领导的一个电话,可以算是中断,这个中断发了信号量,完了!那些后门任务被激活了!!!而且这些后门的程序的优先级也很高,搞的其他的任务包括学生的任务没有机会再次运行啊。可怜的学生任务啊,被后门任务中断后,一直处于就绪状态,没机会运行啊!
那么学生任务有奋起反抗的机会吗?没的。这些学生任务的代码中没有OSTaskDel(0);这条语句。这条语句可以用来删除人事处的任务,但是可惜没有。被删除后的任务,CPU再也不会去执行这个任务了。倒是人事处的任务中可以删除学生任务,唉,可怜的学生任务,不但没什么机会去运行,反倒到最后被人事处的任务给删除了。
最终岳老师要睡觉了,CPU要休息了,这时Idle任务运行了。岳老师第二天早上刚起床,人事处的任务的延时16个小时的时间到了,立即从被挂起的状态变为就绪的状态,立即引发一次任务调度,因为人事处的任务的优先级最高,这个任务立即抢占了CPU,开始运行。
注: 文中岳老师为某校老师,名字虚构,切勿对号入座,切切!
上文中的嵌入式操作系统是UCOSII,因为我是学控制的,不是学计算机的,学计算机的人由于学过操作系统原理,所以可以将UCOSII当成课外读物看看,对于学控制的人来说,由于一开始操作系统的原理不懂,所以看UCOSII的话,会看的云里雾里的。我的经验是不要首先去看那本邵贝贝的经典书《嵌入式实时操作系统UCOSII》,不是说那本说讲的不好,只是说那本书不适合没有一点操作系统原理基础的人去看,如果你硬着头皮去看的话,估计你看了个一两个星期你都搞不清楚。这本经典的书写的过于详细,适合于当作手册去查。整本书没有一条红线贯穿始终,也没有具体的例子去阐述它讲的原理。推荐一本书《嵌入式实时操作系统μC/OS-II原理及应用》 任哲编著,既小又薄的一本书,讲的非常的清楚。特别是书中讲任务间相互通信那块,讲的太棒了!!!
我大概花了2,3天的时间就把这个UCOSII最核心的东东看懂了,基本上就可以写任务了,这时候会涉及到一些细节的问题,那本巨经典的厚书就可以派上用场了。这时候你会发现那本经典的书,的确是经典。 |
|