任务间通讯邮箱的硬件实现

2016-05-31 22:58王博李岩王简黄天昕
哈尔滨理工大学学报 2016年1期

王博+李岩+王简+黄天昕

摘要:针对实时操作系统内核μC/OS-Ⅱ任务之间信息传递的灵活性不足的问题。通过硬件实现信号量的管理和消息邮箱的管理,从而增加任务间通讯与同步的高效性和灵活性。通过把基于消息邮箱的这一任务之间的通信机制硬件化实现,使得任务之间的通讯与同步过程具有更高的灵活性和执行效率.设计采用VHDL硬件描述语言进行消息邮箱管理的功能描述,并且在Xilinx公司的ISE 8.2开发软件套装上进行功能仿真和验证,最后利用Xilinx公司的Virtex-Ⅱ Pro FPGA硬件平台实现其核心管理功能.

关键词:实时操作系统;消息邮箱;现场可编程门阵列

DOI:10.15938/j.jhust.2016.01.008

中图分类号:TP316.2 文献标志码:A 文章编号:1007-2683(2016)01-0036-04

0引言

μC/OS-Ⅱ是一种嵌入式实时操作系统,具有比较高的实时陸、确定性和可靠性等诸多优点,所以被越来越多的用于各个领域,比如航空航天、工业控制、汽车电子和核电站建设等.对于一种实时操作系统,逐步提高其实时性是主要的系统改进方向.要更进一步提高其实时性,如果只是依靠单纯改进内部算法,已经不能得到明显的增强实时性的目的.通过硬件描述语言VHDL描述它的一些系统调用函数,利用硬件逻辑来实现μC/OS-Ⅱ任务管理、信号量管理和中断管理等功能,那么就会在很大程度上提高其可调度性、灵活性、可靠性和实时性.

文章先详细剖析μC/OS-Ⅱ中通信机制消息邮箱的一些细节,掌握它们的工作原理以及消息邮箱与任务、中断服务子程序ISR(Inter Service Rou-tines)之间的关系,再采用VHDL语言对上述通信机制进行描述并硬件化,然后在ISE8.2软件上进行仿真和验证,最后利用Xilinx公司的Virtex-Ⅱ Pro FP-GA(Field Programmable Gate Array)实现,从而提高任务间通信与同步的灵活性和高效性.

1μC/OS-Ⅱ的消息邮箱

1.1消息邮箱、任务与ISR的关系

消息邮箱是μC/OS-Ⅱ的一种通信机制,与信号量工作原理类似,也是利用系统调用函数实现任务间的通信和同步.

作为μC/OS-Ⅱ的一种通信机制,消息邮箱可以发送一个指针型的变量给一个任务Task或者中断服务子程序ISR.而这个指针则是指向了一个特定数据结构,它包含了所谓的“消息”.简化的任务、中断服务子程序和消息邮箱这三者之间的关系如图1所示.

任务Task、中断服务子程序ISR以及消息邮箱Mailbox之间的关系均可以通过消息邮箱管理的系统调用来实现.而消息邮箱管理的系统调用函数功能有创建、删除、等待、释放和查询等.

1.2消息邮箱管理的系统调用

μC/OS-Ⅱ消息邮箱管理主要包括建立邮箱、删除邮箱、等待邮箱中的消息、向邮箱发送消息、无等待地从邮箱中得到消息、查询邮箱状态等功能.消息邮箱系统调用函数如表1所示.

建立一个邮箱通过系统调用函数OSMboxCreate( )来实现,并且同时定义了指针的初始值.该初始值可以是NULL或者非NULL指针,前者是为了通知一个事件的发生,也就是发送一条消息,而后者则是用邮箱共享某些资源.

删除一个邮箱首先得保证OS_MBOX_DEL_EN设置为1.而且在删除之前,必须先删除可能操作此邮箱的所有任务.

等待邮箱中的消息调用OSMboxPend( ),如果邮箱中有消息,那么就说明已经有别的Task或ISR将信息发送到邮箱中,直接利用该邮箱;反之若邮箱为空,那么就进入睡眠状态,等待别的Task或ISR通过邮箱发送消息.

向邮箱发送一则消息通过OSMboxPost( )函数先进行检查,看是否存在正在等待该邮箱消息的Task,若有则从等待列表中删除最高优先级的Task,并将其加入就绪列表,准备运行;否则就是邮箱里已有消息,那么就返回“邮箱已满”的错误代码.

