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

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

3天内不再提示

基于ECB存储单元的信号量管理的硬件设计与实现

电子设计 来源:郭婷 作者:电子设计 2019-07-23 08:14 次阅读

嵌入式技术执行专用功能并被内部计算机控制的设备或者系统。嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,用术语表示就是固件(firmware),终端用户很难或者不可能改变固件。尽管绝大多数嵌入式系统是用户针对特定任务而定制的,但它们一般都是由下面几个模块组成的: 一台计算机或者微控制器,字长可能是可怜的4位或者8位、16位、32位甚至是64位。 用以保存固件的ROM(非挥发性只读存储器)。 用以存程序数据的RAM(挥发性的随机访问存储器)。 连接微控制器和开关、按钮、传感器、模数转化器、控制器、LED(发光二极管)和显示器的I/O端口。 一个轻量级的嵌入式操作系统,一般是自行编写的。 专门的单片微控制器是大多数嵌入式系统的核心。通过把若干个关键的系统组成部分集成到单个芯片上,系统设计者就可以得到小而便宜、可以操作较少外围电子设备的计算机。

随着嵌入式技术的发展,实时操作系统RTOS(Real Time Operating System)被越来越多地应用在嵌入式系统中,RTOS,即:实时系统(Real-time operating system),实时系统能够在指定或者确定的时间内完成系统功能和外部或内部、同步或异步时间做出响应的系统。它的正确性不仅依赖系统计算的逻辑结果,还依赖于产生这个结果的时间。因此实时系统应该在事先先定义的时间范围内识别和处理离散事件的能力;系统能够处理和储存控制系统所需要的大量数据。 为了便于理解,机场的售票系统就是一个典型的实时系统。目前,软件硬化常用的有两种方法:(1)微程序方式,特点是成本较低,方便灵活;(2)组合逻辑方式,特点是速度快、可靠性高,随着大规模集成电路的发展,这种方式逐渐显示出优越性。信号量管理是RTOS中频繁运行的程序段之一,如果将这一部分用硬件实现,对提高机器的速度将有很明显的效果。

1 信号量管理的工作原理

μC /OS-II是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核。μC/OS-II绝大部分的代码是用ANSI的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。至今,从8位到64位,μC/OS-II已在超过40种不同架构上的微处理器上运行。μC/OS-II已经在世界范围内得到广泛应用,包括很多领域, 如手机、路由器、集线器、不间断电源、飞行器、医疗设备及工业控制上。实际上,μC/OS-II已经通过了非常严格的测试,并且得到了美国航空管 理局(Federal Aviation Administration)的认证,可以用在飞行器上。这说明μC/OS-II是稳定可靠的,可用于与人性命攸关的安全紧要(safety critical)系统。除此以外,μC/OS-II 的鲜明特点就是源码公开,便于移植和维护。

μC/OS-II中信号量主要数据结构由两部分组成:(1)信号量的计数值Cnt。当数值为正时用于记录可使用的资源数,当数值为负,其绝对值表示等待当前信号量的任务个数;(2)等待该信号量的任务列表。信号量的基本数据结构需要申请一个ECB来存储。一个任务或ISR可以通过ECB向另外的任务发信号,一个任务可以等待另一个任务或中断服务子程序给它发送信号,多个任务可同时等待同一个事件的发生。

信号量管理的工作原理框图如图1所示。信号量管理模块以及事件控制块管理都是独立于CPU的逻辑结构,都可以直接从数据总线上获得数据信息进行处理,在信号量管理模块与ECB的存储模块间建立一条数据通路,在不增加总线负担的情况下加快二者间的通信

基于ECB存储单元的信号量管理的硬件设计与实现

2 信号量管理的硬件设计与实现

2.1 ECB的设计与实现

ECB是实现信号量管理的基本数据结构,因此在设计实现信号量管理之前,要先完成ECB管理的设计与实现。本系统中ECB的结构参照μC/OS-II中ECB的结构设计。每个ECB存储单元包含一个EventType(事件类型),用于标记当前ECB被分配给信号量、互斥型信号量、邮箱还是消息队列;当一个ECB被分配给信号量时,Cnt做为信号量的计数器;ECB中的等待表lut用于存储等待当前信号量任务的优先级。

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读出某行后生成优先级低三位;下一时钟送出最高优先级。以上为对等待表进行基本读写操作的过程。

基于ECB存储单元的信号量管理的硬件设计与实现

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

2.2 创建/删除一个信号量

ECB是公共数据结构,在传统的操作系统中创建一个信号量时,首先需要申请一个ECB,初始化后才可以对这个信号量进行P/V等操作;在删除一个信号量后,要对信号量占用的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被占用。

基于ECB存储单元的信号量管理的硬件设计与实现

在创建一个信号量时,查找ECB映射表,判断是否有为0的位置。如果没有则返回申请失败;否则寻找一个为0的位置,生成ECB的地址,返回给创建该信号量的任务。在映射表中相应位置写1表明该ECB已经被占用,下一时钟对申请到的ECB进行初始化,写入信号量初始值。在删除一个信号量时,首先根据信号量的ECB地址查询映射表中对应位置是否为0,如果为0,则表示该信号量已经被其他任务删除,返回删除错误;否则清除该信号量在映射表中的记录,通知ECB管理模块将等待该信号的所有任务置为就绪态,触发一次任务调度,清除ECB中的该信号量的所有信息。

2.3 申请/释放一个信号量(P/V操作)

信号量管理中的主要操作就是P/V操作,P/V操作实现的RTL图如图4所示。

基于ECB存储单元的信号量管理的硬件设计与实现

