基于μC/OS—II中的时钟节拍管理机制

发布者:江上HZ最新更新时间:2018-02-09 来源: eefocus关键字:μC  OS—II  时钟节拍  管理机制 手机看文章 扫描二维码
随时随地手机看文章

    为了有效管理时钟节拍并确保系统的实时性,μC/OS—III不仅增加了一个专门的系统任务来管理时钟节拍,而且采用哈希散列表机制来进一步减少时钟节拍处理过程所花费的时间。本文讨论μC/OS—II在时钟节拍管理方面的不足,并介绍μC/OS—III中的高效时钟节拍管理机制。

    在嵌入式实时操作系统(RTOS)中,任务可通过调用延时函数(比如μC/OS中的OSTimeDly()函数)将自己延时挂起一段时间。任务在延时的过程中会释放CPU使用权,也就是说,延时的任务不占用宝贵的CPU资源。延时的任务由时钟节拍服务跟踪管理。当任务延时结束并准备运行时,时钟节拍服务会使该任务恢复运行。时钟节拍服务定期运行,其运行由周期的时钟节拍中断触发,而时钟节拍中断可由硬件定时器产生。

    在μC/OS—III中,时钟节拍服务是在时钟节拍中断服务程序中完成的,每次时钟节拍服务都会遍历整个任务链表,递减所有延时任务的延时计数器。当任务数目较多时,时钟节拍服务处理时间很长,会造成中断延迟时间和任务延迟时间都变得很长,影响系统的实时性。

    在μC/OS—III中,时钟节拍服务不再在时钟节拍中断服务程序中完成,而是放到一个时钟节拍任务中完成。而且,通过采用啥希散列表机制来管理延时任务,每次时钟节拍服务只需要处理极少数的延时任务,从而大大减少了时钟节拍服务花费的时间,提高了系统的实时性。

    另外,在μC/OS系列RTOS中,时钟节拍服务除了会跟踪延时的任务,还会跟踪那些指定了超时时限的等待任务。也就是说,当指定的超时时限结束时,即使任务等待的事件没有发生,时钟节拍服务也会使该任务恢复运行。

    1 μC/OS—II中的时钟节拍管理机制

    在μC/OS—II中,每次时钟节拍服务都会遍历整个任务链表,依次处理各个任务。如果当前处理的任务的延时计数为0,那么跳过该任务,继续处理下一个任务;否则,把当前任务的延时计数减1,然后,判断减1后的延时计数是否为0。如果为0,表示任务延时结束了或等待超时了。由于μC/OS-Ⅱ允许其他任务调用OSTaskSuspend()函数强制挂起正在延时的任务,在这种情况下,不仅需要等到任务延时结束,还需要由其他任务调用OSTaskResume()函数解除该任务的强制挂起状态,该任务才能进入就绪态。因此,在延时计数递减为0的时候,还需要判断任务是否被强制挂起。只有任务没有被强制挂起,才能使该任务进入就绪态;否则,把延时计数设置为1,保持任务的延时状态。μC/OS—II时钟节拍服务函数的主要代码和注释如下:

    a.JPG

    在μC/OS—II中,由于每次时钟节拍服务都要遍历所有任务,因此,在任务数目较多时,其执行时间可能很长。另外,由于时钟节拍服务函数OSTimeTICk()由时钟节拍中断服务程序OSTicidSR()调用执行,因此当OSTimeTick()执行时间很长时,时钟节拍中断服务程序的执行时间也很长。在中断服务程序执行时,所有任务都无法执行,在这种情况下,系统的实时性会很差。

    2 μC/OS-III中的时钟节拍管理机制

    针对μC/OS—II时钟节拍服务的问题,μC/OS—III主要做了两点改进:①用时钟节拍任务来做时钟节拍处理;②用时钟节拍轮盘来分类管理延时任务以及指定超时时限的等待任务。

    2.1 时钟节拍任务

    在μC/OS—III中,增加了一个系统任务,即时钟节拍任务OS_TickTask()。该任务是μC/OS-III中两个总是会创建的系统任务之一。时钟节拍任务负责处理延时任务和指定超时时限的等待任务,这样,μC/OS—III就把时钟节拍的处理工作放到任务级代码中完成了。时钟节拍中断服务程序和时钟节拍任务之间的关系如图1所示。

