RTX基础之共享内存 Shared Memory

来源:互联网 发布:混合蛙跳算法 编辑:程序博客网 时间:2024/05/22 07:03

 

关键词: RTX 共享内存 Shared Memory

 

RTX是运行在内核模式下(Ring 0),直接与硬件交互,从而可以比Win32获得更精准和更快的时间间隔。

UI(User Interface)界面用来与人进行交互的,而这个UI是建立在Win32层面上的,即用户模式(Ring 3).

那么,RTXUI是如何进行通讯的呢?RTX是用共享内存(SharedMemory)的方式来实现UI界面对RTSS程序的控制和获取其执行状态的。

 

同样,RTX程序内部各线程直接的通讯也是用Shared Memory来实现的,见下图:


 

由谁来创建SharedMemory,是UI程序还是RTX程序?

其实UI程序和RTX程序都可以的。

因为之前我博客里写的关于RS232通讯是以UI创建Shared Memory,这次我就以RTX程序创建Shared Memory为例,两者其实是一样的,有兴趣,请看博客“RTX实时平台实现RS232通讯”里面关于如何使用Shared Memory代码。

链接: http://blog.csdn.net/hongxin7/archive/2010/05/18/5605855.aspx

 

第一步,创建UIRTX项目,请参考我的资源如何在VC++ 6.0创建RTX项目

链接: http://download.csdn.net/source/2586313

第二步,框架出SharedMemory, 因为共享内存可能涉及到数据类型是不同的,一般情况下都会使用结构体来表示Shared Memory的框架,见源代码shm.h头文件。

 

第二步,在RTX项目里创建Shared Memory

 

 

hSHM: shared memory的识别句柄

参数1: 说明这段共享内存权限,只读PAGE_READONLY,可读写PAGE_READWRITE

参数2: 共享内存的高32

参数3: 共享内存的低32

参数4: 指定Shared Memory对象的名字,这个很重要,在打开该Shared Memory时,需要用该名字来进行匹配。

 

参数5: 指定Shared Memory的虚拟地址,如下Shared Memory结构体指针pSHM获得该共享内存的地址

 

 

一旦SharedMemory创建成功,就可以对该SharedMemory进行读写了。

 

 

第三步,在UI程序里打开Shared memory.

 

 

参数1: 权限 SHM_MAP_WRITE可读写

参数2: 忽略 FALSE

参数3: SharedMemory对象的名字,必须与创建SharedMemory一致。

参数4: 指定该Shared Memory地址

这样就可以啦。

 

实例界面如下


源代码地址: http://download.csdn.net/source/2590617

 

 

 

 

原创粉丝点击