您的位置 首页 硬件

嵌入式μC/OS-II体系中根据ECB根本存储单元完成信号量办理的规划

嵌入式μC/OS-II系统中基于ECB基本存储单元实现信号量管理的设计-随着嵌入式技术的发展,实时操作系统RTOS(Real Time Operating System)被越来越多地应用在嵌入式系统中,但是对现有基于软件实现的RTOS,单纯依靠改进调度算法已经不能使系统的实时性有很大提高。为提高系统的响应能力,国内外一些研究机构提出RTOS硬化的方法,并开始做这方面的研究工作。目前,软件硬化常用的有两种方法:(1)微程序方式,特点是成本较低,方便灵活;(2)组合逻辑方式,特点是速度快、可靠性高,随着大规模集成电路的发展,这种方式逐渐显示出优越性。信号量管理是RTOS中频繁运行的程序段之一,如果将这一部分用硬件实现,对提高机器的速度将有很明显的效果。本文采用组合逻辑方式参照μC/OS-II将信号量管理及ECB管理硬化到一片芯片上,作为独立的模块与处理器并行工作。

跟着嵌入式技能的开展,实时操作体系RTOS(Real Time OperaTIng System)被越来越多地应用在嵌入式体系中,可是对现有依据软件完结的RTOS,单纯依托改善调度算法现已不能使体系的实时性有很大进步。为进步体系的呼应才能,国内外一些研究机构提出RTOS硬化的办法,并开端做这方面的研究作业。现在,软件硬化常用的有两种办法:(1)微程序方法,特点是本钱较低,便利灵敏;(2)组合逻辑方法,特点是速度快、牢靠性高,跟着大规模集成电路的开展,这种方法逐步显示出优越性。信号量办理是RTOS中频频运转的程序段之一,假如将这一部分用硬件完结,对进步机器的速度将有很显着的作用。本文选用组合逻辑方法参照μC/OS-II将信号量办理及ECB办理硬化到一片芯片上,作为独立的模块与处理器并行作业。

1、信号量办理的作业原理

μC/OS-II中信号量首要数据结构由两部分组成:(1)信号量的计数值Cnt。当数值为正时用于记载可运用的资源数,当数值为负,其绝对值标明等候当时信号量的使命个数;(2)等候该信号量的使命列表。信号量的根本数据结构需求请求一个ECB来存储。一个使命或ISR可以经过ECB向别的的使命发信号,一个使命可以等候另一个使命或中止服务子程序给它发送信号,多个使命可一起等候同一个事情的产生。当事情产生后,等候该事情的优先级最高的使命进入安排妥当状况,触发一次使命调度。使命或许中止服务子程序都可以给ECB发信号,对ECB进行操作。

信号量办理的作业原理框图如图1所示。信号量办理模块以及事情操控块办理都是独立于CPU的逻辑结构,都可以直接从数据总线上取得数据信息进行处理,在信号量办理模块与ECB的存储模块间树立一条数据通路,在不添加总线担负的情况下加速二者间的通讯。这些硬件逻辑独立于CPU作业,削减了CPU的作业,然后进步体系的呼应才能。

嵌入式μC/OS-II体系中依据ECB根本存储单元完结信号量办理的规划

2、 信号量办理的硬件规划与完结

2.1 ECB的规划与完结

ECB是完结信号量办理的根本数据结构,因而在规划完结信号量办理之前,要先完结ECB办理的规划与完结。本体系中ECB的结构参照μC/OS-II中ECB的结构规划。每个ECB存储单元包括一个EventType(事情类型),用于符号当时ECB被分配给信号量、互斥型信号量、邮箱仍是音讯行列;当一个ECB被分配给信号量时,Cnt做为信号量的计数器;ECB中的等候表lut用于存储等候当时信号量使命的优先级(μC/OS-II中没有两个使命有相同的优先级)。

