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

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

3天内不再提示

基于比特表实现实时控制系统RTCS的任务调度算法研究

电子设计 来源:单片机与嵌入式系统应用 作者:张勰,龚龙庆 2020-09-11 17:57 次阅读

引言

微机控制领域中,许多单片机应用系统是实时控制系统RTCS(Real Time Control System)。在实时控制系统中,为了很好地完成外界信息的实时测量、计算和相应的多种实时控制操作,必须达到两个设计目标;实时性和并行性。即既要保证系统对外界信息以足够快的速度进行相应处理,又要同时完成多种任务操作。在这里,多种任务之间的调度是个关键。

RTCS 中允许多个实时任务并行地运行。例如,一测控系统中,具有数据采集、数据计算、键盘处理、定时打印等任务。在单机系统中,这些任务在宏观上是同时运行的,但在微观上只有一个任务运行。在RTCS中每个任务有三种状态,即运行状态、就绪状态和空闲状态。某个任务一旦建立后即处于这三种状态之一。处于运行状态的任务独占CPU和其它一些资源;就绪状态是某个任务现在应该运行,但由于其它任务正在运行,故只能暂时等待;当激发某个任务的条件不完备时,此任务就处于空闲状态。

RTCS中的多个任务依靠任务调度程序来决定系统中哪个任务可以获得CPU等资源或应暂时退出运行状态等,从而完成每个任务三态间的转换。在RTCS中,任务调度算法的优劣直接关系到系统的实时性能与并行性能。

RTCS中较简单的任务调度算法有“先来先执行的调度算法”、“按时间片循环执行的调度算法”。前者,当实时性比较差的任务长时间占用CPU时,会使得实时性较高的任务得不到及时处理,影响系统的实时性;后者,按照“先入先出”的原则激活某个任务,并分配给它们相等的时间片,从而使得多个任务有平等的享用CPU的权利。当时间片用完时,让任务“暂时”又处于就绪状态,并激活下一个任务。这种算法的实时性有一定程序的提高,但由于各任务简单均匀地循环轮回,从而使得实时性要求较高的任务得不到优先处理。由于各时间片相等且固定,很容易被某些紧急任务打断。在实时性要求较高而且任务较多的复杂情况下,各个任务的实时性要求不尽相同,不能简单地均匀分时处理任务。

基于比特表的任务调度算法,关键在于将CPU的全部时间化成若干个相等的时隙,同时根据任务的数目制定一张表格,以此来指示某一时刻的任务运行。它把任务按照实时性要求分成中断级、时钟级、基本级三类,而且它们的优先级依次递减。优先级越高,就越处于比特表的顶端位置。比特表是按照任务的优先级排队的,首先满足实时性较强的中断级和时钟级,而不管实时性最低的基本级任务。这样,时钟级任务一定能得到即时有效的处理,其实时性可以得到较好的保障,基本级任务可以没有时间限制。但是,时钟级任务的实时性并不是完全能够得到保障。下面举例讨论比特表算法的不足之处。

假定有表1所示的五种任务,按照常规比特表算法根本无法设计出这样的比特表。当时钟级的各级每次运行时间之和没有达到5ms时,比特表算法能够很好地满足系统实时性要求;然而,当中断级和时钟级的每次运行时间之和大于或者等于最高级实时性要求,更有甚者,当有一个时钟级任务的运行时间超过最高级实时性要求时,比特表算法就会失效。因为常规的比特表算法要求,只要激活比特表中安排的中断级和时钟级任务就必须一次执行完,否则,如果这个任务被中断就无法再得到执行。由于图像处理的运行时间为5ms,加上中断级任务执行时间,因此设计时隙必须大于5ms;而比特表的设计方法时隙只可能小于等于5ms(中断级任务和实时性最高的时钟级任务决定的)。所以,无论安排怎样的比徨表都无法使任务D满足实时性要求。基于这两种情况,本文提出一种用赋有优先权的时间来填充比特表的算法,以改善这两种情况。

1 比特表的改进算法

这种改进算法的关系在于把各任务划分为若干时间片,然后再根据实时性要求填入比特表中。根据比特表的设计方法,时隙间隔定为5ms,总时隙数为LCM(10/5,20/5,30/5)=6。把各中断级和时钟级任务运行时间的最大公约数定为时间片。即有如下计算公式:

T=GCD{Ti}

T为时间片,Ti为时钟级和中断级任务实时性要求,GCD(Greatest Common Divisor)求最大公约数,LCM(Lowest Common Multiple)求最小公倍数。

本例中的时间片T=GCD{0.5,1,2.5,1,5}=0.5ms。(假设时钟中断处理时间为0.5ms)。

