μc/os笔记

来源:互联网 发布:引用百度地图js 编辑:程序博客网 时间:2024/05/16 11:10

                              μc/os总结

什么是操作系统

操作系统os(operating system)是裸机上的一层软件。操作系统是计算机系统中最重要的系统软件,是硬件的第一层封装与抽象,在计算机系统中占据着重要的地位,所有其他的系统软件与应用软件都依赖于操作系统的支持与服务。除提供编程接口,操作系统还承担着任务管理,事件管理和消息通信,CPU管理,内存管理,IO管理等核心功能。

 

 

 

实时系统的概念

   硬实时:指逻辑和时序出现偏差将会引起严重后果的系统

        应用:汽车安全囊

              汽车ABS防抱死系统

  在硬实时系统中,各任务不仅要执行无误而且要做到准时。大多数实时系统是二者结合

   软实时:

        应用:CD播放器

              MP4

 

 

嵌入式系统的应用

通讯类                                  过程控制

1.Switch Hurb                             1.食品加工                           

2.路由器                                 2.化工厂

 

 

机器人

 

航空航天

1.飞机管理系统

2.武器系统

3.喷气发动机控制

 

汽车业

1.发动机控制

2.防抱死系统(ABS

 

办公自动化

1.传真机

2.复印机

 

民用消费品

1.微波炉

2.洗碗机

3.洗衣机

4.稳温调机器

 

计算机外设

1.打印机

2.计算机终端

3.扫描仪

4.调制解调器

 

前后台系统

前后台系统,即计算机前后台系统,早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备,在这种情况下,通常把嵌入式程序非为两部分。

后台程序:While(1)中的程序

前台程序:又叫中断级程序,即中断服务程序

 

 

μc/os简介

   μc/osMicro Control Operation System)是一个可基于ROM运行的,可裁剪的,抢占式,实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,适合很多商业操作系统性能相当的实时操作系统(RTOS

   1992年在《嵌入式系统编程》杂志连载

推荐书籍《嵌入式实时操作系统μc/osⅢ》

 

实时系统——临界代码段

代码的临界段也称为临界区,指处理时不可分割的代码段。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码的执行,在进入临界段之前要关中断,而临界段代码执行完以后要立即开中断。

 

实时系统——任务

一个任务,也称作一个线程,是一个简单的线程,该程序可以认为CPU完全只属于该程序自己。实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,每个人物被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。

 

 

 

实时系统——任务状态

   典型地,每个人物都是一个无限的循环。每个人物都处在以下5种状态之一的状态下,这5种状态是休眠态,就绪态,运行态,挂起态(等待某一事件发生)和被中断态,休眠态相当于该任务驻留在内存中,但并不被多任务内核所调度。就绪意味着该任务已经准备好。可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行,运行太的任务是指该任务掌握了CPU的控制权,正在运行中。挂起状态也可以叫做等待事件态WAITING,指该任务在等待,等待某一事件的发生(例如等待某外设的I/O操作,等待某共享资源的由暂不能使用变成能使用状态,等待定时脉冲的到来或等待超时信号的到来以结束目前的等待,等等)。最后,发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。

 

 

 

实时系统——任务切换

1.保存任务1的工作状态

2.载入任务2的工作状态

3.跳转到任务2的地址空间执行

可见,任务的切换就是当前任务的状态切换

 

 

实时系统——内核

   多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务器是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务。由实时内核来管理他们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了ROM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来时相当厉害的。内核本身对CPU的占用时间一般是25个百分点之间。

 

实时系统——调度

调度(Scheduler),这是内核的主要职责之一,就是要决定该轮到哪个任务先运行了。多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同被赋予一定的优先级。基于优先级的调度法指,CPU总是让处于就绪状态的优先级最高的任务先运行。

 

 

 

实时系统——内核是否可剥夺?

不可剥夺型内核

1.不可剥夺型内核要求每个任务自我放弃CPU的所有权

2.直到该任务主动放弃CPU的使用权,那个高优先级的任务才能获得CPU的使用权

3.商业软件几乎没有不可剥夺型内核

可剥夺型内核

1.使用刻薄多型内核,最高优先级的任务什么时候可以执行

2.使用可剥夺型内核使得任务级响应时间得以优化

3.可剥夺型内核总是让就绪态的高优先级的任务先运行

 

实时系统——可重入性

可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以保护。

51单片机中,要实现函数的可重入,需要在函数名后面加关键字reentrant

 

实时系统——时间片轮转法

   当两个或两个以上的任务有同样优先级,内核允许一个任务运行事先确定的一段时间,叫做时间额度(quantum),然后切换给另一个任务。也叫做时间片调度。内核在满足一下条件时,把CPU控制权交给下一个任务就绪态的任务:

当前任务已无事可做

当前任务在时间片还没结束时已经完成了

目前,μc/os-Ⅱ不支持时间片轮番调度法。应用程序中各任务的优先级必须互不相同。

μc/os-Ⅲ支持时间片轮转法

 

 

实时系统——任务间的通讯

1.通过全局变量

在使用全局变量的过程中要注意,要保证全局变量的独享性

2.发小心给另一个任务

使用邮箱或消息队列

 

实时系统——消息邮箱

通过内核服务可以给任务发送信息。典型的消息邮箱也称作交换消息,是用一个指针型变量,通过内核服务,一个任务或一个中断服务程序可以把一则消息(即一个指针)放到邮箱里去。同样,一个或多个任务可以通过内核服务接收这则消息。发送消息的任务和和接收消息的任务约定,该指针指向的内容就是那则消息。

每个邮箱有相应的正在等待消息的任务列表,要得到消息的任务会因为邮箱是空的而被挂起,且被记录到等待消息的任务表中,直到收到消息。一般的说,内核允许用户定义等待超时,等待消息的时间超过了,仍然没有收到该消息,这任务进入就绪态,并返回出错信息,报告等待超时错误。消息放入邮箱后,或者是把消息传给等待消息的任务表中优先级最高的那个任务(基于优先级),或者是将消息传给最先开始等待消息的任务(基于先进先出)。

 

实时系统——消息队列

消息队列用于对任务发消息。消息队列实际上是邮箱陈列。

通过内核提供的服务,任务或中断服务子程序可以将一条消息(该消息的指针)放入消息队列。同样,一个或多个任务可以通过内核服务从消息队列中得到消息。发送和接收消息的任务约定,传递的消息实际上是传递的指针指向的内容。通常,先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入消息队列的消息,即先进先出原则(FIFO)。然而,μc/os-Ⅱ也允许使用后进先出方式(LIFO)。

像使用邮箱那样,当一个以上的任务要从消息队列接收消息时,每个消息队列有一张等待纤细任务的等待列表(Waiting List)。如果消息队列中没有消息,即消息队列是空等待消息的任务就被挂起放入等待消息列表中,直到有消息到来。通常,内核允许等待消息的任务定义等待超时的时间。如果限定时间内任务没有收到消息,该任务就进入就绪态并开始运行,同时返回出错代码指出出错等待超时错误,一旦一则消息放入消息队列,该消息将传给等待消息的任务中优先级最高的那个任务,或是最先进入等待消息任务列表的任务。

 

 

实时系统——时钟节拍

    时钟节拍是特定的周期性中断。这个中断可以看作是系统心脏的脉动。中断之间的时间间隔取决于不同的应用,一般在10ms200ms之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待时间发生时,提供等待超时的依据。时钟节拍率越快,系统的额外开销就越大。

0 0