μC/OS-II在总线式数据采集系统中的应用

发布者:支持中文最新更新时间:2010-03-09 来源: 电子技术应用关键字:实时操作系统  前后台系统  总线式  移植 手机看文章 扫描二维码
随时随地手机看文章

    μC/OS-II是一个源代码开放的实时操作系统,可移植、可固化(嵌入到产品中成为产品的一部分)、可裁减,属于占先式实时内核。执行时间可确定(即函数调用与服务的时间是可知的,不依赖于应用程序的多少),支持现有大多数型号的8位、16位、32位MCU/MPU,已被广泛应用于交换机、路由器、过程控制、汽车业、办公自动化、计算机外设以及民用消费类产品等,具有稳定的可靠性。把μC/OS-II应用在总线式数据采集系统中,可使该系统比以往的前后台系统能够更加稳定地工作,而且在一定程度上满足了监控测量实时性的需求。

1 总线式数据采集系统的组成与功能

    随着社会信息化程度的提高,人们对重要工业及生活设施智能化监控的要求也越来越高。应这种需求,设计了这套总线式数据采集系统。该系统采用总线巡检方式,对监测对象进行数据采集与处理,系统硬件以模块化结构,实现32/64/128路模拟或数字量的集中监测,适用于各种标准现场一次仪表或二次仪表数据测量与控制。整机采用先进的微机处理技术和通信控制技术,并嵌入实时处理内核,智能化程度较高,工作性能更加稳定,测量精度高,通用性强。

1.1 系统组成

    该系统的硬件组成如图1所示。

 现场监测通道状态以总线方式,通过总线处理单元传送到中央控制单元进行数据采集与处理,其中MCU采用具有10位A/D转换器的80C196KB。

1.2 系统功能

    该系统可以对各通道的工作参数、状态进行即时修改设定,并可以通过面板LED实时显示32/64/128路通道的工作状态,同时各通道的实时参数通过LCD进行逐屏显示。对发生报警的信道可以通过打印处理单元进行打印输出、声光报警及显示。该系统采用总线巡检方式,对各信道工作状态进行远程数据采集并进行集中数据处理。为进一步满足智能化管理的需要,具有和计算机通信的功能,可以实现监测数据的共享。同时,也可以通过计算机对各信道的工作状态进行设置,进一步增强了该系统的智能化管理能力。

2 μC/OS-II在系统中的应用

    该系统若采用以往的前后台式工作方式,即后台为主应用程序,前台为中断处理程序;通常情况下执行主程序,若有中断发生时,则转向前台处理中断服务程序。前台需要处理定时显示系统信息子程序,或按键中断处理子程序,然后根据中断程序中所置的状态标志,由主程序判断其状态标志后再进入相应的子程序,也就是主程序采用状态查询方式进行工作。这样在一定程度上不能保证整个系统测量的实时性。因为主程序在执行其它程序时,不可能随时去检测这些状态标志,尤其是处理多信道A/D采样计算时,耗时较多。当工作的信道增加或减少时,这种现象则表现得尤为明显,而且难以实现并行操作的相互通信。在主程序的各个子模块中,有需要横向通信联系交换信息的,这在一般的前后台系统中是很困难的,且存在系统不稳定的隐患。实时内核兼具实时多任务性和稳定性,因此考虑采用实时内核。μC/OS-II是一个源码开放的实时内核,且又有许多成功的先例可供参考,可针对不同的MCU/MPU,通过条件编译裁减其内核的大小,以满足系统要求。μC/OS-II是占先式内核,总是运行就绪条件下优先级最高的任务。最大可以管理64个任务,其中保留8个给系统,故应用程序最多可以有56个任务。鉴于许多成功先例和系统成本,采用了80C196KB作为系统的MCU。通过实验,基本满足了系统所要求的实时性。

2.1 开发实时内核的流程

    开发实时内核的流程如图2所示。

2.2 内核的移植

    内核的移植也就是使实时内核能够在某个微处理器或微控制器上正常运行。移植工作包括以下几个内容:

    (1)在OS_CPU.H中用#define定义三个宏,声明C96中能够识别的数据类型和堆栈的增长方向。

    (2)在OS_CPU.C中用C语言重新编写以下几个函数:OSTaskStkInit、OSStartHighRdy、OSTaskCreateHook、OSTaskSwHook、OSTaskDelHook、OSTaskStatHook、OSTimeTickHook。

    (3)在OS_CPU.ASM中编写几个汇编语言函数LoadCtx()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。

