rtlinux下的一种实时应用通信机制

rtlinux下的一种实时应用通信机制

ID:10982079

大小:60.50 KB

页数:6页

时间:2018-07-09

rtlinux下的一种实时应用通信机制_第1页
rtlinux下的一种实时应用通信机制_第2页
rtlinux下的一种实时应用通信机制_第3页
rtlinux下的一种实时应用通信机制_第4页
rtlinux下的一种实时应用通信机制_第5页
资源描述:

《rtlinux下的一种实时应用通信机制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、RTLinux下的一种实时应用通信机制

2、第1关键词:RTLinux通信接口实时共享内存RT_FIFO实时性是多任务嵌入式系统的基本特征之一,主要表现为对重要性各不相同的任务进行统筹兼顾的合理调度能力。根据应用系统对时限要求的严格程度又分为软实时和硬实时。RTLinux作为Linux最为通用的几种硬实时扩展之一,表现了良好的硬实时性。同时,为了更有效地为各种实时应用服务,提供了多种与Linux中非实时进行通信的接口,主要有共享内存、RT_FIFO和线程信号驱动机制,三者的应用重点各不相同。其中前两种较为常用[1]。由于不的实现机理,这两种接口的应用范畴各有侧重。经过实践

3、,笔者认为将以上两种接口有机地结合,利用共享内存传送大容量、对读/写时序要求不高的数据信息;同时,利用RT_FIFO辅助实现对该共享内存的同步控制,能够综合两者的优势,是RTLinux下一种十分有效的实时应用通信模式。1RTLinux的结构和应用程序开发模式作为Linux的硬实时扩展,RTLinux一个重要的计准则在于:尽可能多地利用Linux内核所能提供的功能[2]。显示、记录、设备初始化、阻塞式动态资源分配和模块化内核管理等无实时要求或者与硬实时性要求相悖的服务均由Linux提供。RTLinux内核则主要为实时任务提供对硬件的直接访问,使得它们具有最小的延迟和最优

4、先的处理器利用权。基于以上准则,RTLinux中的实时应用程序开发通常具有一个通用的模式,如图1所示。按照运行环境和对实时要求的严格程度分为实时和非实时两个模块。非实时模块的功能包括结果数据显示。用户交互、数据存储等;实时模块主要负责响应数据采集外设的中断,结果数据的采集。两者通过RT_FIFO或者共享内存进行通信,组成一个完整的实时数据采集程序。2RTLinux中的两种通信接口RTLinux提供了RT_FIFO和共享内存两种标准通信接口,用于实时任务和非实时任务之间的交互。2.1RT_FIFORT_FIFO(First-In-First-Out,先进先出)是一种提案

5、队列机制组织的字符设备。在Linux文件系统中,主设备号为150。一个系统平台中能够同加载FIFO的模块数RTF_NO定义在rt_fifo_neodule()和cleanup_module()中调用,或者在用户空间通过PSC(theuser-levelreal-timesignallibrary,用户级实时库函数)进行调用。[读/写操作]intrtl_get(unsignedintfifo,char*buf,intcount);从FIFO中读出长度为count字节的数据,存放buf之中。Intrtf_put(unsignedintfifo,char*buf,intco

6、unt);将长度为count字节的数据写入FIFO中。Intrtf_create_handle(unsignedintfifo,int(handler)(unsignedintfifo));创建一个回调函数句柄,当FIFO被Linux进程读/写时,被调用。通常与rtl_get结合使用,用于异步的从Linux进程中接收数据,从而避免采用轮询的方式。2.2共享内存共享内存是指被闲置出来专用于内核空间和用户空间进行通信的内存区域。相对于FIFO具有如下特点:*应用程序必须自己定义相应的协议,对于写入共享数据区域的有数据进行保护,如同步控制等。*数据可以既定格式读/写,各个数

7、据域的更新十分便易。*不是点对点的通信通道,可以支持多生产者、多消费者的使用模式,能够同时被多个线程访问。在RTLinux下,共享内存的使用可采用以下两种方式:(1)利用RTLinux中附带的mbuff模块在使用mbuff之前,要求系统中已经加载了mbuff.o模块。该模块中的两个函数被分别用于分配和释放所需的内存空间。#include<mbuff.h>[分配]void*mbuff_alloc(constchar*name,intsize);从内核空间中分配一块与name相连,大小为size字节的内存空间,返回地址指针,设备这块空间的引用标识为1。如与na

8、me相连的内存空间已经存在,就仅仅返回指向该空间的地址指针,同时将其引用标识加1。[释放]voidmbuff_free(constchar*name,intsize);将mbuff的引用标识减1。当引用标识被减为0时,释放mbuff。注意:①mbuff_alloc使用了vmalloc函数,由于分配内核空间的需要,会交换出一系列的内核空间页面,所以在实时线程、中断处理线程、定时器中断线程中调用这个函数是十分危险的。②在进程结束前,一定要调用mbuff_free函数。Mbuff所占内存空间不会因为其引用进程的结束而自行释放。(2)高地址空间物理内存的直接

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。