Ardence RTX 进程通信的问题

anyjun   2010-6-22 17:01 楼主
      刚开始学习Ardence RTX没多久,现在在看进程通讯,试着编了两个简单的程序(都是在VC ++ 6.0下编的):一个用
RTX Driver Wizard向导写了一个RTSS进程,主要是建立一些信号量和一个共享内存;另一个是用Win32 Console Application向导建立的一个win32程序,主要是运行之前的那个RTSS进程然后打开那些信号量和共享内存。
      两个程序编译都没有错误,通过win32程序也确实可以运行前面的RTSS进程,但是在运行win32程序时,当运行到打开信号量或者打开共享内存时,总是打不开(返回的句柄为NULL)。检查参数没有问题,不知道出现这种错误是因为什么原因?

      涉及到两个程序,会不会是因为编译的方法不对,从而使得RTSS进程建立的共享内存和信号量在win32程序中无法找到?如果是这样的话,那该怎样编译呢?
      请路过大虾们帮帮忙,谢谢了~~

回复评论 (5)

请教一下,Ardence RTX是干什么用的呀?使用在什么领域?

建议:至于你说的访问失败,相关的代码贴出来看看,或者用GetLastError()看看有没有进一步的错误信息;还有就是多看看Ardence RTX的例子。
点赞  2010-6-22 22:58
首先谢谢你的回复~~   

    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再打开没报错,换成信号量和共享内存就不行,我不知道问题出在哪,希望大家可以帮帮我(十分感谢!)
点赞  2010-6-23 14:53
看到一个RTX的应用:http://blog.eeworld.net/hongxin7/archive/2010/05/18/5605855.aspx

注意一下,在这个文章里面他的 SharedMemory是在Win32应用程序里面创建的,在RTSS下,打开该SharedMemory来使用。你的刚好相反,在RTSS下创建,在Win32下面访问。

反过来试试?RTX推荐的例子里面有规定SharedMemory在哪创建么?还是在Win32和RTSS下创建皆可?

点赞  2010-6-23 17:53
试了下,还是一样的问题

通过RTX软件自带的工具RTSS Object Viewer可以看到win32确实建立成功了信号量和共享内存,但是在RTSS 进程中还是打不开...
点赞  2010-6-23 21:37
您好,我刚开始学习RTSS和Win进行的通信,在RTX下创建共享内存和信号量,在MFC中打开,也是出现打不开的情况,不过我在MFC中创建共享内存再打开是可以的。不知道您是怎么解决的?请指点一二,谢谢
点赞  2018-3-20 23:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复