RTX基础之共享内存 Shared Memory
来源:互联网 发布:混合蛙跳算法 编辑:程序博客网 时间:2024/05/22 07:03
关键词: RTX 共享内存 Shared Memory
RTX是运行在内核模式下(Ring 0),直接与硬件交互,从而可以比Win32获得更精准和更快的时间间隔。
UI(User Interface)界面用来与人进行交互的,而这个UI是建立在Win32层面上的,即用户模式(Ring 3).
那么,RTX和UI是如何进行通讯的呢?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
第一步,创建UI和RTX项目,请参考我的资源”如何在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
- RTX基础之共享内存 Shared Memory
- RTX基础之共享内存 Shared Memory
- 内存共享(Shared Memory)
- 共享内存: Shared Memory
- 进程间通信之共享内存shared memory
- 共享内存——The Shared memory
- 共享内存(Shared Memory)介绍
- Anonymous Shared Memory android 匿名共享内存
- 进程间通信之-共享内存Shared Memory--linux内核剖析(十一)
- 进程间通信之-共享内存Shared Memory--linux内核剖析
- 共享内存(shared memory)和信号量(semaphore)简介(转)
- 双语:Shared-Memory Systems共享内存系统 生产者消费者简介
- 共享内存 Shared Memory - Linux进程间通信
- GPU 共享内存bank冲突(shared memory bank conflicts)
- 共享内存与消息传递 Shared memory versus message passing
- PostgreSQL的内存管理机制十一:初始化共享内存shared memory及其哈希表索引
- 多线程进程间通讯共享内存(Shared Memory with IPC with threads)
- 共享内存 (shared memory)是 Unix下的多进程之间的通信方法
- 如何创建一个属性?
- Server Application Error(http 500 错误,IIS不能解析ASP)
- NetCDF简介(收藏)
- 如何创建一个属性集
- JAVA中的String函数
- RTX基础之共享内存 Shared Memory
- 进入游戏开发领域
- 如何禁用模块的输出?
- 后来之客
- ORA-01830: 日期格式图片在转换整个输入字符串之前结束
- 如何编辑页脚版权?
- 如何编辑管理的信息?
- C++扫盲系列--第一个服务器程序
- Reporting Services中通过主报表钻取到子报表再动态更改ReportViewer控件的reportPath时,提示错误对象的当前状态使该操作无效。