嵌入式系统中基于操作系统的通信调度装置 (一)技术领域
本专利涉及一种嵌入式系统中基于操作系统的通信调度装置。
(二)背景技术
嵌入式系统中常常将具有一定功能的应用模块作为操作系统上的任务,应用任务的调度和相互间的通信通过操作系统来完成。虽然这样的设计可以通过任务间的预抢占提供较高的并行性和实时性,在功能相对单一的系统中表现良好,但当系统复杂时,这样地设计将使得有过多的操作系统上的任务,从而导致操作系统的调度负担过重,系统效率不高,而且过多的任务也给测试带来了不便,更何况并非所有的应用间都需要“预抢占”。
为了解决这个问题,一般的做法是将某些关联程度高,相互间无需预抢占的应用模块任务合并为一个任务,在任务内部完成这些应用模块的调度。但是传统方法常常未在任务内部将调度功能和应用模块的功能清晰的分割开,任务的设计者在开发时要兼顾调度和应用功能两者的功能,工作量大,且由于界限模糊导致了任务的维护不方便,任务中多个应用模块的并行开发难度大。
(三)发明内容
本发明的目的在于提出一种嵌入式系统中基于操作系统的通信调度装置,不仅可以解决传统复杂的嵌入式系统中操作系统上任务过多,调度负担重,效率不高的问题;而且还能够通过本发明提供的通信调度装置和上层应用模块间有清晰的层次和规范的接口,实现调度细节和应用功能的分割,这样不仅可以降低了应用开发的难度,而且还可以通过并行开发大大提高开发的效率,且具有很强的可维护性。
本发明所提供的一种嵌入式系统中基于操作系统的通信调度装置,用于嵌入式系统中操作系统和关联程度高、相互间无需预抢占的若干应用模块之间,完成上层应用模块的调度和通信,并向上层应用提供与其他外围应用任务之间的通信接口,本装置和被调度的上层应用模块一起作为操作系统上的一个任务,其特征在于,它包括调度模块、消息池模块、上层应用接口模块、操作系统接口模块和应用注册表模块,其中:调度模块,其分别与消息池模块、上层应用接口模块、操作系统接口模块和应用注册表模块相连,根据消息池中消息的目的标识和注册应用的标识进行上层应用模块的调度控制,并提供调度策略;消息池模块,其分别与上层应用接口模块、操作系统接口模块和调度模块相连,用于存储上层应用模块间交互的消息以及外围应用任务模块发往上层应用模块的消息,为调度模块、上层应用接口模块和操作系统接口模块提供方便接入消息池的接口,执行消息池的接入控制;上层应用接口模块,其分别与调度模块、消息池模块、操作系统接口模块和应用注册表模块相连,接收上层应用模块的消息发送请求,判断发送消息的目的和路由,可激活上层应用模块,并向上层应用模块提供消息池接入能力;操作系统接口模块,其分别与调度模块、消息池模块、上层应用接口模块和应用注册表模块相连,完成从操作系统的消息接收,消息检查、格式转换、消息存储,接受外部消息发送请求,格式转换、通过操作系统的消息发送;应用注册表模块,其分别与调度模块、上层应用接口模块和操作系统接口模块相连,存储上层应用模块的标识、消息处理函数入口等公共信息。
在上述的嵌入式系统中基于操作系统的通信调度装置中,消息池模块包括消息存储子模块、消息池接口子模块和消息池接入控制子模块,其中:消息存储子模块,其分别与消息池接口子模块和消息池接入控制子模块相连,作为消息的存储区,提供消息的存取能力;消息池接口子模块,其分别与消息存储子模块和消息池接入控制子模块相连,对外提供方便的消息池接入的接口,对内通过消息池接入控制子模块的控制信息完成在消息存储子模块中消息的存取;消息池接入控制子模块,其分别与消息存储子模块和消息池接口子模块相连,记录消息存储子模块使用的情况的信息,如消息池中消息的个数,第一个消息的位置,第一个空闲存储区的位置等信息,提供接入控制能力。
采用了上述的技术解决方案,基于操作系统之上的壳机制通信调度装置代替操作系统完成应用模块的调度和通信,在形式上壳机制通信调度装置和被调度的上层应用模块一起作为操作系统上的一个任务,解决了传统的嵌入式系统中操作系统上任务过多,调度负担重,效率不高的问题;同时,本发明提供的通信调度装置和上层应用模块间有清晰的层次和规范的接口,实现了调度细节和应用功能的分割,不仅可以降低了应用开发的难度,而且还可以通过并行开发大大提高开发的效率,且具有很强的可维护性。在调度方法的升级更新时,只要接口保持不变也不会影响上层应用模块,十分灵活方便。
(四)附图说明
图1是本发明嵌入式系统中基于操作系统的通信调度装置的结构示意图;
图2是本发明中消息池模块的结构示意图。
(五)具体实施方式
本发明对外围应用模块展现唯一的通信接口,且有调度功能,在形式上有些类似操作系统中的SHELL(壳)的功能,因此我们定义它为“壳机制通信调度装置”。
如图1所示,本发明壳机制通信调度装置1用于嵌入式系统中操作系统2和若干应用模块3之间,完成上层应用模块3的调度和通信,并向上层应用模块3提供与其他外围应用任务模块4之间的通信接口,在我们的环境中操作系统采用的是Vxworks(一种流行的嵌入式操作系统),上层应用模块包括从WCDMA(宽带码分多址)中的NBAP(节点B应用部分)协议中按功能分割出的具有特定功能的RRC(无线资源控制)接口应用模块、SaalUni(信令异步传输模式适配层用户网络协议)接口应用模块、ALCAP(接入链路应用控制协议)接口应用模块、消息路由与组装软件处理应用模块、NBAP(节点B应用部分)协议软件处理应用模块、NBAP(节点B应用部分)协议模块管理软件应用模块等,这些上层应用模块具有很强的关联关系,且它们之间无需预抢占,在壳机制调度装置1的调度下协作共同完成NBAP(节点B应用部分)协议功能,壳机制调度装置1和这些上层应用模块3一起被设计为操作系统上的一个NBAP(节点B应用部分)协议任务,具有唯一的任务入口和消息队列。
该装置由调度模块11、消息池模块12、上层应用接口模块13、操作系统接口模块14、应用注册表模块15组成。所有的模块被设计成函数,当激活时被调用,并通过函数返回响应。
调度模块11根据消息池中的消息的目的标识和注册的应用的标识进行上层应用模块的调度控制,并提供调度策略。
当操作系统接口模块14从操作系统2的消息队列中接收到发给某个上层应用模块3的消息并将其按内部通信的标准消息格式存入消息池后,将激活调度模块11,调度模块11取出消息的目的标识并和应用注册表模块15中注册的应用标识比较,如果没有一个注册应用的标识匹配,将请求消息池模块12释放消息池中该消息,如果找到匹配的上层应用标识,将请求上层应用接口模块13激活上层应用模块3的功能。在上层应用接口模块13指示某个上层应用执行完毕后,调度模块11将继续请求消息池模块12取出消息池中下一个消息的目的标识并比较,进行重复的操作,直到消息池模块12指示消息池中没有消息为止。
调度模块11可以根据需要提供不同的调度策略,如消息先入先出调度,消息优先级调度等。在我们的实现中采用无消息优先级先入先出调度,这种调度方式实现简单,调度模块11总是请求消息池模块12取出最先进入消息池的消息标识,并调度响应的上层应用模块3。
消息池模块12:存储上层应用模块3间交互的消息以及外围应用任务模块4发往上层应用模块3的消息;为调度模块11、上层应用接口模块13和操作系统接口模块14提供方便接入消息池的接口;执行消息池的接入控制。
消息池模块12和调度模块11、上层应用接口模块13、操作系统接口模块14接口,为它们提供上层应用模块3间交互的消息以及外围应用任务模块4发往上层应用模块3的消息的接入功能。如图2:消息池模块12分为三个子模块实现:消息存储子模块122、消息池接口子模块123和消息池接入控制子模块121。消息存储子模块122为消息的存储区,提供消息的存取能力。消息池接口子模块123对外提供方便的消息池接入的接口,对内通过消息池接入控制子模块121的控制信息完成在消息存储子模块122中消息的存取。消息池接入控制子模块121记录消息存储子模块122使用的情况的信息,如消息池中消息的个数,第一个消息的位置,第一个空闲存储区的位置等信息,提供接入控制能力。
当操作系统接口模块14从操作系统2的消息队列中接收到发给某个上层应用模块3的消息并完成内部通信标准消息格式转换后,将激活消息池模块12进行消息的存储,消息池模块12根据消息池接入控制子模块121提供的信息进行接入控制,如果接受存储请求,将执行相应的存储操作,并返回成功的响应,否则返回存储失败响应。
当调度模块11需要从消息池模块12中取消息目的标识进行调度控制时,消息池模块12将被激活,如果消息池中有消息,就返回调度模块11所需的消息目的标识信息,如果无消息,也通知调度模块11。还有一种异常情况是当调度模块11发现从消息池模块12中取消息目的标识在应用注册表模块中找不到任何一个应用标识相对应时,也将请求激活消息池模块12以释放消息池中该消息,消息池模块12完成消息释放后,通知调度模块11,如有异常发生,将报警。
当上层应用接口模块13需要进行消息池的读、写、控制等接入请求时,激活消息池模块12进行相关操作,消息池模块12根据消息池接入控制子模块121提供的信息进行接入控制,如果接受,将执行相应的存储操作,并返回成功的响应,否则返回失败响应。
上层应用接口模块13:接收上层应用模块3的消息发送请求,判断发送消息的目的和路由;上层应用模块3的激活;向上层应用模块3提供消息池接入能力。
当上层应用要发送消息时,激活上层应用接口模块13,上层应用接口模块13将判断消息的目的是否为被调度的另一个上层应用模块3,如果是,将向消息池模块12发送消息存储请求完成消息存储,并从消息池模块12接受应答并返回给上层应用模块3,否则,将请求操作系统接口模块14发送消息到外围应用任务模块4,并接受操作系统接口模块14的应答并返回给上层应用模块3。当调度模块11请求调度某个上层应用模块3的功能时,上层应用接口模块13也被激活并从应用注册表模块15中获得该上层应用模块3的消息处理函数入口地址,并激活此上层应用模块3,当上层应用返回时,返回响应给调度模块11。当上层应用模块3请求读消息池中的自己的消息或要对消息池进行控制操作,如释放已经使用的消息时,上层应用接口模块13也被激活并向消息池模块12发出相应的请求,并在收到消息池模块12的响应后通知上层应用模块3。
操作系统接口模块14,完成从操作系统2的消息接收,消息检查、格式转换、消息存储;接受外部消息发送请求,格式转换、通过操作系统2的消息发送。
当从操作系统2的消息队列中接受到消息时,操作系统接口模块14被激活并进行消息目的判断,如消息的目的标识和应用注册表模块15中某个应用标识一致,就将接受消息转换为标准的内部消息格式并向消息池模块12发消息存储请求进行消息存储,并接受消息池模块12的应答,如失败,将发出告警。当上层应用接口模块13请求向外围应用任务模块4发送时,操作系统接口模块14被激活并进行标准的内部消息格式和外部通信格式的转化,并向操作系统2请求消息发送。
应用注册表模块15,从形式上看被设计成一个结构数组,每个结构都包含存储上层应用模块3的标识、以及对应的消息处理函数入口信息。我们的应用注册表的信息是静态的,在NBAP(节点B应用部分)协议任务初始化时配置好,运行过程中只能读取,不能改变。