uC/OS-II

      1、uC/OS-II内核,代码公开的嵌入式实时操作系统,代码规模不大,实现抢占式任务调度和多任务间通信等功能。

      2、uC/OS-II是一个基本完整的嵌入式操作系统解决方案套件,包括uC/TCP-IP(IP协议栈)、uC/FS(文件系统)、uC/GUI(图形界面)、uC/USB(USB驱动)和uC/FL(Flash加载器)的部件,但是这些部件是不公开代码的。还有些重要部件如嵌入式数据库、POSIX兼容性接口、常用设备的驱动模块等,在网上可找到对应的代码包,进行移植。

      3、RTOS(Real Time operation System,实时操作系统)与分时操作系统(UNIX就是)相对。当分时操作系统允许对中断处理的优先级做调整,使系统对外部事件的响应速度保证不大于某一特定时间间隔时,就构成了实施操作系统。实时特点:实时性(响应时间必须在限定的事件范围内);抢占式调度具有异步响应能力(异步事件是指无一定时序关系,随机发生的事件。);内存锁定(减少为获得该数据而访问磁盘的时间);具有优先级调度机制(允许用户定义中断和任务的优先级);同步/互斥机制(提供对共享数据的同步和互斥手段);

 实时操作系统对外部事件和信号在限定的时间范围内做出响应,它所强调的是实时性、可靠性和灵活性。实时操作系统一般与实时应用软件相结合成为有机整体:用实时操作系统来管理和调度实时应用软件的各项任务,为应用软件提供良好的运行和开发环境。一般来说,实时操作系统以库的形式提供系统调用来实现对上层实时应用程序的支持;而应用程序通过链接实时操作系统的来实现实时任务调度

     4.实时操作系统的关键技术指标:1、任务调度算法(系统实时性和其多任务调度能力);2、上下文切换时间(任务转移);3、系统确定性(系统调用运行时间是可预测的,但这不意味着无论系统的负载如何,所有的系统调用都总是执行一个固定长度的时间,而是只系统调用的最大执行时间可以确定的);4、最小内存开销;5、最大中断禁止时间;6、最大中断禁止时间:当操作系统在执行某些系统调动时,是需要关闭中断响应的,既中断被屏蔽,只有当操作系统重新回到用户态时才重新响应外部中断请求,这一过程所需要的最大时间就是最大中断禁止时间(最大中断禁止时间越大,系统丢掉中断的可能性越大)。

    5、实时操作系统的基本术语:

     硬实时(Hard Real-Time):通常将具有优先级驱动的,时间确定性的,可抢占调度的系统成为硬实时系统。所谓“硬实时”,主要强调对实时性和确定性的要求较高。

              优先级驱动(Priority-Driven):在一个多任务系统中,正在运行任务总是优先级最高的任务。在任何给定的事件内,总是把处理器分配给优先级最高的任务。

     优先级反转(Priority Inversion):当一个任务等待比它优先级低的任务释放资源而被阻塞时,这种现象被称为优先级发转。优先级继承技术可以解决优先级反转问题。

     优先级继承(Priorty-Inheritance):用来解决优先级反转问题的技术。当优先级反转发生时,较低优先级任务的优先级暂时提高,以匹配较高优先级任务的优先级。这样,就可以使较低优先级任务尽快地执行并释放较高优先级任务所需要的资源。

             实时执行体(Realtime Executive):包括一套支持实时系统所需的机制,如多任务、CPU调度、通信和存储分配等,在嵌入式应用中,这一套机制被称为实时操作系统或实时执行体或实时内核。

            重调度过程(Rescheduling Procedure):重调度过程是判断任务优先级和执行状态的过程。

            任务(Task):相当于操作系统中的进程。

            任务上下文(Task context):任务上下文是指一个未运行的任务状态,如独占指针、计数器、内存字段和通用寄存器等。

           调度延时(Scheduling Latency):指当一个事件从引起更高优先级的任务就绪到这个任务开始运行之间的时间。简言之,就是一个任务被触发后,有就绪到开始运行的时间。

           可伸缩的体系结构(Scalable Architecture):指一个软系统能够支持多种应用而无需再借口上作很大的变动。这种结构往往提供可选用的系统组件,供开发者“量体裁衣”。

            中断延时(Interrupt Latency):从中断发生到开始执行中断处理程序的这一段时间。

            互斥(Mutual Exclusion):是用于控制多任务对共享数据进行顺序访问的同步机制。在多任务应用中,当两个或更多的任务同时访问同一数据区时,就会造成访问冲突。互斥能使它们依次访问共享数据而不引起冲突。

            抢占(Preeptive):指当系统处于核心态的内核运行时,允许任务重新调度。也就是说,一个正在执行的任务可以被打断而让另一个任务运行,这提高了应用对外部中断的响应,许多操作系统都是以抢占方式运行。但这并不是说调度在任何时候都是可以发生的。例如,当实时操作系统的一个任务正在通过系统调用访问共享数据时,重新调度和中断都是不允许的。

        6.应用uC/OS-II目的是要在其之上开发应用程序。uC/OS-II应用程序的基本结构以及与应用程序开发相关的知识。    

 1 Void task(void *pdata)
 2 {
 3      INT8U err;
 4      InitTimer();
 5      While(1)
 6      {
 7           ........                //应用程序代码
 8           OSTimeDly(1);  //可选
 9      
10     }       
11 
12 }

 

      系统运行时,uC/OS-ii会为每一个任务保留一个堆栈空间。系统在任务切换时要恢复上下文并执行一条返回指令,如果允许并返回,可能会破坏系统的堆栈空间,给程序运行带来不确定性,每一个任务必须被写成无限循环的形式,但任务的无限循环,并不意味着任务永远占有CPU的使用权,任务可以通过ISP或调用操作系统API(如任务挂起API),使任务放弃对CPU的使用权

      值得一提的是InitTimer()函数,有系统提供,开发者需要在优先级最高的任务内调用它,且不能再for循环内调用而且该函数和所使用的CPU有关,每种系统都有自己的Timer初始化程序。强调不能再OSInit()或OSStart内调用Timer初始化函数InitTimer(),那样会破坏系统的可移植性,同时也会带来性能上的损失。比较折中的办法就是如上述,在优先级最高的任务内调用,这样可保证当OSStart()调用系统内部函数OSStartHighRdy()开始多任务后,首先执行的是Timer初始化程序;或转么执行一个优先级最高的任务,只做一件事,那就是执行Timer初始化,之后通过条用OSTaskSuppend()将自己挂起,永远不再执行,不过这样会浪费一个TCB空间,对于那些RAM内存空间有限的系统来说,应该尽量不用。

    uC/OC-II是多任务内核,函数可能被多个任务调用,因此需要考虑函数的可重入性,要保证函数代码的可重入性,只要不使用全局变量即可

   利用uC/OC-II的消息队列可实现消息驱动程序。在编写任务代码时,先完成任务初始化,然后再消息循环过程中在某个消息上等待,当其他任务或中断服务程序返回消息后,根据消息内容调用相应的函数模块,函数调用后,重新回到消息循环,继续等待消息。

 

posted @ 2013-03-06 16:49  奔流聚海  阅读(2077)  评论(0编辑  收藏  举报