python - 将数据从 C 缓冲区传输到 Python,以便在 Visual Studio 2019 中使用 Matplotlib 进行绘图
问题描述
我有 C 代码在 Visual Studio 2019 中成功运行,它用来自 FPGA 的实时数据填充缓冲区。它被宣布为...
无符号字符 *pBuffer;
...在 C 中。我可以在 pBuffer 的地址处的内存监视窗口中看到数据是正确的。
我还在 Visual Studio 中安装了 Python 3.7,并使用 Python 数组中的 python.h 成功地使用 Matplotlib 进行绘图。
所以我的问题是如何将数据从 C 缓冲区传输到 python 数组进行绘图?
我看过 ctypes 并且因为我的主要代码是在 C 中,所以从 C 转到 Python 然后再次调用 C 没有多大意义。我看过 bytes()、bytearray() 和 memoryview()。Memoryview 对我很有吸引力,因为它不复制数据,而且这种绘图需要非常快,因为数据进来的速度非常快。(想想示波器)但它似乎不是它使用的真实物理地址,而是某种与我的数据所在的任何内存位置都不对应的标识符。我只是想绘制我知道存在于特定地址的 C 缓冲区(一维数组)中的数据。Python 似乎非常严格。
我似乎无法做我想做的事,因为 Python 显然不允许从某个特定的内存位置读取数据。在这种情况下,我想知道它如何检查内存以以任何方式显示内容,更不用说将内容传输到 Python 数组了。这是怎么做到的?是的,我是 Pythonic 新手。感谢您的任何帮助或建议。
解决方案
我的第一个想法是在文件中传递数据。matplotlib
它将为交换增加几毫秒,但在加载 Python 解释器和模块后甚至可能察觉不到。
如果您需要更即时的响应,则本地环回网络连接可能会很有用。这在 C 端比在 Python 端更麻烦,尤其是在 Windows 上。
至于直接从记忆中读取,你是对的。标准 Python 不会这样做。您可以使用基于 C 的模块从 C 主程序中执行您现在正在执行的任何操作,以从 FPGA 中获取数据。如果都是 Windows API 的股票,您可能想看看 Mark Hammond 的PyWin32模块。可以使用pip install pywin32
提升的命令提示符从 Python 包索引安装它。它可能支持您需要的 API。如果是这样,那么您可能不需要单独的 C 程序来获取数据。
PS:进程间通信的另一个选项是命名管道。Windows 命名管道可以用 PyWin32 打开。请参阅此 SO question的最高投票答案。
推荐阅读
- delphi - 如何从证书中获取有效的 CNG 私钥句柄
- caching - AGGREGATE FILTER 是否期望 Redisearch 中区分大小写的查询表达式?
- simulation - 我应该如何开始在正方形内碰撞粒子?(马尼姆)
- botframework - 在同一回合完成作曲家对话框后,我们可以将控制权返回到机器人源吗
- google-colaboratory - 如何在 Google Colab Notebooks 上安装 SpacyTextBlob?AttributeError:没有属性“工厂”
- php - 如何在同一共享主机上部署 Vue CLI 应用程序和 Laravel for api 端点
- visual-studio - 为什么 Microsoft Store 上的应用程序图标太小?
- api - 在邮递员上将数据插入数据库
- c++ - 基于模板的基类,如何编写构造函数?
- groovy - 从 JSON 有效负载中删除特定节点,保持子节点完整