时间片的分配,必须遵循以下原则:

①满足实时性要求;

②确保每一个时隙中所有分配的任务都必须完全运行;

③均衡考虑CPU对各任务的运行,优先考虑时钟级任务和中断级任务。

按上述原则,中断级任务分1个时间片,时钟级1分配2个时间片,时钟级2分配3个时间片,时钟级3分配1个时间片,时钟级4分配2个时间片,而将每个时隙剩余的时间分配给基本级任务。这样,即使是在系统最繁忙的时候也有一个时间片分配给基本级任务,从而弥补了比特表算法的不足。

综上所述,设计图1所示的比特表。

此比特表的时隙任务安排完全满足实时性要求。A任务每时隙运行1次,每时隙运行2个时间片。A任务每5ms运行1次。B任务每10ms运行1次,C任务每 20ms运行1次。由此可以得到各任务的启动顺序及执行时间如图2所示。

图2 任务的启动顺序和运行时间

图2中,I表示时钟中断处理程序,它的优先级最高。A、B、C、D为时钟级任务,其中A的优先级较高。将I、A、B、C、D处理完后余下的时间留给基本级E。

2 程序设计值得注意的问题

在任务调度算法中,关键是如何确定就绪队列、任务控制数据块的数据结构和解决资源冲突。就绪队列指明了在某一时刻已就绪、可被执行的任务队列。在数据结构上通常可用位映像的方法来实现。如系统的最多任务为32个,可采用4个字节的每一位来对应人某个任务。若此位为“1”,则表明该任务就绪;若为“0”,则表明任务空闲。并且可规定低位所代表的任务优先级高于高位所指示的任务。

某个任务投入运行时需保护现场数据,这些数据都存入一个地址固定的数据存储区,称为任务控制数据块。需保护的内容应按应用程序的特点来决定。对于常用的 MCS51系列的单片机来说,现场保护数据一般应包括PC、ACC、PSW、SP、DPTR等寄存器内容。任务控制数据块一般放在外部数据存储器内。为了查找方便,可以按任务号将各个任务数据块的首地址编成一个一维表格,表格的每行对应各任务数据块数据结构首地址,如图3所示。

在任务调度程序中,还应很好地解决资源的互斥问题,即保证不可共享的资源只被一个任务所访问。在RTCS中,各任务间并非完全隔绝,它们相互合作、相互竞争。例如,某系统中数据显示任务要定时显示某数据区的数据;数据计算任务也要在某种情况下计算、刷新此数据区内容。在这里,数据计算任务在运行时就不允许让显示任务中断计算任务;否则,有可能导致显示的数据不正确。解决资源竞争的方法往往是在主程序中设置一标志字节或标志位。例如,显示任务在运行时首先判断此标志,若发现计算任务尚未完成,则不做任何工作直接退出任务。

3 小结

RTCS 中的实时性和并行性是非常重要的,但两者之间有一定的矛盾。完全实现在两大特性的重要手段就是,采用有效的任务调度算法程序来协调两者之间的矛盾,从而保证系统的实时性和并行性。在简单系统中,“按时间片循环”调度算法已能初步满足要求;但在较复杂和要求较高的系统中,这显然不满足需要。基于BitMap 的调度算法能较好地满足比较复杂系统的要求,而对于前面讲到的系统中要求执行时间长、实时性要求较高的任务而言,单纯的BitMap算法无法满足要求,这个时候我们提出将比特表的时隙细分成时间片进行分配,这比BitMap按照任务进行分配的算法更能解决复杂任务的实时性要求。只要有效地确定任务数目和数据结构,RTCS中的实时性和并行性就能得到有效提高。

责任编辑:gt

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

    关注

    6000

    文章

    43970

    浏览量

    620766
  • 控制系统
    +关注

    关注

    41

    文章

    5962

    浏览量

    108685
  • 数据采集
    +关注

    关注

    38

    文章

    4514

    浏览量

    112313