b.JPG

    不论在μC/OS—II还是在μC/OS—III中,都需要一个硬件定时器(或其他能产生周期性中断的外设)来产生几十到上千赫兹的时钟节拍中断。时钟节拍中断的具体频率取决于所用的处理器的性能以及应用需求。时钟节拍中断频率越高,系统的延时精度越高,对处理器的处理能力要求也越高。
    每次产生时钟节拍中断,CPU都会跳转到时钟节拍中断服务程序(ISR)中执行。时钟节拍ISR会调用OSTimeTick()函数。前面提到过,μC /OS—II的时钟节拍ISR也会调用OSTimeTick()函数,在这一点上μC/OS—II和μC/OS—III看起来没有区别,但实际上μC/OS—III中的OS TimeTick()函数与μC/OS—II中的OSTimeTick()函数有很大区别。μC/OS—III中的OSTimeTick()函数主要完成如下操作:向时钟节拍任务发信号、调用OS_SchedRoundRobin()函数,以及向定时器任务发信号等。其中,后两点与时钟节拍的管理无关,这里不详细介绍。精简的OSTimeTick()函数如下面这段代码所示,其中只保留与时钟节拍管理相关的代码。
    e.jpg
    在μC/OS—III中,OSTimeTick()函数不需要遍历任务链表,只是通过OSTaskSemPost()函数向时钟节拍任务发信号。而时钟节拍任务绝大部分时间内都处于等待该信号的状态,每次收到该信号时,时钟节拍任务会恢复运行,调用OS_TiekListUpdate()函数处理延时的任务,然后再次进入等待该信号的状态,其代码如下:
    f.jpg
    c.JPG
    相比μC/OS—II的时钟节拍管理方式,μC/OS—III使用了专门的时钟节拍任务来处理时钟节拍,可大大减少时钟节拍中断服务程序的执行时间。

    μC/OS—III为了提高时钟节拍的处理速度,采用了哈希散列表机制来管理所有正在延时的任务和指定了超时时限的等待任务。这些任务都记录在时钟节拍列表(TICk List)中。时钟节拍列表包含两部分:一个称为时钟节拍轮盘的数组(OSCfg_TickWheel[])和一个时钟节拍计数器(OSTickCTR),如图2所示。

d.JPG

    时钟节拍列表中的每个任务都有一个延时结束时刻或等待超时时限,假设为TM。比如,一个任务在时钟节拍计数器数值为OSTickCtr时调用OSTimeDly()延时dly个时钟节拍,那么该任务的延时结束时刻TM就等于OSTickCtr+dly。然后,用TM和时钟节拍轮盘的表项个数(OS_CFG_TI CK_WHEEL_SIZE)做取模运算,就可以得到一个余数I(I=TM%OS_CFG_TICK_WHEEL_SIZE)。那么,该延时任务就会放到时钟节拍轮盘第1个表项指向的任务链表中。

    时钟节拍轮盘的每个表项都有3个成员:“.NbrEntriesMax”、“.NbrEntries”和“.FirstPtr”。其中,“.FirstPtr”指向该表项对应的任务链表,所有分配到该表项的延时任务或指定超时时限的等待任务都会放到该任务链表中。“.NbrEntries”和“.NbrEntries Max”分别记录任务链表中的当前任务数目和历史最大任务数目。在任务链表中,任务按照延时结束时刻或超时时限排序,结束时刻早的任务排在链表的前面。

    通过采用哈希散列表机制,在每次时钟节拍服务时,只需要处理时钟节拍轮盘的某个特定表项所指向的任务链表,因为恰好在该时钟节拍服务时延时结束或等待超时的任务都一定处于该表项所指向的任务链表中,而该表项的索引号就等于OSTickCtr%OS_CFG_TICK_WHEEL_SIZ E。另外,由于各个表项指向的任务链表中的任务是按照延时结束时刻和等待超时时限的顺序进行排序的,这样,在处理当前任务链表时,就可以从位于链表头部的任务开始判断任务延时结束时刻或等待超时时限是否等于OSTickCtr的当前值。如果等于,说明该任务延时结束或等待超时了,然后,再判断下一个任务;如果不等于,说明该任务延时没有结束或等待没有超时,同时也说明,排在链表后面的任务都不可能延时结束或等待超时,因此,可以立即结束对任务链表的处理。

    由于采用了哈希散列表机制,μC/OS—III中的时钟节拍服务在大部分情况下只需要判断极少数任务的延时结束时刻或超时时限,看其是否等于时钟节拍计数器的当前值,这相比μC/OS—II中需要遍历整个任务链表的时钟节拍服务,显然效率要高很多。

    结语

    μC/OS—II中的时钟节拍服务有两个不足之处:一是需要遍历整个任务链表,二是需要在时钟节拍中断服务程序中进行时钟节拍的处理工作。当系统中任务数目较多时,会影响系统的实时性,这对于一个实时嵌入式操作系统来说是不完善的地方。在μC/OS—III中,通过增加一个时钟节拍系统任务并采用哈希散列表机制,很好地解决了这两点问题,即使在系统任务数目很多的时候,也可以确保系统的实时性。


