0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文详解μC/OS-II的改进与应用研究

电子工程师 作者:工程师陈翠 2018-07-22 05:03 次阅读

传统的嵌入式系统设计大多采用单任务顺序机制,应用程序是一个无限的大循环,所有的事件都按顺序执行,与时间相关性较强的事件靠定时中断来保证,由此带来系统的稳定性、实时性较差;尤其当系统功能较复杂,且对实时性要求较严格时,这种单任务机制的弱点暴露无遗。本文引入的嵌入式操作系统μC/OS-II是一个多任务的实时内核,主要提供任务管理功能。在实时系统中的多个任务,必须决定这些任务的优先级顺序,任务调度算法需要动态为就绪任务的优先级排序。为了满足对实时性要求越来越高的需要,同时避免频繁改变就绪任务的优先级,在分析μC/OS-II源代码的基础上,对其调度算法进行改进。

1 μC/OS-II概述

μC/OS-II是一个完整的,可移植、可固化、可裁剪的占先式实时多任务内核;支持56个用户任务,支持信号量、邮箱、消息队列等常用的进程间通信机制;适用于各种微控制器微处理器;所有代码用ANSI C语言编写,程序的可读性强,具有良好的可移植性,已被移植到多种处理器架构中,在某些实时性要求严格的领域中得到广泛应用。

1.1 工作原理

μC/OS-II的核心工作原理是:近似地让最高优先级的就绪任务处于运行状态。首先初始化MCU,再进行操作系统初始化,主要完成任务控制块TCB初始化,TCB优先级表初始化,TCB链表初始化,事件控制块(ECB)链表初始化,空任务的创建等。然后,开始创建新任务,并可在新创建的任务中再创建其他新任务。最后,诃用OSStart()函数启动多任务调度。在多任务调度开始后,启动时钟节拍源开始计时,此节拍源给系统提供周期性的时钟中断信号,实现延时和超时确认。

1.2 任务调度

操作系统在下面的情况下进行任务调度:中断(系统占用的时间片中断OSTimeTick()、用户使用的中断)和调用API函数(用户主动调用)。一种是当时钟中断来临时,系统把当前正在执行的任务挂起,保护现场,进行中断处理,判断有无任务延时到期;若没有别的任务进入就绪态,则恢复现场继续执行原任务。另一种调度方式是任务级的调度,即调用API函数(由用户主动调用),足通过发软中断命令或依靠处理器在任务执行中调度。当没有任何任务进入就绪态时,就去执行空任务。

2 调度算法的改进

2.1 实时系统的调度策略

在操作系统的多任务调度算法的设计上,要根据系统的具体需求来确定调度策略。实时调度策略按不同的方法可以分为:静态/动态,基于优先级/不基于优先级,抢占式/非抢占式,单处理器/多处理器。其中,静态是指在任务的整个生命期内优先级保持不变,任务的优先级是在系统建立任务时确定的;动态是指在任务的生命期内,随时确定或改变它的优先级别,以适应系统工作环境和条件的变化。

μC/OS-II系统采用的是静态优先级分配策略,由用户来为每个任务指定优先级。虽然任务的优先级可通过OSTaskChangePrio()函数改变,但函数功能简单,仅以用户指定的新优先级来替换任务当前的优先级。随着实时嵌入式技术的发展,对嵌入式系统的实时性要求越来越高,多样化的调度方法己成为一种趋势。本文讨论动态优先级调度中的最优算法截止期最早优先算法的改进及其在μC/OS-II中的实现。

2.2 调度算法的改进

截止期最早优先算法是动态优先级调度算法中的最优算法。在截止期最早优先算法中,系统按任务的截止期给每个任务分配优先级。任务的截止期越早其优先级越高,反之亦然。为此,在本文所述截止期最早优先算法的改进中.需在μC/OS-II系统中增加表l所列的项目。

一文详解μC/OS-II的改进与应用研究

在截止期最早优先算法中,需要用户为任务指定其截止期。在本改进中,将OSTaskCreate()和OSTaskCreateExt()中的参数INT8U Prio改为INT8U deadline,并在函数内定义局部变量INT8U Prio来记录分配给任务的优先级。该算法改进也要在系统中增加OSTaskPrioCreate()函数,函数优先级分配的方法是按任务的截止期分配。该模块流程如图l所示。

一文详解μC/OS-II的改进与应用研究

在对就绪任务优先级进行调整时,该模块首先在数组中对任务的优先级完成调整并记录任务优先级的调整情况。在执行此函数后,就绪任务队列中任务的优先级可能会改变,园此还需要在μC/OS-II系统中添加prio_adjust()函数。该函数应用μC/OS-II系统原有的函数OSTaskChangePrio()来更新就绪任务,代码如下:

一文详解μC/OS-II的改进与应用研究

为防止多个任务同时调用OSTaskPrioCreate()函数造成混乱,这段代码应按临界资源来处理,需要在调用前关中断,调用后再开中断。

3 应用及评价

3.1 系统结构

在液压测量控制HPMC模块中,系统要求在18ms内完成对7个位置的传感器和用户键盘数据的实时采集、处理及显示;且对于采集到的不同测量数据,要求系统根据任务的紧迫程度,作出优先级不同的实时响应。