ECB中等候表硬件完结的结构示意图如图2所示。等候表的结构相似一个8行8列的矩阵,存储单元编号从00~77。当一个使命在请求当时信号量而没有取得时,应将当时使命设置为等候状况,令Wr有用,以请求该信号量使命的优先级为地址,进行译码,选通相应单元后再进行写1操作。例如,请求该信号量的使命优先级Sid为111111时,对其进行译码,高三位行地址译码为10000000,低三位列地址译码为10000000,选中77单元向其写入1,则优先级为111111的使命进入等候状况。若要将一个处于等候表中的使命删去,令De有用,相同,依据地址线选通某一存储单元,向单元内写0,然后删去某一处于等候状况的使命。在操控电路中设置EventGrp 8位寄存器,用于记载当时各行中是否有等候使命;如图2所示,第i行中某一方位为1,EventGrp(i)=1,图中状况EventGrp(7)=1、EventGrp(6)=1、EventGrp(0)=0。Rd有用时,操控电路依据EventGrp选用必定算法生成优先级的高三位;依据EventGrp读出某行后生成优先级低三位;下一时钟送出最高优先级。以上为对等候表进行根本读写操作的进程。

嵌入式μC/OS-II体系中依据ECB根本存储单元完结信号量办理的规划

该硬件体系中ECB根本存储单元经过调用体系的IP核来完结,依据存储数据的不同,选用不同的IP核;多个根本单元经过一个上层文件生成一个ECB单元,每个单元再作为一个根本器材用于完结整个ECB的存储体。经过地址的译码选通ECB单元,依据操控信号对数据做读写操作。

2.2 创立/删去一个信号量

ECB是公共数据结构,在传统的操作体系中创立一个信号量时,首要需求请求一个ECB,初始化后才可以对这个信号量进行P/V等操作;在删去一个信号量后,要对信号量占用的ECB进行开释。创立信号量时,信号量办理模块首要要请求一个空ECB,查找ECB的整个存储体判别是否有空余的ECB。假如没有空余ECB,则信号量办理模块将取得一个请求失利信号;不然将取得一个空ECB的地址,并将其回来给创立该信号量的使命;再依据地址初始化ECB。假如用硬件完结信号量办理后,依照以上进程进行操作会糟蹋许多时钟,数据在模块间来回传送添加通讯次数,必定下降体系的履行速度。针对这个问题,提出了在信号量办理模块中设置一个用于记载ECB运用情况的映射表,如图3所示。为便利评论,假定体系中ECB有64个(可以依据体系中ECB的个数来改动表的巨细),表的每个方位对应一个ECB,当某一方位为0时标明该方位对应的ECB闲暇,为1时标明该方位对应的ECB被占用。如图3所示,第1行、第8列为1,标明偏移地址为000111的ECB被占用;第2行、第2 列为1,偏移地址为010010的ECB被占用。

嵌入式μC/OS-II体系中依据ECB根本存储单元完结信号量办理的规划

在创立一个信号量时,查找ECB映射表,判别是否有为0的方位。假如没有则回来请求失利;不然寻觅一个为0的方位,生成ECB的地址,回来给创立该信号量的使命。在映射表中相应方位写1标明该ECB现已被占用,下一时钟对请求到的ECB进行初始化,写入信号量初始值。在删去一个信号量时,首要依据信号量的ECB地址查询映射表中对应方位是否为0,假如为0,则标明该信号量现已被其他使命删去,回来删去过错;不然铲除该信号量在映射表中的记载,告诉ECB办理模块将等候该信号的一切使命置为安排妥当态,触发一次使命调度,铲除ECB中的该信号量的一切信息。以上进程中不需求频频地去ECB办理模块中进行全体查询,因而节省了很多的通讯时刻。

2.3 请求/开释一个信号量(P/V操作)

信号量办理中的首要操作便是P/V操作,P/V操作完结的RTL图如图4所示。

嵌入式μC/OS-II体系中依据ECB根本存储单元完结信号量办理的规划

