基于μC/OS-Ⅱ应用系统的任务划分实例

发布者:梦幻之光最新更新时间:2012-10-09 来源: 21IC 关键字:μCOS-Ⅱ  应用系统  任务划分 手机看文章 扫描二维码
随时随地手机看文章

    μC/OS-Ⅱ是由Jean J.Labrosse于1992年开始提出的一个源码公开的嵌入式实时多任务操作系统,至今仍在继续发展,其已经在工业控制、仪器仪表、汽车电子、航空航天和消费电子等领域得到了广泛应用。它采用占先式实时调度方式,结构简洁精练、可读性强、性能稳定、便于移植,只需少量的工作就能将其移植到8位、16位和32位微处理器上。目前,μC/OS-Ⅱ已成为嵌入式开发人员入门嵌入式操作系统的合适选择。

    开发基于μC/OS-Ⅱ的嵌入式应用系统,首先需针对目标硬件平台对μC/OS-Ⅱ进行移植。在详细分析总体需求的基础上,将系统功能合理地划分为多个不同任务实现。由此可见,在实现嵌入式应用系统的过程中,任务划分是十分重要的环节。划分任务是否合理有效不仅直接决定了μC/OS-Ⅱ的性能和执行效率,还间接影响着应用系统甚至整个项目的成败。

    对于国内众多嵌入式方向的研究人员和爱好者,基于实时操作系统μC/OS-Ⅱ进行教学或者研发,大多侧重于μC/OS-Ⅱ在各种特定目标硬件平台上的移植和简单使用。而μC/OS-Ⅱ上的复杂系统开发特别是划分任务策略虽已引起诸多关注,但到目前为止却鲜有详细而系统的研究成果。本文在总结前人工作和实际开发经验的基础上,研究了μC/OS-Ⅱ任务划分的方法和原则,并结合实践给出基于MC9S12NE64硬件平台的应用实例。

    1 μC/OS-Ⅱ的任务管理机制

    在μC/OS-Ⅱ中,每个任务可以是一个典型的无限循环,都处在μC/OS-Ⅱ规定的一种任务状态。程序员把一个大地应用程序分成相对独立的多个任务来完成,大大提高了CPU的利用率,极大地方便了应用程序的设计和维护。而多任务系统则通过任务切换实现各个任务之间的调度运行。

    从存储结构来看,任务由3个部分组成:任务的程序代码、任务堆栈和任务控制块(PCB)。其中,任务堆栈用来保存该任务运行时的工作环境;任务控制块用来保存该任务的一些属性;任务程序代码则描述了该任务的执行过程。μC/OS-Ⅱ可以管理多达64个任务,其中的空任务(IDLE)和统计任务(STATISTICS)为系统任务,其余都属于用户任务。μC/OS-Ⅱ规定其每个任务必须设置为不同且惟一的优先级(优先级的数值越小,则代表任务的优先级别越高),而μC/OS-Ⅱ内核会调度处于就绪状态优先级最高的任务进行处理,并分配CPU。就绪状态属于任务的5种状态之一,其余4种状态分别为:睡眠状态、运行状态、等待状态、中断服务状态。μC/OS-Ⅱ的任务总会处于这5种状态之一,并根据不同的条件在5种状态中进行切换,如图1所示。

     

    2 任务划分的方法

    2.1 以硬件模块为对象划分任务

    在使用μC/OS-Ⅱ划分任务时,应将各硬件模块相关的驱动程序划分为不同的任务,根据硬件模块在系统功能中的关键性顺序设定相应的优先级。以MCU为中心,将各硬件驱动程序划分为独立的任务,不仅有效防止了争用硬件模块出现的问题,还能够提高整个μC/OS-Ⅱ的执行效率,满足应用系统的实时性要求,为系统维护和扩展功能打下良好的基础。

    将不同硬件模块的操作划分为不同的任务,使得应用系统必须通过μC/OS-Ⅱ内核调度相应的任务,才能实现对于某个硬件模块的访问。这样,每个模块都有且只有惟一的任务与之对应,其他任务则无权时访问它。这种操作模式有效地避免了由于多个任务同时争用同一硬件模块造成的冲突甚至死锁现象。

    按照硬件模块划分任务,可以有效提高μC/OS-Ⅱ的工作效率,增强应用系统对于实时要求的处理能力。例如:如果当前系统正在对并口设备进行处理,由于并口属于慢速设备,其执行速度远远落后于MCU总线频率,因此在其工作过程中MCU大部分时间处于空闲状态,即无事可做直到并口处理完毕为止。将并口驱动独立为单个任务之后,μC/OS-Ⅱ内核就可以通过任务调度使并口处理任务和其他任务并发执行,减少MCU处于空闲状态的时间,从而提高了整个应用系统运行效率。

    硬件模块与硬件驱动任务一一对应,使整个软件系统框架清晰、结构合理,增强了系统的可维护性和可扩展性。以增加串行通信功能为例,开发人员只要编写相应串口驱动程序,在μC/OS-Ⅱ中增加串行通信任务即可,无需修改任何其他模块的任务代码。

    2.2 划分强实时性任务

    实时即立即、及时的意思,根据应用中的实时要求,可以将其分为强实时和弱实时2大类。强实时对于响应时间要求很高,如果实时性得不到满足,系统会出现错误甚至难以挽回的故障。弱实时虽然同样要求调度时间短,响应速度快,但其确定性较差,超过限定时间也能勉强工作。在基于μC/OS-Ⅱ的嵌入式应用系统中,强实时任务能够在限定的时间范围内调度执行,是整个系统稳定可靠,实时有效的重要保障。因此,在划分μC/OS-Ⅱ任务时,应将每个强实时应用划分为独立的任务,与其他应用分开,并设定高优先级,以保证强实时事件的限时发生,避免出现灾难性后果。

    假设把某一强实时应用与一弱实时性要求的应用一起打包成为1个任务。在嵌入式应用系统运行过程中,一旦该弱实时应用因为某种原因(例如:等待内存数据、等待外部输入信号、等待中断发生等)导致整个任务进入等待状态,则在等待的事件发生之前,强实时应用也无法通过任务调度得以执行。在强实时系统中,出现了以上所述的情况,结果是不堪设想的。

    如果强实时性应用允许通过中断方式“通知”μC/OS-Ⅱ内核,则可将该强实时任务代码放入相应的中断服务程序中去处理。在中断服务程序在发生引起中断处理的事件后,由硬件机制自动加载运行(把中断服务程序的入口地址放入PC寄存器),无需软件调度干涉,因此可更好保证应用功能的强实时性。在中断服务程序中执行强实时性任务代码,同样必须遵循中断服务程序要尽可能简短的原则。具体的方法是通过分析每个强实时任务功能和代码,将其最重要的核心部分放人中断处理程序中,其余部分形成一个单独的任务,两者可通过任务同步机制(信号量、消息邮箱或者消息队列)进行联系,以达到简化中断处理过程的目的。

    2.3 分割耗时较多的任务[page]

    在一些较复杂的嵌入式应用系统中,个别任务代码会包含繁琐的计算算法,运行时占用大量的CPU处理时间和资源,严重影响μC/OS-Ⅱ系统的实时性。对于这样的任务,可将其按照不同的内部功能划分为多个模块,每个模块即为一个相对独立的小任务,相互之间通过任务通信机制协调工作。由于需要占用CPU较多的处理时间,这些任务几乎没有实时性要求,所以通常将其优先级设低,以确保强实时任务的正常运行。

    例如:当前的μC/OS-Ⅱ系统中有一任务在调度执行时会占用较长时间,导致其运行过程频繁被强实时任务打断,这样CPU就需要“牺牲”大量时间和空间用于保存被打断的任务现场,而整个系统的实时性就会大大降低,执行效率也大打折扣。该任务的描述如下:首先根据算法1处理数据X,其次利用算法2处理数据Y,最后将数据X和数据Y通过算法3得到数据Z。在这种情况下,应将不同的算法处理部分划分为独立的子任务,并根据执行顺序逐次递减任务优先级。由于缩短了单个任务的执行时间,任务的响应时间也随之变短,整个系统的实时性得到了提高。

    3 应用实例

    作者在参与开发的一个项目网络数据采集系统中使用了μC/OS-Ⅱ进行多任务的管理。该项目基于Freescale公司1994年推出的微处理器MC9S12NE64,主要功能要求网络数据采集系统通过光敏传感器采集工厂生产设备的多个状态指示灯,以获取当前设备的工作状态信息,随后通过UDP包将信息发送至局域网中PC服务器处理。此外,技术人员还能够通过串行通信方式对采集系统进行测试和维护。该采集系统划分的主要任务及其优先级设定如表1所示。

     

    生产设备状态信息采集及处理任务优先级最高,因为该任务属于强实时性任务,无法及时执行会使采集系统处于瘫痪状态。而同样属于实时任务的系统测试维护功能由于实时要求并不高,所以优先级次之。

    A/D模块驱动程序、网络模块通信程序、串口通信程序和FIASH模块操作程序与各自硬件单元关系密切,故将它们划分为独立的硬件相关任务。

    采集系统中耗时最多、处理最复杂的部分是局域网内的数据通信。由于受到芯片存储空间的限制,作者并没有移植现有源码公开的TCP/IP协议栈,取而代之的是自主研发了简易TCP/IP协议,并将该协议栈中每一层分割成为1个独立的任务存在。

    4 结语

    μC/OS-Ⅱ是一个公开源码、抢占式、多任务的嵌入式实时操作系统,自1992年面世以来,已应用于上百种产品。与一些商用嵌入式操作系统相比,它源代码结构清晰,易于移植和裁剪,具有很大的发展空间。本文在分析μC/OS-Ⅱ任务管理机制的基础上,对μC/OS-Ⅱ的任务划分进行了初步探究,阐述了一些任务划分的方法:“划分与硬件模块相关的任务”、“划分强实时性任务”、“分割耗时较多的任务”。最后,结合开发实践给出了基于μC/OS-Ⅱ应用系统的任务划分实例。

