缩短μC/OS-II实时内核中断关闭时间的方法设计

发布者:BlossomSunrise最新更新时间:2012-05-07 来源: eefocus关键字:实时操作系统  中断时间  RTEMS 手机看文章 扫描二维码
随时随地手机看文章
引 言   

在实时操作系统中,由于是多任务的并发运行,所以在进入一些临界区时为了保证多任务的正常运行要关中断。而最大关中断时间是衡量一个实时操作系统性能的重要指标,因为外部的输入一般都是通过中断方式来通知系统的,系统如果关中断时间长,必然不能及时接收中断,对中断的及时处理就更谈不上。

更重要的是,有些应用场合对关中断的时间有非常严格的要求。例如,在电力系统微机继电保护装置中,对电流A/D采样时,为了保障对采样值的正确处理,定时中断的每一个周期时间都必须及时采样。试想,如果定时器设置的周期时间到,定时器中断产生,但恰恰这时系统处于关中断时间,系统就不能及时进行采样;而当关中断时间过长,超过一定的值时,系统再来进行采样,依据此采样值的计算结果就会出错。所以,在这样的场合中,一种实时操作系统的最大关中断时间就成为该种实时操作系统能否成功运用的最关键的因素。

笔者将以μC/OS-II实时内核为例,通过对μC/OS-II的改进,向读者描述一种缩短实时操作系统中断关闭时间的方法。之所以选择μC/OS-II,一是因为读者容易获得相关代码,国内很多读者也对μC/OS-II有一定程度的了解;二是因为其自身结构简单,适合运用于低档嵌入式处理器,关中断时间的问题更加突出。低档嵌入式处理器的处理速度慢,在关中断时间里处理相同的软件代码,花费的时间更长,相对地延长了关中断时间,这时尽量从软件着手解决关中断时间的问题。

1 系统状态标志法概述   

μC/OS-II中在进入临界区之前为什么要关闭中断?通过相关资料[1]的介绍和对μC/OS-II源代码的理解,我们知道在μC/OS-II中一旦不关中断就进入临界区。当某一任务进入临界区时,若恰好发生中断,那么这时有可能引起两种对临界区操作的冲突:①在中断服务程序中要操作同一临界区;②因为中断的产生而引起任务的转换,在新的任务中要操作同一临界区。所以μC/OS-II中在进入临界区前要关闭中断。

针对μC/OS-II关中断机制的分析,考虑用一种系统状态标志法来解决这样的临界冲突。在μC/OS-II增加一个全局布尔变量来表示系统的状态,称为"系统状态标志"。

对于μC/OS-II中所有可以在中断中出现又要对临界区操作的函数,可以在进入临界区之前先查询系统状态标志。如果目前系统没有进入临界操作状态,则首先将该标志置位,表示系统进入临界操作状态,然后该函数就可以操作临界区;而如果发现系统已进入临界操作状态,则将该函数对临界区操作的部分单独形成一个函数,放到一个系统循环函数数组里,等待系统任务调度时执行。

对于μC/OS-II中所有不可能在中断程序中出现而又要对临界区操作的函数,因为函数不在中断中出现,所以函数开始时系统状态标志肯定不会在临界操作状态,因此可在函数操作临界区时直接将系统状态标志置位,表示系统进入临界操作状态,然后即可进行临界区的操作。

系统状态标志的复位在任务调度函数中执行。当然对系统状态标志的设置是要在关中断的条件下执行的,这应该算是系统新的一个临界区。

2 该方法的具体实现

下面以对μC/OS-II v2.61代码的改进为例,具体讲解该方法的具体实现。

2.1 任务调度函数OS_Sched的修改

修改后的任务调度函数OS_Sched的伪代码如下:

因为在任务调度函数OS_Sched中要执行循环函数数组里的函数,同时还要对系统状态标志复位,退出系统临界操作状态,所以修改过的函数在遇到以下3种情况--该函数是在中断里调用时、在任务调度锁定时、当前任务就是最高优先级任务时,都将执行系统循环函数数组里的函数,并将系统状态标志复位,而原任务调度函数在遇到以上3种情况时是直接返回的。[page]

2.2 增加任务重调度函数OS_Resched

任务重调度函数OS_Resched的伪代码如下:

任务重调度函数在以下两处执行:

(1) 当μC/OS-II将当前任务控制块压栈,而还没有将最高优先级任务的控制块弹出栈时执行,因为这时在系统循环函数数组里有可能还有未执行的函数,这些函数的执行有可能导致另外一个更高优先级任务的就绪。