(1)P操作(请求某个信号量)。令pend_sem有用,首要应判别请求信号量的使命是否为中止服务程序(在μC/OS-II中,中止服务程序不允许请求一个信号量),假如是则回来请求过错信息(pend_err为高),不然进行以下操作:令read_cnt有用去ECB办理模块读Cnt值;读回后判别Cnt的值。假如Cnt》0,当时请求使命取得该信号量,使命持续履行,回来请求成功信号pend_err为低;不然pend_err为高阻,依据请求类型Pend_type(请求类型在μC/OS-II中分为有等候请求和无等候请求)来决议是否修正Cnt值,是否将请求信号量的使命置为等候态。

(2)V操作。令post_sem有用,经过硬件电路使read_cnt有用,一起给出信号量的ECB地址,下一时钟读出Cnt值,并判别;假如Cnt》0则标明没有使命等候当时信号量,修正Cnt值;假如Cnt《0则标明当时有使命等候该信号量,修正Cnt值,令select_h有用,从ECB使命等候表中找出优先级最高的使命,告诉使命办理器将该使命置为安排妥当态,触发一次使命调度。 3 功用仿真

为验证规划对体系功用的影响,选用ISE 8.2软件对各个模块进行时序仿真。P/V操作仿真成果如图5所示。P/V操作需求在两个模块之间进行读写数据,操作进程中,P/V信号一直有用。

嵌入式μC/OS-II体系中依据ECB根本存储单元完结信号量办理的规划

(1)pend_sem有用(P操作)。请求信号量使命的优先级为01,请求信号量的地址为05。pend_sem有用,令read_cnt为高,依据地址pend_addr读当时信号量的值Cnt,下一个时钟回来数值Cnt_in为0002,大于0;使命取得信号量持续履行,wr_cnt为高,Cnt值进行减1操作后送Cnt_out写回ECB。

(2)post_sem有用(V操作)。依据地址读Cnt值,Cnt值为FFFE《0(Cnt值以补码方式存储)。下一个时钟Cnt进行加1操作后写回ECB,一起Select_h为高,从等候该信号量的使命列表中挑选出优先级最高的使命设置为安排妥当态,触发一次使命调度。

(3)请求一个信号量。请求信号量使命的优先级为03,请求的信号量的地址为09。假如下一个时钟读回的Cnt值为FFFD《0,而且请求类型为高(有等候请求),则修正Cnt值写回,令wr_sid为高,将当时请求使命的优先级送pend_prio_out写入等候该信号的使命列表中。

(4)请求一个信号量,读回的Cnt值为FFFA《0,但当时请求类型为低(无等候请求),不进行任何操作,回来请求失利,告诉使命办理器将当时使命堵塞。

用户程序在创立、删去一个信号量以及请求某类共享资源进行P/V操作时,用软件完结信号量办理中,一般先从用户态转到体系态,然后进行根本数据的查询、读出、比较、判别等,再转相应的程序进口,最终还要从体系态转回用户态。而用硬件完结信号量办理后进行以上操作只需一条读或写指令,而且这条指令在用软件完结的信号量办理中也是有必要的,其他操作都由硬件逻辑来完结,简化了操作进程。因而,硬化信号量办理后对整个机器速度的进步是十分显着的,特别是对资源品种多、数量大的计算机体系,速度的进步就会愈加显着。另一方面,因为硬件的牢靠性远超过软件的牢靠性,所以硬化后可进步RTOS的牢靠性。

单片机处理器才能的进步和应用程序功用的复杂化、准确化,迫使应用程序划分为多个重要性不同的使命,在各使命间优化地分配CPU时刻和体系资源,一起还要确保实时性。靠用户自己编写一个完结上述功用的内核一般是不现实的,而这种需求又是遍及的。在这种局势之下,由专业人员编写的、满意大多数用户需求的高功用RTOS内核便是一种必定成果了。对程序实时性和牢靠性要求的进步也是RTOS开展的一个原因。此外,单片机体系软件开发日趋工程化,产品进入市场时刻不断缩短,也迫使办理人员寻觅一种有利于程序继承性、标准化、多人并行开发的办理方法。从久远的意义上来讲,RTOS的推行可以带来嵌入式软件工业更有用、更专业化的分工,削减社会重复劳动、进步劳动生产率。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/95541.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部