关键字:μCOS-Ⅱ  应用系统  任务划分 引用地址:基于μC/OS-Ⅱ应用系统的任务划分实例

上一篇:vxworks嵌入式操作系统下串行设备驱动程序开发思路
下一篇:如何在嵌入式实时操作系统uC/0SII上移植实现LwIP

推荐阅读最新更新时间:2024-03-16 13:09

单片机应用系统软件设计应该考虑哪些事情?
(1)总体规划:软件所要完成的任务已在总体设计时规定,在具体软件设计时,要结合硬件结构,进一步明确软件所承担的一个个任务细节,确定具体实施的方法,合理分配资源。 (2)程序设计技术:合理的软件结构是设计一个性能优良的单片机应用系统软件的基础。在程序设计中,应培养结构化程序设计风格,各功能程序实行模块化、子程序化。一般有以下两种设计方法: (a)模块程序设计:模块程序设计是单片机应用中常用的一种程序设计技术。它是把一个较长的程序分解为若干个功能相对独立的较小的程序模块,各个程序模块分别设计、编程和调试,最后由各个调试好的模块组成一个大的程序。其优点是单个功能明确的程序模块的设计和调试比较方便,容易完成,一个模块可以为多个程序所共享。
[单片机]
单片机应用系统抗干扰技术
近年来, 单片机 在工业自动化、生产过程控制、智能仪器仪表等领域的应用越来越广泛,大大提高了产品的质量,有效地提高了生产效率。但是,测控系统的工作环境往往复杂、比较恶劣,尤其是系统周围的电磁环境,这对系统的可靠性与安全性构成了极大的威胁。单片机测控系统必须长期稳定、可靠运行,否则将导致控制误差加大,严重时会使系统失灵,甚至造成巨大损失。下面着重分析 干扰 对单片机应用系统的影响,并结合亲身经验,从软、硬两个方面给出具体的解决方法。 2. 干扰对单片机应用系统的影响 影响应用系统可靠、安全运行的主要因素来自系统内部和外部的各种电磁干扰,以及系统结构设计、元器件安装、加工工艺和外部电磁环境条件等。这些因素对单片机系统造成的
[单片机]
单片机应用系统的可靠性设计
随着单片机在国防、金融、工业控制等重要领域应用越来越广泛,单片机应用系统的可靠性越来越成为人们关注的一个重要课题。单片机应用系统的可靠性是由多种因素决定的,大体分为硬件系统可靠性设计和软件系统可靠性设计。 一、硬件系统可靠性设计 (1)选优设计 在系统硬件设计和加工时,应该选用质量好的接插件,设计好工艺结构;选用合格的元器件,进行严格的测试、筛选和老化;设计时技术参数(如负载)要留有一定的余量或降额使用元器件;提高印制板和组装的质量。 (2)冗余与容错设计 保证单片机应用系统100%无故障是不可能的。容错是指当系统的某个部件发生故障时,系统仍能完全正常地工作,即给系统增加容忍故障的能力。为使系统具有容错能力,必须在系统中增加适当的
[电源管理]
单片机<font color='red'>应用系统</font>的可靠性设计
综合智能卡应用系统技术方案分析
  智能卡即IC卡,它把微电子技术和计算机技术结合在一起,广泛应用于金融、交通、身份认证等领域,提高了人们生活、工作的现代化程度。智能卡在智能大厦中综合运用的程度是反映大厦智能化程度的一个重要标志。       本系统方案采用当今最先进的非接触式IC卡作为信息载体,读卡距离可达20厘米米。在读卡范围内只需轻轻一晃卡,瞬间就可完成数据交换,省去了插卡或刷卡的繁琐,方便、快捷;采用成熟的技术和产品,可靠性强;可以一卡多用,实用性强;卡和读卡机没有物理接触,故障率低;采用WINDOWS操作界面,日常管理操作简便;采用数据加密技术,安全性能高。        2 非接触式智能卡           非接触式智能卡又称射频卡,它将芯片和天线