2.3 实时内核在应用中应注意的问题

    一个实时系统的软件由实时操作系统加上应用程序构成。应用程序与操作系统的接口通过系统调用来实现。用80C196KB作为系统的MCU,只能用内部RAM作为TCB和所有系统存储器(含各种控制表)以及各个任务的工作和数据单元。因此一定要注意以下几点:

    (1)为各个任务分配各自的堆栈区,该堆栈区既作为任务的工作单元,也作为任务控制块的保护单元。

    (2)系统的任务控制块只存放各任务的堆栈指针,而任务的状态均存放于任务堆栈中。在一个任务退出运行时,通过中断把它的状态进栈,然后把它的堆栈指针保存于系统的TCB中;再根据优先级取出优先级最高的已就绪任务的堆栈指针SP映象值送入SP中;最后执行中断返回指令转去执行新任务。

    (3)各任务的数据和工作单元尽量用堆栈实现,这样可以允许各任务使用同一个子程序。使用堆栈实现参数传递并作为工作单元,而不使用绝对地址的RAM,可实现可重入子程序。该子程序既可为各个任务所调用,也可以实现递归调用。

2.4 应用μC/OS-II实时内核的主要部分

    (1)任务的分配

    实时系统中的任务有别于前后台系统中的子程序模块,任务是处理机按程序处理数据的过程,是个动态的概念。一般一个任务对应于一段独立的主程序,它可能调用各种子程序,并使用各种系统资源如中断、外设等,以完成某种选定的功能,且允许多个任务并行。根据该系统的性能指标和技术要求,可对系统进行如下的任务划分:按键中断、LCD显示、串行通信、打印与报警、信道巡检A/D采样与数据处理、系统信息显示、系统工作参数测量、电源切换与充电管理共八个任务。

    (2)任务的调度

    μC/OS-II的任务调度是按优先级进行的,根据各任务的实时性要求及重要程度,分别置它们的优先级为4、9、8、7、6、11、10、5。其中0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO这几个优先级保留以被系统使用。优先级号越低,任务的优先级越高。这样程序之间的通信可以通过按键中断置标志来实现,其中按键中断的优先级最高。当其它任务运行时,按键中断将使得系统服务转向运行按键中断处理子程序ISR。当中断处理子程序运行完后,转向判断就绪状态任务的优先级别。如果发现有比中断前任务优先级更高的任务,则转向执行该任务。先判断其运行标志,如果是‘非’,则又等待。再重复上述过程。如果在执行完ISR后发现没有比中断前任务优先级更高的,则转向中断前的子程序继续运行。该系统的软件处理没有采用优先级转换的方法,而是采用状态置位判断的方法,这样可以减少程序的复杂性。

    (3)任务间的通信

    任务间通信最简便的方法是使用共享数据结构。虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。通常与共享资源打交道时,使之满足互斥条件最一般的方法有以下几种:

    ·关中断;

    ·使用测试并置位;

    ·禁止任务切换;

    ·利用信号量。

    在本系统中采用了前两种。关中断是一种最简单快捷的方式,也是在中断服务子程序中处理共享数据结构的唯一方法。要注意的是:关中断的时间要尽量短,以免影响操作系统的中断处理。其应用模式如下:

    void Function(void)

    {

        OS_ENTER_CRITICAL();

        ……        /*在此处理共享数据*/

        OS_EXIT_CRITICAL();

    }

    测试并置位方式需要有一个全局变量,约定好先测试该变量;如果是约定的数值,则执行该任务,否则不执行该任务。这种方法称测试并置位(TEST-AND-SET),或TAS。其应用程序如下:

    Disable interrupts      /*关中断*/

    If  ('Access Variable' is  0){ /*若资源不可用,标志为0*/

         Set  variable  to  1; /*置资源不可用,标志为1*/

         Reenable  interrupts; /*重开中断*/

         Access   the   resource; /*处理该资源*/

         Disable   interrupts;   /*关中断*/

         Set   the  'Access  Variable'  back  to  0;/*清资源不可使用,标志为0*/

         Reenable  interrupts;   /*重新开中断*/

    }else   {                   /*否则*/

         Reenable interrupts;    /*开中断*/

                               /*资源不可使用,以后再试*/

    }

    (4)时钟节拍

    时钟节拍是特定的周期性中断,根据本系统的性能指标,取1毫秒。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。另外,系统信息的定时显示需要系统每隔一定的时钟节拍显示一次。

    (5)存储空间的分配

    为了减少操作系统的体积,只应用操作系统的任务调度、任务切换、信号量处理、延时及超时服务几部分。这样可使该操作系统的大小减小到3~5KB,再加上应用程序最大可达50KB左右。

    因为每个任务都是独立运行的,每个任务都具有自己的栈空间。这样可以根据任务本身的需求(局部变量、函数调用、中断嵌套等)来分配其RAM空间。