无等待地从邮箱中得消息调用OSMboxAccept( ),即使邮箱是NULL,也可以从邮箱中得到消息,而没有必要使Task进入到睡眠状态.

查询邮箱的状态的OSMboxQuery( )函数的作用是查询一个邮箱的当前状态并显示.

2消息邮箱的硬件设计

2.1硬件消息邮箱管理的工作原理

消息邮箱是μC/OS-Ⅱ的通信机制,为任务间的通信和同步做出了很大贡献.为了加快任务间通信和同步的速度,可以将消息邮箱的管理硬件化,即把邮箱的建立、删除、申请、释放和查询等一系列可供系统调用的函数通过VHDL进行编程,使得其在硬件上能够实现.

消息邮箱管理硬件化包括CPU、消息邮箱管理和事件控制块ECB(Event Control Block)管理这三部分.硬件消息邮箱管理的工作原理如图2所示.

CB、DB、AB三条线分别是控制线、数据线和地址线,消息邮箱管理和ECB管理直接从数据总线上获得数据信息并进行相应处理.同时为了在不增加总线负担的情况下加快两者之间的通信,那么就在消息邮箱管理与ECB的存储模块之间建立的一条数据通道即可.这些硬件逻辑基于FPGA实现,与CPU并行工作,这样就减少了CPU的工作量,从而提高了任务间的通信与同步,使得系统的响应能力得到提高.

2.2消息邮箱系统调用的硬件实现

消息邮箱管理的系统调用函数主要的操作就是创建、删除、申请和释放邮箱.消息邮箱管理系统函数的实现主要由两个关键器件组成,即具有预置功能的双向计数器和比较器.

消息邮箱系统调用主要实现的是消息邮箱管理系统调用函数的创建邮箱Create_Mbox、删除邮箱Del_Mbox、申请邮箱Pend_Mbox和释放邮箱Post_Mbox这四种功能.消息邮箱系统调用的TRL图如图3所示.

双向计数器具有预置功能,主要是用来完成加/减1的操作.当系统建立邮箱时,它的预置引脚SET为1;当任务或中断服务子程序申请邮箱时,它的正向计数引脚UP为1,那么计数器进行加l操作;当任务或中断服务子程序释放邮箱时,它的逆向计数引脚DOWN为1,计数器进行减1操作.

比较器从双向计数器的输出端接收邮箱的msg值,并将msg值和0进行比较.若申请邮箱信号Pend_Mbox有效时,如果Msg<0,则发出信号Task_Wait,通知任务等待列表的读写控制模块,将该任务的优先级写入其中,否则就申请成功,发出信号Task_Ready,那么该任务进入就绪状态,并触发任务调度;若释放邮箱信号Post_Mbox有效时,如果Msg<=0,说明有任务正在等待此邮箱,就从任务等待列表中找出优先级最高的任务,同时发出信号Task_Ready,那么该任务进入就绪状态,并触发任务调度.

3实验结果分析

文章中消息邮箱管理中的系统函数是用VHDL硬件描述语言描述的.在ISE 8.2软件环境下,对所有函数进行仿真以便验证消息邮箱的硬件设计的正确性和高效性.

1)消息邮箱管理硬件实现中创建和删除邮箱函数的功能仿真如图4所示.

仿真图表明,若OSIntesting=1时,均不能创建和删除邮箱,且若由于一些原因导致err=1,那么也不能够进行创建/删除.还可知,在条件create_mbox=1和msg=1同时成立情况下,邮箱建立成功,则msg_out=1;若de=1,邮箱删除成功,即dc_mbox=1.

2)消息邮箱管理的申请和释放消息邮箱函数硬件实现功能仿真如图5所示.

仿真图表明,在msg=1的情况下,同时没有等待此邮箱的任务,即pend_type=0则可成功申请消息邮箱,但释放邮箱则显示出错,即pend_err=1;在msg=0的情况下,可成功释放邮箱,但申请邮箱时就使得任务进入等待列表.

4结语

文章采用VHDL硬件描述语言设计和实现消息邮箱管理,提高了任务间通信与同步的高效性和灵活性.消息邮箱硬件设计基于FPGA实现,基于ISE 8.2开发软件进行仿真与验证,实验结果证明硬件消息邮箱管理的正确性和高效性.在未来工作中,对于硬件实现的任务间通信与同步的管理机制做更深入的改进,显著的提高其并行性和可靠性.

(编辑:王萍)