And*_*dyL 5 c variables labview
允许C代码定期访问从单独的Labview程序生成的整数的瞬时值的最佳方法是什么?
我有时间关键的C代码控制科学实验并每20ms记录一次数据.我还有一些labview代码可以操作不同的仪器并输出一个100ms的整数值.我希望我的C代码能够记录labview的值.做这个的最好方式是什么?
一个想法是让Labview在循环中将整数写入文件,并让C代码在循环中读取文件的值.(如果需要,我可以在我的C代码中添加第二个线程.)Labview也可以链接到C dll.所以我或许可以在C中编写一个DLL,以某种方式促进两个程序之间的共享.这是可取的吗?我该怎么办?
我遵循了 @stijn 的一个理想:
让 C 应用程序和另一个 dll 共享公共内存。LV 将加载该 dll 并调用其上的方法以将值写入共享内存,然后 C 应用程序可以在轮询标志后读取它(需要锁!)。
我编写了 InterProcess 库,可在此处找到:http ://github.com/samuellab/InterProcess
CreateFileMapping()InterProcess 是一个紧凑的通用库,它使用和设置 Windows 共享内存MapViewOfFile()。它允许用户在任意数量的命名字段中无缝存储任何类型的值(int、char、您的结构......等等)。它还实现了互斥对象以避免冲突和竞争条件,并在一个干净简单的接口中抽象了所有这些。在 Windows XP 上测试。应该适用于任何现代 Windows。
为了在我现有的 C 代码和 Labview 之间建立接口,我编写了一个小型包装 DLL,它位于 InterProcess 之上,并且仅公开我的 C 代码或 Labview 需要访问的特定函数。这样,所有共享内存就被完全抽象掉了。
希望其他人会发现此代码有用。