3 系统运行的实时性分析

    在该系统中应用μC/OS-II实时内核,一是增强了系统运行的稳定性,更重要的是满足了系统测量所需的实时性要求。系统采用12MHz晶振,一条指令的周期是1微秒。以下时间的统计是将C语言编译为汇编语言后,根据其指令的多少而计算出来的。经统计如下:

    ·中断管理:共需3毫秒;

    ·内存管理:共需800微秒;

    ·信号量管理:共约4.5毫秒; 

    ·任务管理:共需8毫秒;

    ·时钟管理:共需约20毫秒;

    ·杂项:约需1毫秒。

    上述时间均是最大运行时间的大概统计,也就是均考虑有任务切换情况下的时间统计结果。在整个内核的应用上对一些函数进行了裁减,没有用的服务在预编译时屏蔽掉了,因此未计入统计时间。

    用户定义函数:按键中断处理15毫秒,LCD显示一屏30毫秒,串行通信10毫秒,打印及声光报警400毫秒,信道巡检A/D采样与数据处理20毫秒,系统信息显示10毫秒,系统工作参数测量150毫秒,电源的切换与充电50毫秒。可见系统各任务中除打印所需时间较长外,其余任务所需时间都比较短。通过采用实时内核,在很大程度上保证了对信道扫描的定时性,即实时性要求。若采用前后台编程,在查询信道扫描的情况下,系统扫描信道的时间不能确定;随着信道数的变化,信道扫描的定时性很难得到保证,各种显示的定时性也比较差。

    总之,随着各种应用电子系统的复杂化和系统实时性需求的提高,并伴随应用软件朝着系统化方向发展的加速,μC/OS-II实时内核一定会得到更大的发展。因为它可以使产品更加稳定可靠,开发过程更加规范,且缩短了开发周期。

关键字:实时操作系统  前后台系统  总线式  移植 引用地址:μC/OS-II在总线式数据采集系统中的应用

上一篇:嵌入式测控系统中数字滤波算法的实现
下一篇:基于nRF2401的光学在线检测系统的设计与实现

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

实时操作系统μC/OS-II的改进与应用研究
  传统的嵌入式系统设计大多采用单任务顺序机制,应用程序是一个无限的大循环,所有的事件都按顺序执行,与时间相关性较强的事件靠定时中断来保证,由此带来系统的稳定性、实时性较差;尤其当系统功能较复杂,且对实时性要求较严格时,这种单任务机制的弱点暴露无遗。本文引入的嵌入式操作系统μC/OS-II是一个多任务的实时内核,主要提供任务管理功能。在实时系统中的多个任务,必须决定这些任务的优先级顺序,任务调度算法需要动态为就绪任务的优先级排序。为了满足对实时性要求越来越高的需要,同时避免频繁改变就绪任务的优先级,在分析μC/OS-II源代码的基础上,对其调度算法进行改进。    1 μC/OS-II概述   μC/OS-II是一个完整的,可