关键字:μC  OS—II  时钟节拍  管理机制 引用地址:基于μC/OS—II中的时钟节拍管理机制

上一篇:基于ARM处理器的CAN节点可靠性设计
下一篇:嵌入式系统与ZigBee无线技术相结合的通用网络测控

推荐阅读最新更新时间:2024-03-16 15:54

第三代半导体头部企业基本半导体完成C1轮融资
9月17日,专注于第三代半导体碳化硅功率器件的深圳基本半导体有限公司完成C1轮融资,由现有股东博世创投、力合金控,以及新股东松禾资本、佳银基金、中美绿色基金、厚土资本等机构联合投资。本轮融资将继续用于加速碳化硅功率器件的研发和产业化进程。 当前,第三代半导体正处于快速发展的黄金赛道。基本半导体经过多年深耕,掌握了国际领先的碳化硅核心技术,研发领域覆盖碳化硅的材料制备、芯片设计、晶圆制造、封装测试、驱动应用等全产业链,先后推出全电流电压等级的碳化硅肖特基二极管及MOSFET、车规级碳化硅功率模块、碳化硅驱动芯片及模块等系列产品,性能达到国际先进水平。基本半导体已经与新能源、电动汽车、智能电网、轨道交通、工业控制等行业众多标
[半导体设计/制造]
第三代半导体头部企业基本半导体完成<font color='red'>C</font>1轮融资
LG与高通计划在韩建立研发中心 研发C-V2X技术
  据外媒报道,LG与 高通 于近日宣布,双方计划在韩国建立一家联合研发中心,旨在研发车用级5G网络及基于蜂窝的车辆到一切(cellular vehicle to everything, C-V2X )技术。下面就随汽车电子小编一起来了解一下相关内容吧。 LG与高通计划在韩建立研发中心 研发C-V2X技术   LG在公司声明中称,双方将致力于研发各类互联车辆车载系统并认为:对实现下一代自动驾驶车辆而言,上述技术及车载系统将发挥至关重要的作用。相较于车联网当前所采用的专用短程通信技术(DSRC), C-V2X 技术旨在以较低的成本提升运行时间。   各大业内知名的移动运营商及车企均开始采用 C-V2X 级5G技术,致力于互
