电子专业出身,很少对操作系统有个彻底的了解,从开始学习uCOS-II操作系统的使用已经有一段时间,其中碰到了很多问题,有些想了很长时间才搞明白,期间没有人指导和交流,路总是走的那么艰难。今天把自己学习过程中的难点或者是学习过程中遇到的问题写出来,与大家一起共勉。在此尽量不要讨论一些概念,主要是谈论在应用中的理解。
1 怎么了解操作系统的?
先从学单片机说起,刚开始学习一般都是照葫芦画瓢,慢慢有个自己的了解,然后加入自己的想法。开始我们写程序一般都是一个主函数里加一个while循环结构。
#include "......h"
void main()
{
while(1)
{
function1();功能1;
function2();功能2;
function3();功能3;
。。。。。。。
}
}
就是通过一个死循环,在循环里面几个各个功能函数反复执行,一般单片机的执行时间都达到微秒级,当我们在观察各个功能的时候好像都是实时执行的一样。例如在一个电路板上实现:
{
流水灯;//让几个LED不断的实现各种闪烁。
数码管显示;//让数码根据键盘的操作显示
键盘检测; //捕捉按键的输入。
} 不管流水灯执行的时间还是数码管控制显示以及键盘检测的时间都是很短的,只要程序写好了,我们眼睛是分不出他们的间隔的。在程序中不断来回扫描这三个函数来显示所要求的功能。另外可以根据单片机的功能,加入一些中断处理,以来提高实时性,这种说的专业一点就是前后台系统。说实话这种系统效率也是最高的,代码也能写精简。但是不足之处上面所说的各个功能都是按顺序执行的,不管一个函数的功能再如何重要,也不能抢到前面去执行。
程序运行原理:从ROM中按照地址顺序一条一条的读出指令来实现功能,其中PC记录当前执行的位置,也就是说它走到哪就执行到哪里。若是改变它的位置(或者说地址),就可以改变函数的执行顺序。通过这里我们可以想到是否根据一种算法来实现各个函数功能的分配。
到这里,不敢对操作系统的理论做过多的探讨,就以uCOS-II为例,先看解释“一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核”。用我的话来说,我们可以对这个系统进行做相关的改动处理,只要你能改好,可以把重要的任务抢先执行(上面说的功能函数),实时多任务就不用说了。在这里重要一点就是它自动先重要的任务(功能)抢先去执行。也就是说它实现了这么一个功能。根据相关的判断自动分配任务来处理。
在这里,我们到很多书籍上讲操作系统时候一般都换一个框形图,解释操作系统是底层硬件和上层应用程序的联系平台,uCOS我感觉也差不多,当然底层硬件的驱动还需要我们自己来写好。UCOS它帮我们实现任务的调度,就是计算怎样去先实现重要的任务,分配好时钟节拍,相当于我们跳动的心脏,若是它乱了,那这个系统就出问题,跟人一样。以及各个任务间如何进行通信,都由这个系统内核来协调处理。相当于我们聘请了一个高级管理者,我们给它说好后,它能按照我们意愿让单片机来工作。
今天先写到这里,明天来探讨它到底是如何实现的。
|