[网络通信]
超宽带窄脉冲发射芯片及应用系统电路实现
前言 超宽带(Ultra-wideband,UWB)是近年来备受关注的一种全新的无线通信技术,其利用极大带宽、极低功耗的无线信号来传输高速信息。超宽带技术通常利用极窄的脉冲信号(宽度小于1ns)来进行数据传输,脉冲信号的时间分辨率很高,可用于精确的定位应用,精度可达到厘米量级。 本文利用单片机和自主设计的TH-UWB02超宽带发射芯片实现了一个超宽带窄脉冲发射机电路,能够发送高速率的窄脉冲超宽带脉冲序列,由接收机解调后可以实现高速数据的无线传输,可用于无线数据传输、射频标签等领域。 电路设计 本文介绍的超宽带窄脉冲发射机采用TH-UWB02实现窄脉冲信号的产生和信号调制,工作电压为1.8V时,能够在每个输入数据的上升沿产生
[网络通信]
基于AT89C51应用系统的串行通信设计
1 引 言 在红外成像技术的电力设备状态检测系统中,基于AT89C51单片机的应用系统,采用美国雷态公司的型号为3iLRL3的非接触式红外测温仪.该测温仪采用的是RS232C串行通信标准接口,该接口在很多通信设备中通用,目前与PC机的直接串行通信也是RS 232C接口。尽管RS232C性能指标并非很好,但还是有广泛的市场支持。串行通信技术在测控系统中占有很重要的地位,只用三根线.就可以方便的在2个数字设备之间进行信息的交换,实现全双工的传送数据,硬件成本低.而且通用性好。 2 串行通信的硬件设计 在所开发的系统中.红外测温仪将检测电力没备的工作和环境温度,通过RS 232C串口传给单片机,同时由单片机控制检测装置的在线工作组态
[单片机]
基于μClinux的SoPC应用系统设计详解
嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用程序四部分组成,其发展主要体现在芯片技术的进步上,以及在芯片技术限制下的算法与软件的进步上。随着芯片制造技术的发展,嵌入式系统的结构也随之发生了重大变革,从基于微处理器的嵌入式系统到基于微控制器的嵌入式系统,继而将可编程逻辑PLD(Programmable Logic Device)技术引入到嵌入式系统设计中,进而又发展到SoC(System on Chip),最终将PLD与嵌入式处理器结合而成为SoPC(System on Programmable Chip),使得SoPC成为嵌入式系统设计的一个发展趋势。    本文采用SoPC内嵌32位的软核处理器Nios
[嵌入式]
基于RFID技术的手术室物联网应用系统项目初探
  1.国内外本领域科技创新发展概况和最新发展趋势     大型医院每天服务患者多达数千,每天消耗的医疗器械、物品更是成千上万。不同的患者的医疗服务流程各有差异,且需多个诊疗部门协同作业。在医疗服务过程中,医护人员、医疗物品和器械等流动错综复杂,对现有的医疗管理系统提出了巨大挑战。由于医疗服务管理缺乏强有力的工具支持,依靠人工管理导致有限的医疗资源利用率偏低,患者等候时间过长,医疗服务成本昂贵和质量偏低等问题。    1.1 医疗管理信息技术依然面临存在的问题分析   1.1.1 信息的输入、输出和处理使得医疗服务流程变得更加复杂,且增加了医疗服务成本;   1.1.2医院内物品和人员流动的动态性,使得手工处理信息工作负荷
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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