[汽车电子]
LG与高通计划在韩建立研发中心 研发<font color='red'>C</font>-V2X技术
RSA算法的TMS320C54x DSP实现
引言 在当今的电信时代,由于采用大规模的电子计算机对数据进行处理,使得信息的传递大大加速,但是,也随之出现了令人最为担心的问题,就是信息的安全性。对信息进行保护的方法就是数据加密,通过对网络上传输的数据和系统内存储的数据进行加密,可以大大提高网络和信息的安全性。以较高的安全性而被广泛采用的RSA公钥密码体制,在现代安全性制中占有重要地位。RSA算法由于在加密和解密过程中要进行大量的数值运算,存在难以实现的问题;而采用纯软件的方式实现RSA算法,虽然降低了解密的强度,但却增加了运算时间。本文采用一种软硬件相结合的方式来实现RSA算法。 DSP(Digital Signal Processor)芯片,即数字信号处理器,是一种特
[单片机]
RSA算法的TMS320<font color='red'>C</font>54x DSP实现
C51单片机编程规范总则
简介:本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对C51编程语言和keil编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。 1.单片机C51编程规范-总则 格式清晰 注释简明扼要 命名规范易懂 函数模块化 程序易读易维护 功能准确实现 代码空间效率和时间效率高 适度的可扩展性 2. 单片机C51编程规范-数据类型定义 编程时统一采用下述新类型名的方式定义数据类型。 建立一个datatype.h文件,在该文件中进行如下定义: typedef bit BOOL; // 位变量 // typedef unsigned char INT8U; // 无符号8位整型变量 //
[单片机]
莱迪思新一代USB 3.1 Type-C接口供电解决方案加快下一代USB接口开发
莱迪思推出全球首个可编程USB 3.1 Type-C接口解决方案,帮助制造商在最短时间内实现产品上市。 美国俄勒冈州希尔斯波罗市 — 2014年9月9日 —莱迪思半导体公司(NASDAQ: LSCC)——超低功耗、小尺寸客制化解决方案市场的。 领导者,今日宣布推出USB 3.1 Type-C接口供电解决方案,使得制造商能够立即开始USB 3.1 Type-C接口的开发并在最短的时间内实现产品上市。 最新发布的USB 3.1 Type-C规范定义了适用于智能手机、平板电脑和其他移动设备的微型插头,而莱迪思的供电解决方案全面解决了该规范下所有关键的供电相关的功能。 “USB 3.1 Type-C接口的显著优
[嵌入式]
C8051F340单片机对施药喷雾机的控制设计
水果种植业是我国农业发展的重要组成部分,果树病虫害防治作业也越来越被重视。当下我国施药水平总体偏低,主要表现在自动化技术落后、作业强度大、农药浪费严重等问题。为了解决这一现象,提高果树施药喷雾效率和农药附着率,文中设计了新型喷雾机构及其控制系统,该机构能够针对不同果树尺寸来调节喷雾距离。作业人员可以远距离操作手持式控制器即可调节喷雾参数(包括每侧喷雾头的开闭、喷雾机构伸缩长度、轴流风机送风转速等),这在很大程度上降低了劳动强度,提高了施药效果。 1 系统工作原理 本系统结合了机械和电子技术,由机械部分和控制部分构成。施药喷雾过程中喷雾头与冠层的距离要求适中,而果园内的果树形状尺寸各异,因此应用了电动推杆作为执行元件安装于机械系
[单片机]
<font color='red'>C</font>8051F340单片机对施药喷雾机的控制设计
C语言和汇编语言在开发单片机时有哪些不同
  1. C语言和汇编语言在开发单片机时各有哪些优缺点?   答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。   C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。   对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编
[单片机]
80C51和CH375的USB打印机驱动设计
引 言   本课题来源于北京普析通用公司的一个项目。由于公司现有单机版光谱仪器产品(如1810、T6等)采用的是并行口打印技术,而随着USB打印机技术的逐渐普及,并行口打印机越来越不好买到,而且有些用户的打印机只是USB接口而非并行口,因此现有仪器产品对打印机的支持变得不能适应用户需要。为了实现能将公司的并行口仪器直接和USB打印机相连进行打印,决定设计开发一款LPT-USB打印机的驱动器,负责并口仪器和USB打印机的连接。   本文利用单片机和USB总线接口芯片实现LPT-USB打印机的驱动器设计。利用该设计将能够实现并行打印口数据可以在USB打印机上的直接打印工作,克服了有些并口仪器必须连接并口打印机才能打印的弊端,极大地方
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

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

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


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

502 Bad Gateway


openresty