一步一步教你使用uCOS-II( 六 )


可剥夺型内核的工作过程是这样的:

一步一步教你使用uCOS-II

文章插图
UCOS-II 任务调度
任务调度是内核的主要职责之一,就是要决定该轮到哪个任务运行了 。多数实时内核是基于优先级调度法的,UCOS也不例外 。每个任务根据其重要程度的不同被赋予一定的优先级 。基于优先级的调度法指,CPU总是让处在就绪态的优先级最高的任务先运行 。然而,究竟何时让高优先级任务掌握CPU 的使用权,有两种不同的情况,这要看用的是什么类型的内核,是不可剥夺型的还是可剥夺型内核 。
上一次咱们已经介绍了可剥夺型内核和不可剥夺型内核的工作过程了 。在此不再赘述!
当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU寄存器中的全部内容 。这些内容保存在任务的当前状况保存区,也就是任务自己的栈区之中,上一次讨论的内容中有这个图示 。入栈工作完成以后,就是把下一个将要运行的任务的当前状况从该任务的栈中重新装入 CPU 的寄存器,并开始下一个任务的运行 。这个过程叫做任务切换 。任务切换过程增加了应用程序的额外负荷 。CPU的内部寄存器越多,额外负荷就越重 。做任务切换所需要的时间取决于CPU有多少寄存器要入栈 。实时内核的性能不应该以每秒钟能做多少次任务切换来评价 。而是要看OS总的关中断时间 。总的关中断时间越短说明这个内核的实时性越好 。这个问题在前面一个坛友的问题中我做了详细的描述,有兴趣的朋友可以在UCOS这个版块找找这个帖子 。
任务调度的算法有很多种 。一种是基于优先级的 。一种是基于时间片的 。这两种算法在邵贝贝教授翻译的《UCOS-II内核详解》这本书中有详细解释 。我就不再重复 。如果坛子里有朋友对此有什么不明白 。可以在这里留言 。咱们再讨论 。
UCOS-II的文件结构
前面我们对UCOS的基础知识做了了解,其中有些地方由于邵贝贝翻译的树上讲解的很少我就没有班门弄斧,大家可以结合那本书来看 。有问题或不明白的在这里讨论,欢迎大家剔除问题 。
这次我们主要了解UCOS-II的文件结构 。等对UCOS文件结构了解以后,我们就逐一的去讲解其各章的重点和难点,达到在短时间内学会使用UCOS 。
一步一步教你使用uCOS-II

文章插图
我们利用这张图片把UCOS的内部做一个解剖,我们可以清楚的看到UCOS内核的结构及层次,在这个图的最下面是我们使用的硬件,就是我们的移植平台,比如系列的最小系统版、51最小系统版 。呵呵,我本人觉得把UCOS移植到51上的意义不大 。只是学习可以,使用我就不建议了!从图中我们可以知道,要想移植UCOS你的硬件平台必须具备一个定时器,也就是上图中的TIMER 。这个TIMER是用来给UCOS提供时钟节拍的,相当于我们人的心跳 。如果没有这个TIMER,统统就无法运行 。
再往上就是软件了,软件的第一层是我们移植的重点,这三个文件内主要包括一些与处理器相关的代码,在后面我们我们再讲解移植过程的时候会详细的讨论到这三个文件 。
在往上左侧就是系统内核源码的各个文件 。有兴趣的坛友可以参考邵贝贝教授翻译的书进行深入学习,由于我在这里的主要任务是告诉大家如何使用UCOS,故不再过多的讲解源码部分,只是告诉大家如何使用即可 。当然,如果你在研究过程中遇到问题可以拿出来和大家共同讨论,右侧是系统的配置文件,相对比较简单,主要涉及到一些功能的裁剪 。
最上层是我们的应用软件,相当于我们在电脑上使用的软件等,当然这里是你自己的任务代码 。