您的位置 首页 动态

labview教程之怎么完成内存空间同享

在C语言中,可以采用文件映射的方法,开辟一段内存空间,各个进程和线程可以利用这段共享内存空间进行数据交换,也就是写读操作,这里涉及到一个控制权限的问题,任何时刻,只能允许一个线程或者进程对内存空间进行

  在C语言中,能够选用文件映射的办法,拓荒一段内存空间,各个进程和线程能够使用这段同享内存空间进行数据交换,也便是写读操作,这儿涉及到一个操控权限的问题,任何时间,只能答应一个线程或许进程对内存空间进行操作,看一段代码,是经过API完成的内存空间同享.

  #defineFILE_SIZE1024

  staticHANDLEhMapFile;

  staticLPVOIDlpMapAddress;

  staticLPCTSTRg_szEventName=”EventName”;

  voidWrite(char*data){

  if(lpMapAddress!=NULL){

  MEMSet(lpMapAddress,0,FILE_SIZE);

  sprintf((char*)lpMapAddress,”%s”,data);

  }

  }

  voidRead(){

  if(lpMapAddress!=NULL){

  printf(“%sn”,lpMapAddress);

  }

  }

  voidProcess1(){//写数据

  hMapFile=CreateFileMapping(

  INVALID_HANDLE_VALUE,//Currentfilehandle.

  NULL,//Defaultsecurity.

  PAGE_READWRITE,//Read/writepermission.

  0,//Max.objectsize.

  FILE_SIZE,//SizeofhFile.

  ”MyFileMappingObject”);//Nameofmappingobject.

  if(hMapFile==NULL)

  {

  printf(“Couldnotcreatefile-mappingobject.”);

  return;

  }

  //

  lpMapAddress=MapViewOfFile(hMapFile,//Handletomappingobject.

  FILE_MAP_ALL_ACCESS,//Read/writepermission

  0,//Max.objectsize.

  0,//SizeofhFile.

  FILE_SIZE);//Mapentirefile.

  if(lpMapAddress==NULL)

  {

  printf(“Couldnotmapviewoffile.”);

  return;

  }

  ::Sleep(10000);

  //Writedata

  ANDLEhEvent=::OpenEvent(

  EVENT_MODIFY_STATE,

  FALSE,

  g_szEventName);

  while(hEvent!=NULL){

  scanf(“%s”,lpMapAddress);

  ::SetEvent(hEvent);

  }

  ::CloseHandle(hEvent);

  hEvent=INVALID_HANDLE_VALUE;

  }

  在Labview假如想动态请求内存只能经过DLL或许CIN来完成,LABVIEW自身又不支撑指针操作,完成十分困难,不过咱们能够经过数组来完成内存的分配.

  同享内存同大局变量相同,相同存在数据竞赛的问题,咱们能够把同享内存看成是内存数据块大局变量.

  LABVIEW中避免数据竞赛的最好办法是把读写操作在一个VI里,LABVIEW自身就会确保恣意时间只能有一个读写操作.

  关于大局可读写变量,LABVIEW能够用内置大局变量也能够用FUNCTIONGLOBAL(我前面的文章中专门谈到了FUNCTIONGLOBAL和AE的概念,能够参照一下)

  在自动化操控范畴,内存同享使用十分广泛,对CAN总线操控卡,有双口RAM的概念,对PLC有输入输出映射区,实际上指的都是固定的RAM空间,相关于计算机来说,便是一段内存空间.

  了解PLC的朋友都十分清楚,PLC是选用循环扫描的办法来运转程序的,扫描开端前,一次性地读入外部开关的状况,存入输入映射区中,在一次扫描程序运转期间,它的状况是不变的.

  咱们在LABVIEW规划操控程序时,也完全能够借用这个办法,实际上许多DSC和外部设备经过OPC通讯都是选用固定距离更新的办法.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/206644.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部