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来实现的,见下图:

RTX-UI

由谁来创建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时,需要用该名字来进行匹配。

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

pSHM =(pSHAREDMEMORY)location;

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

 
pSHM->bStop = FALSE;       //布尔赋值
pSHM->iTest = 24;            //整形赋值
strcpy(pSHM->szBuffer, "taste"); //字符串赋值
 

 

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

if((hsm = RtOpenSharedMemory(SHM_MAP_WRITE, FALSE, sharedmemory, (VOID **)&psm)) == NULL)

 

参数1: 权限 SHM_MAP_WRITE可读写

参数2: 忽略 FALSE

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

参数4: 指定该Shared Memory地址

这样就可以啦。

 

实例界面如下

Shared Memory

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

 

本文来自CSDN博客:http://blog.csdn.net/hongxin7/archive/2010/08/02/5782200.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值