(2) 在中断服务函数的末尾执行。如果μC/OS-II中断返回函数返回的是一个真值,则表示需要执行重调度函数,这时就要执行重调度函数。

2.3 中断返回函数OSIntExit的修改

中断返回函数OSIntExit的伪代码如下:

原函数的返回是void,而改动后的函数返回一个布尔量,用来表示下一步是要正常中断返回(返回布尔假值时),还是要调用任务重调度函数(返回布尔真值时);同时,改动后还增加对系统状态标志的查询,如果发现系统在临界操作状态,则直接返回布尔假值。所以在中断服务程序的最后不是象原来那样简单的调用,而是调用后根据返回值作相应的处理。

2.4 信号量发送函数OSSemPost的修改

这里将以信号量发送函数OSSemPost为例来描述对可在中断中调用而又会对临界区操作的函数的改进。对于μC/OS-II中的其他函数,改进的方法大致相同。

信号量发送函数OSSemPost的伪代码如下:

在这里,改动后的函数将先判断系统状态标志,如果系统在临界区操作状态,则将临界操作作为另一个函数放入全局函数循环数组,等待在任务调度时执行,如果不在临界区操作状态,则关中断后将系统状态标志置位,然后开中断进行原函数的那些临界操作和任务调度。[page]

2.5 信号量等待函数OSSemPend的修改

同理,这里以信号量等待函数OSSemPend为例来描述对不能在中断中调用而又会对临界区操作的函数的改进。

信号量等待函数OSSemPend的伪代码如下:

在这里,改动后的函数先将系统状态标志置位,然后进行原来函数的临界区操作。需要说明的是,对于函数因为等待信号量时间到、还未获取信号量而返回的情况的处理机制,改动后的函数与原函数不同,改动后的函数将OS_EventTO函数放到时间节拍函数OSTimeTick中执行,并将OS_EventTO函数的输入参数由原来的事件pevent指针,改为任务控制块指针ptcb,因为在函数OSTimeTick中是按照任务控制块指针操作的。

结语

上述方法已经在笔者的一个电力微机继电保护项目中成功运用,该方面的实现,提高了μC/OS-II的性能,扩大了μC/OS-II的应用范围,使得单边及工程师能更好的利用μC/OS-II提高嵌入式软件编程水平。特别要说明的是,虽然笔者是以μC/OS-II为例来介绍的,但该方法的原理可以运用到其他实时操作系统上,笔者正在将该方法在实时操作系统RTEMS上实现。从这个意义上讲,该方法的提出也对那些致力于编写自己的实时操作系统的嵌入式软件工程师具有借鉴意义。

关键字:实时操作系统  中断时间  RTEMS 引用地址:缩短μC/OS-II实时内核中断关闭时间的方法设计

上一篇:车载操作系统的调度算法分析与改进
下一篇:实时操作系统软件调度器/硬件调度器的设计与实现

推荐阅读最新更新时间:2024-05-02 22:02

SysTick_Config配置systic中断间隔时间
很奇怪Systic_Config(unit32_t ticks)这个函数在mdk里面找不到定义但是编译却没有问题。但是这个配置还是相当有用的,可以通过设置时间进入systic中断实现精准延时等功能。于是在网上找到了Systic_Config的描述,解决了心中的疑惑。 SysTick_Config(uint32_t ticks):设置系统嘀嗒时钟并使能中断: 在STM32中与CM3内核描述不太一样,这个时钟源有两个选择:AHB/8和AHB,在该函数中是选择了HCLK(SysTick_CTRL_CLKSOURCE_Msk),所以定时时间=ticks / HCLK,当要定时10ms,而HCLK为24MHz时,ticks = 10
[单片机]
Small RTOS51中消息队列的一处隐患
引 言 Small RTOS5l是一款专门为80C5l系列单片机设计的实时操作系统(实际上应该称其为实时内核),大部分代码用C语言编写,易于移植,十分适合于资源紧张的8位机。同时,它也是学习嵌入式操作系统原理极好的入门材料。本人就是在学习完SmallRTOS5l的基础上进一步学习了著名的uC/0S-II,受益颇多。 1 问题描述 在将Smau RTOS51应用于实验室某项目时,发现了一个奇怪的问题。简单说来,就是一个以无条件方式申请消息的任务竟然在没有取到消息的情况下,以指示“等待超时”的代码返回了。 在这里,首先解释一下任务申请消息的两种方式:无条件方式和超时方式。所谓五条件方式是指任务申请消息时,如果暂时没有消
[应用]
8051单片机定时器溢出中断与CPU响应中断时间误差分析
1 前言 单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。 2 误差原因、大小及特点 产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。 2.1. C
[单片机]
RTOS动态分区内存管理机制的优化设计
   引 言   在嵌入式领域中,嵌入式实时操作系统(RTOS)正得到越来越广泛的应用。采用嵌入式实时操作系统可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。内存资源作为嵌入式系统中极为重要的资源之一,其管理机制历来是嵌入式系统设计的重点和难点。内存管理机制的优劣程度极大地影响着嵌入式系统的整体性能,因此在嵌入式RTOS的内存管理机制中必须满足以下3个要求:   ①实时性。在嵌入式RTOS中不仅要求调度机制的实时性,资源的分配和回收的实时性也十分重要。   ②可靠性。嵌入式系统的应用领域决定了嵌入式RTOS必须具有高可靠性,而内存管理的可靠程度直接影响RTOS的可靠
