ucos_II---小巧玲珑的实时操作系统(概念篇)(纯手打概要)

嵌入式实时操作系统

一些概念:

1,代码的临界段
      代码的临界段也成为“临界区”,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断介入。为确保临界段代码的执行,在进入临界段之前要关闭中断,而临界段代码执行完后要立即开启中断。
2,多任务
      多任务运行的实现实际是靠CPU在许多任务之间转换、调度。cpu只有一个,轮番服务于一系列任务中的某一个。在实际应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化,从而更容易设计与维护。
3,任务
      即线程。在任务执行的过程中,该程序可以认为CPU只属于自己。实时操作系统中,任务一般都有各自的优先级,有自己的cpu寄存器和自己的栈空间,且每个任务都是一个死循环。
      任务有5种状态:
(1)休眠态。相当于该任务驻留在内存中,但并不被多任务Kernel所调度;
(2)就绪态。该任务已准备好可以运行了,由于优先级比正在执行的任务低,暂时不能运行;
(3)运行态。任务掌握了cpu的控制权,正在执行;
(4)挂起态。也可以叫任务等待,等待某事件发生(IO操作、脉冲、超时信号等);
(5)被中断态。cpu提供了中断服务,该任务被打断。
4,不可剥夺型内核
      此类内核要求“每个任务都有自我放弃CPU的所有权”,由程序自己决定什么时候释放CPU。
5,可剥夺型内核
      当系统相应时间很重要时,可以由内核决定CPU的使用权。UCOSII便是其中之一。
6,可重入性
      由于函数不是只被一个任务所调用,为了防止数据的破坏,故引入可重入型函数。特点:只使用局部变量;若要用全局变量,则要对全局变量予以保护。
7,时间片轮番调度法(UCOSII不支持,UCOSIII支持)
     当两个或两个以上任务有同样优先级,内核允许一个任务运行“事先确定的一段时间”,叫做“时间额度”,然后切换给另一个任务。也可以叫做时间片调度。
8,信号量(Semaphores)
       信号量实际上是一种约定机制。主要用于:
(1)控制共享资源的使用权(满足互斥条件);
(2)标志某事件的发生;
(3)使两个任务的行为同步。
       信号像是一把钥匙,任务要运行,得先得到这把钥匙。如果信号已被别的任务占用,该任务只得被挂起,直到信号被当前使用者释放。
       信号是只有两个值的变量,信号量是计数式的。只取两个值的信号是只有两个值0和1的量,因此叫做信号量。
       信号量三种操作:建立信号量(create),等待信号量(pend),发送信号量(post)。
       信号量初始化(create)时要给信号量赋初始值,等待信号量的任务表应清为空。
       想要得到信号量的任务执行等待(pend)操作。如果该信号量有效(>0),则信号量减去1,任务得以继续运行。如果信号量的值为0,等待信号量的任务就被列入等待信号量任务表。
       任务以发送号操作(post)释放信号量。如果没有任务在等待信号量,信号量的值仅仅是简单的加1。如果有任务在等待信号量,那么就会有一个任务进入就绪态,信号量的值就不加1。于是钥匙给了等待信号量的诸多任务中的一个。至于给了哪个任务,要看内核Kernel是如何调度的。收到信号量的任务可能是1、2中的一个:1,等待信号量任务中优先级最高的;2,最早开始等待信号量的那个任务,FIFO(先进先出原则)。
9,任务间的通讯
      有时很需要任务间的或中断服务与任务之间的通讯。这种消息传递称为任务间的通讯。任务间信息的传递有两个途径:通过全程变量或发消息给另一个任务。
       用全程变量时,必须保证每个任务或中断服务程序独享该变量。中断服务中保证独享的唯一办法是关中断。如果两个任务共享某变量,各任务实现独享该变量的办法可以是关中断再开中断,或使用信号量。但是,任务只能通过全程变量与中断服务程序通讯,而任务并不知道什么时候全程变量被中断服务程序修改了,除非中断程序以信号量方式向任务发信号或者该任务以查询方式不断周期性地查询变量的值。为了避免这种情况,便引入了邮箱或消息队列。
10,消息邮箱
        通过内核服务可以给任务发送消息。典型的消息邮箱也称作交换消息,是用一个指针型变量,通过内核服务,一个任务或一个中断服务程序可以把一个消息(即一个指针)放到邮箱里去。同样,一个或多个任务可以通过内核服务接收这则消息。发送消息的任务和接收消息的任务约定,该指针指向的内容就是这则消息。
        内核一般提供以下邮箱服务:
        (1)邮箱内消息的内容初始化,邮箱里最初可以有,也可以没有消息;
        (2)将消息放入邮箱(post);
        (3)等待有消息进入邮箱(pend);
        (4)如果邮箱内有消息,就接收这则消息。如果没有消息,则任务并不被挂起,用返回代码表示调用结果,是收到了消息还是没有收到消息。
11,消息队列
        消息队列用于给任务发送消息。消息队列实际上是邮箱队列。服务过程同邮箱大同小异。
12,中断
        中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被识别,CPU保存部分(或全部)现场(contex)即部分或全部寄存器的值,跳转到专门的子程序(中断服务函数),称为“中断服务子程序”(ISR)。
中断服务子程序做事件处理,处理完成后,程序回到:
       (1)在前后台系统,程序回到后台程序;
       (2)对不可剥夺型内核而言,程序回到被中断了的任务;
       (3)对可剥夺型内核而言,让进入就绪态的优先级最高的任务运行。
13,时钟节拍
        特定的周期性中断。这个中断可以看作是系统心脏的脉动。中断之间的时间间隔取决于不同的应用,一般在10ms--200ms之间。时钟的节拍式中断使得内核可以将任务延时若干整数时钟节拍,以及当任务等待时间发生时,提供等待超时的依据。时钟节拍越快,系统的额外开销就越大。     
14,对存储器的需求
        使用多任务内核时,总代码量 = 应用程序代码量 + 内核代码量。
        因为每个任务都是独立运行的,必须给每个任务提供单独的栈空间(RAM)。应用程序设计人员决定分配给每个任务多少栈空间时,应该尽可能使之接近实际需求量。栈空间的大小不仅仅要计算任务本身的需求(局部变量、函数调用等),还需要计算最多中断嵌套层数(保护寄存器、中断服务程序中的局部变量等)。
        RAM总需求 = 应用程序的RAM需求 + (任务栈需求 + 最大中断嵌套栈需求)*任务数。
15,优缺点
        RTOS使得设计和扩展变得容易。
        RAM和ROM的开销增大,CPU增加2--4个百分点额外负荷。











  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值