[工业控制]
基于DE2的开源片上系统Freedom E310移植
引言:伯克利大学于2014年发布了开源指令集架构RISC-V,其目标是成为指令集架构领域的Linux,应用覆盖IoT(Internet of Things)设备、桌面计算机、高性能计算机等众多领域[1]。RISC-V自发布以来受到多方关注和参与,围绕RISC-V的生态环境逐渐完善,并涌现了众多开源处理器及SoC(System on Chip)采用RISC-V架构,其中Rocket-Chip就是由伯克利大学发布的基于RISC-V的可配置SoC,通过配置不同的参数可以得到不同性能、应用不同场合的SoC。RISC-V的迅速发展还激励其设计人员成立了SiFive公司,专注于定制化SoC设计,其产品线包括如下: (1)开源处理器核Cor
[嵌入式]
嵌入实时操作系统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操作系统可
[嵌入式]
TQ2440 学习笔记—— 27、移植U-Boot【Bootloader 作用、工作流程】
一、Bootloader 简介 1、系统上电之后,需要一段程序来进行初始化:关闭WATCHDOG、改变系统时钟、初始化存储控制寄存器、将更多的代码复制到内存中等。如果它能将操作系统内核复制到内存中运行,无论从本地(比如Flash)还是从远端(比如通过网络),就称这段程序为Bootloader 。 简单的说,Bootloader 就是这么一段小程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用操作系统内核。 2、Bootloader 的启动方式 CPU 上电后,会从某个地址开始执行。比如MIPS 结构的CPU 会从0xBFC00000取第一条指令,而ARM 结构的CPU则从地址 0x0000000
[单片机]
TQ2440 学习笔记—— 27、<font color='red'>移植</font>U-Boot【Bootloader 作用、工作流程】
STM8都支持哪些RTOS操作系统
一、引伸问题 回答这个问题之前,引伸一个问题:STM8有必要使用操作系统吗? 这个问题其实没有标准答案,我用STM8裸机开发过项目,也在STM8的项目上跑过RTOS。 具体要看项目实际情况:MCU资源情况、功能复杂程度、实时性等。 比如:通过UART通信,简单控制几个IO口,这种或许没必要跑RTOS。 二、回归主题 STM8都支持哪些RTOS操作系统? 我找了下官方资料,共列举4种: 1.AtomThreads 这个RTOS应该是使用STM8跑操作系统的人都了解,或者听说过。 我觉得这个系统应该是目前(在STM8上)用的最多的一个RTOS. 在这4个系统中,我也只在STM8上跑过该操作
[单片机]
手机成功模式难移植 小米电视藏隐忧
小米科技在利用网路行销及高规低价策略于智慧手机市场窜红后,近期更进一步以人民币2,999元的超杀价格进军智慧电视市场,试图复制手机产品的成功模式。不过,由于现阶段小米电视内容仍缺乏独特性,恐难吸引消费者持续埋单。 小米科技自2010年4月成立至今不到4年的时间,其智慧型手机以高性价比优势抢进市场,一举挤入全球前二十大智慧型手机品牌大厂,其创新又独树一格的经营方式,再加上销售成绩亮眼,使小米科技成为大中华区受瞩目之新兴企业。 2013年小米科技相继发布「小米盒子」与「小米电视」,正式进军电视市场,期复制小米手机之成功模式,除抢占客厅娱乐中心要角外,未来甚至可望扩展至智慧家庭应用,为小米开创下一波成长动能。 2013年
[手机便携]
基于Linux嵌入系统的ISA总线DMA的实现
     1.DMA概述   DMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(PIO)方法,也即由CPU通过内存读写指令或I/O指令来持续地读写外设的内存单元(8位、16位或32位),直到整个数据传输过程完成。 (2)DMA,即由DMA控制器(DMA Controller,简称DMAC)来完成整个数据传输过程。在此期间,CPU可以并发地执行其他任务,当DMA结束后,DMAC通过中断通知CPU数 据传输已经结束,然后由CPU执行相应的ISR进行后处理。   DMA技术产生时正是ISA总线在PC中流行的时侯。因此,ISA卡的DMA数据传输是通过ISA总
[嵌入式]
05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁
一、移植YFFS2文件系统 yffs文件系统更加支持nand设备 上节移植了jffs2文件系统(点击查看)到移植的内核中,这节我们将yffs2文件系统移植到刚移植好的内核中。 (1)获取源码并解压 git clone git://www.aleph1.co.uk/yaffs2 tar xjf yaffs2.tar.bz2 (2)给内核打上yffs2补丁 ./patch-ker.sh c m /home/book/linux-3.4.2 ++ (3) 配置内核支持YAFFS 1. ls fs/yaffs2 (4)编译、生成uImage 出错,制作yffs2 source工程.
[单片机]
05-S3<font color='red'>C</font>2440学习之内核(<font color='red'>移植</font>)linux3.4.2<font color='red'>移植</font>(2)之yffs2文件<font color='red'>系统</font><font color='red'>移植</font>+内核裁剪+内核制作补丁
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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