系统的结构如图2所示。由外向内分为3层:硬件电路层、任务层和操作系统层。

硬件电路层主要包括HPMC模块、用户操作、单片机控制模块。大致功能如下:HPMC模块主要完成传感器数据的实时采集;用户模块主要完成用户的操作;单片机控制模块用于控制数据的接收、处理、发送、短消息的收发等。

任务层并行存在lO个任务,每个任务均由以下3部分组成:应用程序、任务堆栈以及任务控制块,主要完成任务优先权的动态设置以及任务状态的转换。

操作系统层的设计主要是将μC/OS-II移植到单片机上。本系统采用Atmel公司的MCS-5l系列兼容单片机,同时完成各个任务的具体编程

3.2 算法评估

选择用动态调度还是静态调度是很重要的,这会对系统产生深远的影响。静态调度对时间触发系统的设计很适合,而动态调度对事件触发系统的设计很适合。静态调度必须事先仔细设计,并要花很大的力气考虑选择各种各样的参数;动态调度不要求事先作多少工作,而是在执行期间动态地作出决定。

在HPMC模块中,由于需对现场采集到的测量数据进行实时处理,故对系统的实时性提出了很高的要求。若采用μC/OS-II的静态优先级调度算法,当系统中任务优先级变化时则显得无能为力;同时通过在液压测量控制系统中的应用表明,改进后系统的实时性得到了极大改善。

结语

本文针对μC/OS-II静态调度算法进行改进,在系统中实现了截止期优先调度算法。通过在液压测量控制系统中的应用,表明这种改进能明显提高系统的实时性;但是改进后的算法对系统的内存、CPU等提出了更高的要求,存在一定的局限性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    μC/OS-II的特点

    μC/OS-II的特点1.μC/OS-II是由Labrosse先生编写的个开放式内核,最主要的特点就是源码公开。这
    发表于 07-15 14:51

    【图书分享】嵌入式实时操作系统μC/OS-II经典实例

    《嵌入式实时操作系统μC/OS-II经典实例:基于STM32处理器》作  者:刘波 等编著 内容简介 本书紧紧围绕μC/OS-II系统设计
    发表于 03-13 10:26

    uC/OS-II简介

    u C / O S 是种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。μC/OS-II 的前身是μC/
    发表于 10-08 09:11

    uC/OS-II简介

    u C / O S 是种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。μC/OS-II 的前身是μC/
    发表于 10-20 09:35

    uC/OS-II简介

    u C / O S 是种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。μC/OS-II 的前身是μC/
    发表于 10-27 09:29

    无线传感器网络基于μC/OS-II的低功耗改进

    采取的策略,提出了μCOS-II在无线传感器网络中应用的低功耗改进方法。经过移植、测试,改进后的μC/
    发表于 11-14 15:00

    μC/OS-II的移植方法

    属于抢占式,最多可以管理60个任务。目前国内对μC/OS-II研究和应用都很多。只要买本书就可获得源代码,对学校和教育的使用完全免费,商业应用的费用相对也很低。所以对μ
    发表于 07-25 08:14

    μC/OS-II的中断按键怎么处理?

    μC/OS-II个完整的、可移植、可裁减的占先式实时多任务内核。本文主要讨论了μC/OS-II环境下中断按键消抖处理及LCD多级菜单显示
    发表于 03-23 08:13

    μC/OS-II是什么?μC/OS-II有哪些应用?

    μC/OS-II的原理是什么?如何去改进μC/OS-II的调度算法?μC/
    发表于 04-26 07:17

    如何去改进μC/OS-II的关键算法?

    μC/OS-Ⅱ关键算法逻辑如何去改进μC/OS-II的关键算法?改进的μ
    发表于 04-27 06:37

    如何改进μC/OS-II内核的堆栈结构设计?

    μC/OS-II的堆栈结构如何改进μC/OS-II内核的堆栈结构设计?
    发表于 04-27 07:09

    μC/OS-II 任务调度机制的改进

    介绍μC/OS-II 任务调度机制,并提出一种改进方法,使μC/OS-II变成一个兼备实时与分时任务调度机制的操作系统; 论述改进后系统的特点和要注意的问题,给出部分源代码。
    发表于 04-15 11:21 14次下载

    μC/OS-II任务栈处理的改进设计

    已经有不少的文章介绍了有关μC/OS-II这个实时内核及其应用。在很多的处理器上,μC/OS-II都得到了应用。μC/OS-II是一种源码公开、可移植、可固化、可裁减、可剥夺的实时多任
    发表于 04-18 22:12 1044次阅读

    μC/OS-II在EP7312上的移植

    μC/OS-II在EP7312上的移植首先介绍μC/OS-II操作系统的特点,重点分析μC/OS-II在EP7312上的移植方法,介绍μC/OS-II在EP7312中的开发过程。
    发表于 06-16 11:24 1037次阅读
    μC/<b class='flag-5'>OS-II</b>在EP7312上的移植

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

    笔者将以μC/OS-II实时内核为例,通过对μC/OS-II改进,向读者描述一种缩短实时操作系统中断关闭时间的方法。
    发表于 05-23 11:15 1069次阅读
    μC/<b class='flag-5'>OS-II</b>中缩短中断关闭时间方法