(1)P操。令pend_sem有效,首先应判断申请信号量的任务是否为中断服务程序(在μC/OS-II中,中断服务程序不允许申请一个信号量),如果是则返回申请错误信息,否则进行以下操作:令read_cnt有效去ECB管理模块读Cnt值;读回后判断Cnt的值。如果Cnt>0,当前申请任务获得该信号量,任务继续执行,返回申请成功信号pend_err为低;否则pend_err为高阻,根据申请类型Pend_type来决定是否修改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信号始终有效。

基于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的推广能够带来嵌入式软件工业更有效、更专业化的分工,减少社会重复劳动、提高劳动生产率。


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

    关注

    48

    文章

    7489

    浏览量

    151053
  • 控制器
    +关注

    关注

    112

    文章

    16203

    浏览量

    177419
  • 嵌入式
    +关注

    关注

    5068

    文章

    19020

    浏览量

    303308
收藏 人收藏

    评论

    相关推荐

    FreeRTOS信号量使用教程

    信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步, FreeRTOS中信号量又分为二值信号量、 计数型
    的头像 发表于 12-19 09:22 3115次阅读
    FreeRTOS<b class='flag-5'>信号量</b>使用教程

    硬件实时操作系统信号量管理的工作原理是什么?

    )组合逻辑方式,特点是速度快、可靠性高,随着大规模集成电路的发展,这种方式逐渐显示出优越性[2]。信号量管理是RTOS中频繁运行的程序段之一,如果将这一部分用硬件实现,对提高机器的速度
    发表于 10-30 06:35

    请问信号量是一种特殊的ECB吗?

    可以说信号量就是一种特殊的ECB吗?
    发表于 03-09 04:36

    使用FAMOS管的存储单元

    使用FAMOS管的存储单元
    发表于 12-04 12:27 951次阅读
    使用FAMOS管的<b class='flag-5'>存储单元</b>

    硬件实时操作系统信号量管理的工作原理是什么?怎样去实现它?

    硬件系统中ECB基本存储单元通过调用系统的IP核来实现,根据存储数据的不同,采用不同的IP核;多个基本
    发表于 07-18 08:30 4245次阅读
    <b class='flag-5'>硬件</b>实时操作系统<b class='flag-5'>信号量</b><b class='flag-5'>管理</b>的工作原理是什么?怎样去<b class='flag-5'>实现</b>它?

    你了解Linux 各类信号量

    内核信号量与用户信号量,用户信号量分为POXIS信号量和SYSTEMV信号量,POXIS信号量
    发表于 05-04 17:19 2492次阅读
    你了解Linux 各类<b class='flag-5'>信号量</b>?

    嵌入式μC/OS-II系统中基于ECB基本存储单元实现信号量管理的设计

    方式,特点是速度快、可靠性高,随着大规模集成电路的发展,这种方式逐渐显示出优越性。信号量管理是RTOS中频繁运行的程序段之一,如果将这一部分用硬件实现,对提高机器的速度将有很明显的效果
    发表于 03-10 10:25 1343次阅读
    嵌入式μC/OS-II系统中基于<b class='flag-5'>ECB</b>基本<b class='flag-5'>存储单元</b><b class='flag-5'>实现</b><b class='flag-5'>信号量</b><b class='flag-5'>管理</b>的设计

    存储单元结构

    静态RAM的基本构造块是SRAM存储单元。通过升高字线的电平触发存储单元,再通过位线对所触发的存储单元进行读出或写入。在静态CMOS存储器中,存储单
    发表于 05-14 09:19 3717次阅读
    <b class='flag-5'>存储单元</b>结构

    详解互斥信号量的概念和运行

    1 、互 斥 信 号 1.1 互斥信号量的概念及其作用 互斥信号量的主要作用是对资源实现互斥访问,使用二值信号量也可以
    的头像 发表于 10-22 11:57 1.1w次阅读
    详解互斥<b class='flag-5'>信号量</b>的概念和运行

    Linux信号量(2):POSIX 信号量

    存储)置于可选部分中。在 SUSv4 之前,POSIX 信号量接口已经被包含在信号量选项中。在 SUSv4 中,这些接口被移至了基本规范,而消息队列和共享存储接口依然是可选的。 POS
    的头像 发表于 10-29 17:34 690次阅读

    LINUX内核的信号量设计与实现

    控制路径可以睡眠。我们从 LINUX内核信号量最直观的设计/实现出发,通过一步步改进,揭示在x86平台上完整的信号量设计/实现,然后探讨在不同平台上通用的
    发表于 01-14 16:55 5次下载

    开源硬件信号量在行动

    电子发烧友网站提供《开源硬件信号量在行动.zip》资料免费下载
    发表于 11-16 10:22 0次下载
    开源<b class='flag-5'>硬件</b><b class='flag-5'>信号量</b>在行动

    FreeRTOS的二值信号量

    FreeRTOS中的信号量是一种任务间通信的方式,信号量包括:二值信号量、互斥信号量、计数信号量,本次实验只使用二值
    的头像 发表于 02-10 15:07 1460次阅读

    使用Linux信号量实现互斥点灯

    信号量常用于控制对共享资源的访问,有计数型信号量和二值信号量之分。初始化时信号量值大于1的,就是计数型信号量,计数型
    的头像 发表于 04-13 15:12 788次阅读
    使用Linux<b class='flag-5'>信号量</b><b class='flag-5'>实现</b>互斥点灯

    存储单元是指什么

    存储单元是计算机系统中的基本元素,用于存储和检索数据。以下是对存储单元的全面解析,涵盖其定义、类型、功能、特点以及在计算机系统中的重要作用。
    的头像 发表于 08-30 11:03 1982次阅读