RTX 基础之 Shared Memory
关键词: RTX 共享内存 Shared Memory
RTX 是运行在内核模式下(Ring 0), 直接与硬件交互,从而可以比 Win32 获得更精准和更快
的时间间隔。
UI(User Interface)界面用来与人进行交互的,而这个 UI 是建立在 Win32 层面上的,即用户
模式(Ring 3).
那么,RTX 和 UI 是如何进行通讯的呢?RTX 是用共享内存(Shared Memory)的方式来实现
UI 界面对 RTSS 程序的控制和获取其执行状态的。
同样,RTX 程序内部各线程直接的通讯也是用 Shared Memory 来实现的,见下图:
由谁来创建 Shared Memory,是 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
第一步,创建 UI 和 RTX 项目,请参考我的资源 ” 如何在 VC++ 6.0 创建 RTX 项目”。
链接: http://download.csdn.net/source/2586313
第二步,框架出 Shared Memory, 因为共享内存可能涉及到数据类型是不同的,一般情况下
都会使用结构体来表示 Shared Memory 的框架,见源代码 shm.h 头文件。
第二步,在 RTX 项目里创建 Shared Memory
if(!(hSHM = RtCreateSharedMemory( (DWORD)PAGE_READWRITE,
(DWORD)0,
(DWORD)(sizeof(SHAREDMEMORY)),
sharedmemory,
&location)))
hSHM: shared memory 的识别句柄
参数 1: 说明这段共享内存权限,只读 PAGE_READONLY, 可读写 PAGE_READWRITE
参数 2: 共享内存的高 32 位
参数 3: 共享内存的低 32 位
参数 4: 指定 Shared Memory 对象的名字,这个很重要,在打开该 Shared Memory 时,需要
用该名字来进行匹配。
UI
RTSS1
Shared Memory
User mode
Kernel mode
RTSS2
- 1
- 2
- 3
- 4
- 5
- 6
前往页