labview教程之如何实现内存空间共享

2014-11-03 09:46:50来源: ck365 关键字:labview  内存  空间共享

  在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通讯都是采用固定间隔更新的方法.

[1] [2]

关键字:labview  内存  空间共享

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2014/1103/article_9929.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:labview教程之chart 如何不连续显示数据
下一篇:labview教程——如何判断字符串包含的是数字

论坛活动 E手掌握
关注eeworld公众号
快捷获取更多信息
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
labview
内存
空间共享

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved