我觉得学习一个系统特别是嵌入式操作系统,首先应该了解它的缺点,知道了它的缺点之后,再看适不适合自己的项目或者学习,这样能够更加有效的快速的了解这个系统,可以达到事半功倍的效果。当然一个系统的优点我们也是必须得明确的,如此我们才能更好的运用这个系统。
所以我首先介绍下uC/OS的缺点:
1、缺少技术支持,支持他的软件也比较少。
2、与商业软件相比功能比较弱,最大只支持64个任务,实际我们开发最大都只能应用56个任务,因为它最低优先级的四个被系统应用了最高优先级的四个留着以后扩展用了。
3、不支持时间片轮转,对应用开发的支持也不是很够。
以上是uC/OS的一些缺点,当然认识到缺点之后我们就要去看看它到底有什么优点可以让我们去使用它学习它呢?
优点有:
uC/OS是一个完整的,可移植、可固化、可裁减的抢占式实时多任务操作系统内核。主要用ANSI的C语言编写,少部分代码是汇编语言。uC/OS主要有以下特点:
1、可移植性 可以移植到多个CPU上,包括三菱单片机。
2、可固化 可以固化到嵌入式系统中
3、可裁减 可以定制uC/OS,使用少量的系统服务
4、可剥夺性 uC/OS是完全可剥夺的实时内核,uC/OS总是运行优先级最高的就绪任务。
5、多任务运行 uC/OS可以管理最多64个任务。不支持时间片轮转调度法,所以要求每个任务的优先级不一样。
6、可确定性 uC/OS的函数调用和系统服务的执行时间可以确定。
7、任务栈 每个任务都有自己的单独的栈,而且每个任务栈空间的大小可以不一样。
8、系统服务 uC/OS有很多系统服务,如信号量、时间标志、消息邮箱、消息队列、时间管理等等。
uC/OS-II内核结构
uC/OS-II是以源代码形式提供的实时操作系统内核,其包含的文件结构如下:
说明:
基于uC/OS-II操作系统进行应用系统时,设计任务的主要任务是将系统合理划分成多个任务,并由RTOS进行调度,任务之间使用uC/OS-II提供的系统服务进行通信,以配合实现应用系统的功能。上图中应用代码部分主要是设计人员设计的业务代码。
与前后台系统一样,基于uC/OS-II的多任务系统也有一个main主函数,main函数由编译器所带的C启动程序调用。在main主函数中主要实现uC/OS-II的初始化OSInit()、任务创建、一些任务通信方法的创建、uC/OS-II的多任务启动OSStart()等常规操作。另外,还有一些应用程序相关的初始化操作,例如:硬件初始化、数据结构初始化等。
在使用uC/OS-II提供的任何功能之前,必须先调用OSInit()函数进行初始化。在main主函数中调用OSStart()启动多任务之前,至少要先建立一个任务。否则应用程序会崩溃。
OSInit()初始化uC/OS-II所有的变量和数据结构,并建立空闲任务OS_TaskIdle(),这个任务总是处于就绪态。