微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于VxWorks实时操作系统的通信模型设计

基于VxWorks实时操作系统的通信模型设计

时间:12-03 来源:互联网 点击:
2 统一定时器的作用

统一定时器负责协调所有的UDP发送。程序初始化后启动统一定时器,定时器的时间一到就会执行特定的动作。它将轮询所有的DEV,将DEV发送缓存中的内容通过UDP发送出去。

3 通信的实现过程

①UDP消息的发送

当模块A的某个任务需要与其他模块通信时,它将把信息打包通过UDP方式发送给其他模块。模块A的任务(线程)将需要发送的消息包放入DEV的1号缓存中,统一定时器每到一定的时间就轮询所有的DEV,如果有信息等待发送就通过该DEV所控制的UDP插口将信息发往目的地。

② UDP消息的接收

如图2所示,每个模块有一个监视任务(线程),负责定时监视该模块对应的DEV所控制的UDP端口,一旦UDP接收到消息,该线程负责将收到的消息从UDP的缓存中读出存放到DEV的0号缓存中。模块的其他工作任务需要获得消息时可以从0号缓存中读取并解析消息。



图2 UDP消息的接收



4 通信模型的性能分析

上述通信模型采用准异步的方式,发送消息时各模块同步,接收消息时异步。能够避免多模块通信时的冲突,并且能够节省资源,在效率上优于传统的通信模型。松耦合的映射关系使得模块与通信端口之间能够灵活的结合与释放,给软件结构的设计带来了较大的自由。

①效率:采用了定时器轮询的消息发送方式,避免任务通信的冲突。模块向其他模块发送UDP消息时只需要将消息打包放入DEV的发送缓存中,包的发送工作由统一定时器完成。模块本身并不关心数据包的发送,将包放入DEV后就可以进行其他的工作。在多个模块同时与某一模块通信的情况下这种方式不会出现信号量模型中排队等待信号量的现象,提升了系统的效率,实时性得到了保证。由于所有模块的发送都由定时器完成,程序代码得到了精简,增强了代码的共用性。

②资源的利用:由于采用了UDP这种较为灵活的通信方式,模块间需要通信时才发送消息,而不必在各个模块间建立多条消息队列。当模块数较大时,这种方式在资源的节约上体现得更加明显。例如:有n个模块,两两间建立一对消息队列就需要(n-1)!对队列,程序要维护大量的消息队列,资源消耗严重。采用本文的通信模型将会节约有限的系统资源,充分适应嵌入式系统的开发。

③消息堆积问题的解决:传统通信模型中,模块发送消息是不加限制的。只要有消息需要发送就立刻调用发送函数,如果多个模块在一段时间内同时向一个模块发送消息,而接收消息的模块又来不及处理,消息不断的堆积就会引起缓冲区的益处。采用统一定时器的方法在一定程度上使消息的发送有序和受限,在定时器两次轮询某一模块的间歇期模块就能够处理前一次收到的消息,为接收新的消息作好准备。只要定时器的定时时间设置合适,就能够避免缓冲区的溢出。

通信模型的实现

Vxworks是一个多任务的操作系统,模型的各个组成部分可以通过任务来实现,VxWorks的网络编程接口和定时器使用起来十分方便,对用户提供了开放的API。只需要使用socket()、send()、receive()、CreateTimer()、SetTimer()等函数就能够对套接字和定时器进行操作。在程序的初始化过程中可以先开启定时器任务,然后产生足够数量的DEV,接下来顺序启动各个模块。启动每个模块的过程中,首先申请一个空闲的DEV,然后产生一个UDP套接字,将套接字与DEV建立映射关系。完成了模块与DEV的绑定后,启动一个监视任务(Moniter_Task)监视UDP端口。到此,通信模型建立完毕。最后启动模块的其他工作任务开始正常的业务流程。

结束语

本文提出了一种不同于传统通信机制的模块间通信模型。将用于网络通信的UDP方式引入到程序内的模块间通信中,避免了传统方式可能引起的降低效率与资源耗费过多问题。通过送耦合的连接方式增强了程序的灵活性。在实验中,这种基于UDP方式的虚拟设备绑定的通信模型取得了较好效果,在对实时性要求较高的嵌入式系统开发中有着较高的价值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top