[单片机]
嵌入式实时操作系统Nucleus PLUS在S3C2410A上移植的实现
引言 Nucleus PLUS是美国ATI 公司为实时性要求较高的嵌入式系统应用设计的操作系统内核。约95%的Nucleus PLUS代码用ANSI C语言编写,因此,非常便于移植并能够支持大多数类型的微处理器,如X86、68K、PowerPC、MIPS、ARM等。经过截减编译后,Nucleus PLUS 核心代码区一般不超过20KB大小。 同时提供TCP/IP网络、图形界面Grafix、文件系统File等模块。还有一个特点就是免费提供源代码,有利于节省开发费用。 S3C2410A是三星公司推出的基于ARM920T内核高性能低功耗16/32位RISC微控制器,内部集成了丰富的系统外围控制器。配合Nucleus PLUS操作系统可
[应用]
一种实时操作系统RTOS的硬件加速设计
  摘 要: RTOS是嵌入式系统中重要的组成部分,但其本身的运行使整个系统的性能下降。针对RTOS的任务调度和时间延时处理部分进行分析,并加以硬件实现。在运行63个任务时,采用硬件加速模块,任务响应时间为2 180个时钟周期。相比没有硬件支持的系统,任务响应时间可降低85.8%,提高了系统的可预测性。   随着科技的进步,嵌入式系统的功能逐渐由简单向复杂发展,开发难度也随之提高。嵌入式操作系统的使用,屏蔽了部分硬件信息,提供给开发者统一的平台,降低了开发难度,提高了代码的重复利用率。在一些特殊的领域(医疗、汽车、航空航天),对嵌入式系统的实时性要求非常高。在这些场合,任务必须在给定的时间内响应并正确完成。而实时操作系统RTOS
[嵌入式]
一种<font color='red'>实时操作系统</font><font color='red'>RTOS</font>的硬件加速设计
RTX实时操作系统平台拓展IntervalZero解决方案范围
IntervalZero Inc.的RTX软件将微软(Microsoft) Windows改造成了一个实时操作系统(RTOS)。如今,该公司正在通过一个垂直整合的RTX RTOS平台拓展其解决方案的范围。   IntervalZero首席执行官Jeffrey Hibbard表示,RTX RTOS平台融合了久经考验的可靠技术和创新型的新技术,以实现成本与性能突破,并且为需要硬实时或确定性功能以实现高精度、高性能应用的市场带来了裨益。   Hibbard说:“过去四年里,我们一直在加强与主要技术合作伙伴及供应商的合作关系,从而让该平台成为一个完善的实时解决方案,它带有经预先测试和认证的应用程序和驱动程序来帮助启动需要RTOS的项目
[模拟电子]
嵌入式实时操作系统PetOS设计与实现
1 引言 在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU 的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。由于RTOS需占用一定的系统资源(尤其是RAM 资源),只有μC/OS II、PalOS等少数实时操作系统能在小RAM 系统上运行。相对于μC/OS II 等商业操作系统,PalOS 操作系统是完全免费的操作系统,具有源码公开、内核简单等的特点。但该系统不支持任务优先级、中断等相对复杂的功能,不能很好的满足嵌入式电子设备的需要。 2 PetOS简介 PalOS是UCLA(加州大学洛山机分校)为传感器网络而设计微
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved