Linux用户空间中的串行通信(非阻塞)

0 投票
1 回答
730 浏览
提问于 2025-04-18 05:43

我正在尝试让一个Arduino板和一个运行Ubuntu的BeagleBone(BB)白色版通过UART进行通信。我了解到BB的UART驱动程序已经是基于中断的。

我想把所有接收到的数据存储到一个缓冲区里,这样我需要的时候就可以读取,类似于微控制器的做法。但我想避免内核编程,所以我不能使用驱动程序的数据结构。我希望找到一个完全在用户空间的解决方案。

我计划使用两个Python进程,一个负责写入所有接收到的数据(到一个共享列表),另一个在需要的时候读取这些数据,这样读取就不会被阻塞。

我有两个问题:

  1. 这个方法对吗?如果对,请推荐一个简单的进程间通信方法。

  2. 实现这个的正确方式是什么?

注意:我正在使用PyBBIO库,它可以直接读写/dev/mem这个特殊文件。

1 个回答

2

你可能想用 pyserial,这个工具可以直接和系统的内核接口打交道(我不太清楚PyBBIO是干嘛的)。它可以自动处理输入缓冲区,所以你不需要额外的进程。如果你想使用更多的进程,可以看看 multiprocessing。另外,还有一个更简单的选择是 threading,这个可以省去一些通信的麻烦。如果你需要支持网络的多进程,可以使用 Ipython的集群

撰写回答