收藏 人收藏

    评论

    相关推荐

    STM32F103 FreeRTOS任务调度异常的原因?

    系统设置2个任务系统运行时出现一些异常现象,请问有没有遇到过?是什么原因引起的? 方式1:系统运行正常 void Task1_Task(void * pvParameters) {
    发表于 04-16 06:24

    FreeRTOS任务调度器的三种调度算法讲解(下)

    配置如下时,调度算法就会变成不带时间片的抢占式调度
    的头像 发表于 03-21 13:46 605次阅读
    FreeRTOS<b class='flag-5'>任务</b><b class='flag-5'>调度</b>器的三种<b class='flag-5'>调度</b><b class='flag-5'>算法</b>讲解(下)

    FreeRTOS任务调度器的三种调度算法讲解(上)

    RZ/T2L是一款高性能MPU,可通过EtherCAT实现高速、高精度的实时控制
    的头像 发表于 03-21 13:43 578次阅读
    FreeRTOS<b class='flag-5'>任务</b><b class='flag-5'>调度</b>器的三种<b class='flag-5'>调度</b><b class='flag-5'>算法</b>讲解(上)

    浅谈智能照明控制系统在综合管廊中的设计应用与研究

    智能化、现代化技术成果的应用也日渐广泛。照明系统作为城市综合管廊设备系统中的一个重要组成部分,如何实现高效控制、节能环保等要求已经成为摆在我们面前的重要课题。经历多年的发展完善,智能照
    发表于 02-27 14:52

    【分享】EasyGo 链式SVG系统实时仿真应用

    实现电容均压以及相间平衡。 计算出调制波设定值后,采用 载波移相来生成多路脉冲。(本文主要介绍链式SVG的主电路仿真,控制系统系统只采用通用简单的控制策略,不作过多
    发表于 02-21 17:31

    DCS控制系统原理 DCS控制系统的基本功能

    DCS(分散控制系统)是一种广泛应用于工业自动化领域的控制系统。它具有分散控制、集中管理的特点,能够实现对生产过程的进行实时监测、
    的头像 发表于 02-02 11:17 642次阅读

    鸿蒙原生应用/元服务开发-延迟任务说明(一)

    添加到执行队列,系统会根据内存、功耗、设备温度、用户使用习惯等统一调度拉起应用。 二、运行原理 图1 延迟任务实现原理 应用调用延迟任务接口添加、删除、查询延迟
    发表于 01-16 14:57

    LabVIEW的六轴工业机器人运动控制系统

    LabVIEW开发六轴工业机器人运动控制系统 本项目开发了一个高效的工业机器人控制系统,重点关注于运动学算法和轨迹规划算法实现和测试。La
    发表于 12-21 20:03

    配网故障定位系统实现实时监测、精准控制

    随着电力系统的不断发展,配电网络的规模和复杂性也在不断增加,这使得配网故障的排查和处理变得越来越困难。为了提高配电网络的安全性和可靠性,业界纷纷引入了配网故障定位系统,以实现实时监测、精准控制
    的头像 发表于 12-12 10:49 245次阅读

    基于PLC的售油控制系统设计与实现

    电子发烧友网站提供《基于PLC的售油控制系统设计与实现.pdf》资料免费下载
    发表于 10-23 09:47 1次下载
    基于PLC的售油<b class='flag-5'>控制系统</b>设计与<b class='flag-5'>实现</b>

    基于单片机AT89C51的室内灯光控制系统研究和开发

    本篇论文介绍了就是基于单片机AT89C51的室内灯光控制系统研究和开发。本系统是以单片机为控制器的核心,本系统主要由光照检测电路、热释电红
    发表于 09-25 08:03

    如何使用PID控制算法优化控制系统

    当涉及到控制系统中的精确调节和稳定性,PID(比例-积分-微分)控制算法是一种不可或缺的工具。本文将简单介绍 PID 控制算法,从基本概念到
    的头像 发表于 08-29 16:39 1337次阅读
    如何使用PID<b class='flag-5'>控制</b><b class='flag-5'>算法</b>优化<b class='flag-5'>控制系统</b>

    PID算法控制系统中的特性和指标

    PID算法广泛的被应用在很多的控制系统中,最终的目的都是希望通过pid控制实现被控量能稳定在预期的目标值。
    的头像 发表于 08-22 11:05 706次阅读
    PID<b class='flag-5'>算法</b>在<b class='flag-5'>控制系统</b>中的特性和指标

    工业自动化之AGV控制系统通讯方案与接口设计

    工业应用中的AGV项目方案,考虑实际需求一般采用集中式控制系统,而集中式的AGV控制系统主要包括中央调度控制系统和车载控制系统两部分。中央
    的头像 发表于 05-15 14:33 2377次阅读
    工业自动化之AGV<b class='flag-5'>控制系统</b>通讯方案与接口设计

    STM32实现四驱小车电机控制任务之电机速度PID控制算法

    (四)姿态控制任务——偏航角串级PID控制算法,在本文中介绍电机的控制原理和使用CAN总线实现
    发表于 05-06 10:28 6次下载
    STM32<b class='flag-5'>实现</b>四驱小车电机<b class='flag-5'>控制</b><b class='flag-5'>任务</b>之电机速度PID<b class='flag-5'>控制</b><b class='flag-5'>算法</b>