|
首先谢谢你的回复~~
RTX是美国Arendce公司开发的基于Windows操作系统的硬件实时解决方案,可以为用户提供优秀的实时控制性能。
实际上我觉得可以把它看作是一个扩展库,提供了一些实时的接口函数,利用这些函数可以完成实时的一些任务。我现在用这个软件是要开发实时的驱动程序,来完成一块FPGA板卡上的实时任务。
因为接触这个也没多久,这段时间也就是在看软件自带的一些例子。但是现在碰到的这个问题,就是不知道错误出在哪里,所以想找熟悉这个软件的大虾请教一下
在rtss程序里,建立了共享内存和信号量,代码如下(只贴了一个建立共享内存的),函数都是RTX库里提供的,参数也都是按照该函数的使用规则写的(其中dwMaximumSizeHigh值是0,MSGSTR是自己定义的一个结构体,MSGSTR_SHM_Ini是共享内存的名称,pMsg是MSGSTR结构体类型的指针)
hShm_Ini = RtCreateSharedMemory( PAGE_READWRITE, dwMaximumSizeHigh, sizeof(MSGSTR), MSGSTR_SHM_Ini, (LPVOID) &pMsg);
if(GetLastError()==ERROR_ALREADY_EXISTS)
MsgAndExit("Warning!\nThe shared memory does already exist.\nThe program may already be running.");
if (hShm_Ini==NULL)
MsgAndExit("RtCreateSharedMemory failed.");
RTSS程序单独运行没有报错,应该共享内存和信号量建立都是正确的
另一个win32程序里打开RTSS进程也是正确的,打开共享内存或者信号量时出错,代码如下(也是只贴了打开共享内存的):
hShm_Ini = RtOpenSharedMemory( PAGE_READWRITE, FALSE, MSGSTR_SHM_Ini, (LPVOID *) &pMsg);
if (hShm_Ini==NULL)
{
printf(" Error: Could not open Shared Memory. GetLastError = %d\n", GetLastError());
turn FALSE;
}
到这里打开就是错误的GetLastError返回值是2
我本来以为是RTSS进程建立的信号量、共享内存win32程序找不到,于是我在win32程序中建立一个共享内存或者信号量,然后再打开,也还是错的,但是在win32中建立了一个互斥体Mutex再打开没报错,换成信号量和共享内存就不行,我不知道问题出在哪,希望大家可以帮帮我(十分感谢!) |
|