μC/OS-II中缩短中断关闭时间的方法

发布者:TranquilOasis最新更新时间:2007-10-12 来源: 单片机及嵌入式系统应用关键字:采样  实时  临界  函数 手机看文章 扫描二维码
随时随地手机看文章

引 言

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

更重要的是,有些应用场合对关中断的时间有非常严格的要求。例如,在电力系统微机继电保护装置中,对电流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种情况时是直接返回的。

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的伪代码如下:



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

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上实现。从这个意义上讲,该方法的提出也对那些致力于编写自己的实时操作系统的嵌入式软件工程师具有借鉴意义。

关键字:采样  实时  临界  函数 引用地址:μC/OS-II中缩短中断关闭时间的方法

上一篇:μC/OS-II在LPC213X上的多种移植方案
下一篇:μC/OS-II中缩短中断关闭时间的方法

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

uC/OS-II内核移植_时钟节拍函数使用的初步认识
断断续续看了uC/OS-II内核书和一两个实验,发现移植的第一部,就遇到时钟节拍处理不好的困难。这两天,又对其中的一个比较完善的例程作仔细的分析,初步有了一些认识。 个人认为,移植的第一个问题,是解决时钟节拍的处理,过程如下: 一、首先在主函数中调用目标板初始化函数ARMTargetInit();主要是初始化要用到的定时器和外部中断; 二、在启动系统之前,调用函数ARMTargetStart(),打开Timer0中断; 三、启动系统OSStart(); 下面,详细说明上述过程的步骤: 建立文件target.c和target.h target.c: void ARMTargetIn
[单片机]
stm32中的io函数 STM32中的IO操作
STM32系列单片机芯片的库函数有很多种,而负责IO操作的库函数是GPIO,GPIO函数在STM32单片机头文件stm32f10x_gpio.h中声明,在STM32单片机的主函数stm32f10x_gpio.c中完成定义。 GPIO的配置种类有8个,分别是: 1.GPIO_Mode_AIN 模拟输入 2.GPIO_Mode_IN_FLOATING 浮空输入 3.GPIO_Mode_IPD 下拉输入 4.GPIO_Mode_IPU 上拉输入 5.GPIO_Mode_Out_OD 开漏输出 6.GPIO_Mode_Out_PP 推挽输出 7.GPIO_Mode_AF_OD 复用开漏输出 8.GPIO_Mode_AF_PP 复用推挽
[单片机]
用CPLD实现DSP2407A与S3C4480的通信
在现代汽车电子中,一般有多个微控制器共同协调工作。DSP控制器采用哈佛结构,运算速度快,所以在汽车电子中广泛采用DSP芯片来实现汽车动力系统的控制。ARM是一种32位微控制器,有丰富的外扩接口,因此在汽车电子中一般用ARM来实现大容最的数据存储和人机交互或GPS全球定位系统,故在DSP和ARM之间需要进行数据交换。 CPLD(Complex Programmable Logic Device)是一种复杂的用户可编程逻辑器件,由于采用硬件可编程技术,从而使没计硬件电路也像设计软件一样方便。DSP2407A是T1公司设计的一款专为满足大范围的数字电动机控制应用的微控制器。S3C4480是三星公司专为手持设备设计的高性价比的微控制器。本设
[应用]
Giotto软件在实时嵌入式控制中的应用
引 言 随着计算机技术、控制技术、信息技术的快速发展,工业的生产和管理方式进入了生产自动化、控制智能化时代,特别是分布嵌入式系统的应用,更加需要标准化、实时的控制模块和I/O功能模块,以便系统集成,构建适应于恶劣环境的复杂分布式系统。实时嵌入式软件模块适合于没计复杂的分布式系统,它支持分布的、异构设备的系统建摸和构造。嵌入式模块的作用是提供使复杂性容易处理的结构和技术,基于Giorio的嵌入式控制设汁更适合具有硬实时控制约束的应用。本文中,平台指硬件结构、操作系统和通信协议,由CPU、传感器、执行器和网络组成。与平台无关的事件包括应用功能和时限,与平台相关的事件包括时序安排、通信和物理特性。 1 Giotto编程特点 传统的实
[单片机]
Giotto软件在<font color='red'>实时</font>嵌入式控制中的应用
STM32CUBEIDE(5)----GPIO输入函数说明
概述 本章STM32CUBEMX配置STM32F103,通过按键来控制LED亮灭。 最近在弄ST和GD的课程,需要样片的可以加群申请:615061293。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板 管脚配置 在开发板中,有一个蓝色按键,连接到单片机的PC13管脚上。 配置PC13为输入管脚。 查看开发板资料,可以看到LD2的LED由PA5管脚进行控制。 配置PA5为输出IO口。 HAL_GPIO_ReadPin()函数 该函数的作用是读取管脚的电平状态。 通过简单的按键按下亮灯,松开灭灯进行演示,代码如下。
[单片机]
STM32CUBEIDE(5)----GPIO输入<font color='red'>函数</font>说明
STM32中基于DMA的ADC采样实例之MQ-2烟雾传感器
最近学习了一下STM32中的ADC采样,由于手头正好有一个MQ-2的烟雾传感器,所以正好可以测试一把。体验ADC采样的过程。下面介绍一下这个MQ-2烟雾传感器。 1.MQ-2烟雾传感器简介 MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。 MQ-2气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。 2.传感器模块图 3.MQ-2传感器
[单片机]
STM32中基于DMA的ADC<font color='red'>采样</font>实例之MQ-2烟雾传感器
C51单片机中断函数的定义及应用
C51函数声明对ANSI C作了扩展,具体包括: 1.中断函数声明: 中断声明方法如下: void serial_ISR () interrupt 4 [using 1] { /* ISR */ } 为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。 /* define not used interrupt, so generate “IRET” in their entrance */ void extern0_ISR() interrupt 0{}/* not used */ void timer0_ISR () interrupt 1{}/* not used */ void extern1_IS
[单片机]
纳芯微推出全新隔离式Sigma-Delta调制器隔离采样芯片
又准又稳,让采样事半功倍!纳芯微推出全新隔离式Sigma-Delta调制器隔离采样芯片 2022年7月28日-在工业和汽车市场中,例如电机驱动、车载充电机、充电桩、光伏逆变器、储能等涉及高压、大功率的系统应用中, 受到电噪声、机械冲击、振动、极端温度、污染等恶劣影响的可能性较高,无论是哪种应用场景,工程师们都在追求更可靠、稳定的隔离电压、电流采样方案,以达到将高压和低压隔离的目的。 隔离放大器和隔离Sigma-Delta调制器都可用来将高压端采集到的信号反馈至位于低压侧的控制器。相较于隔离放大器,隔离Sigma-Delta调制器正在为大家提供一种更高精度的隔离采样方式。直接输出数字量信号至MUC端口,既省去隔离放大器后级的
[模拟电子]
纳芯微推出全新隔离式Sigma-Delta调制器隔离<font color='red'>采样</font>芯片
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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