0

我正在为无线传感器网络编写一个 linux 测试平台。核心目标是测试任意两个节点之间的数据传输。网络使用树形拓扑运行。网络中的一个节点是“驱动程序”。该节点使用串行端口连接到 linux PC。我正在尝试编写的是这台 linux PC 上的软件,它将驱动网络中的数据传输。

“Driver”节点从Linux PC上运行的软件获取命令,将数据请求消息发送到Sender节点。Sender 节点将解析数据请求消息并开始向“驱动程序”传输数据。可以存在多个这样的发件人。所有数据传输都是从发件人到“驱动程序”节点。“驱动程序”节点将它接收到的所有数据传递给 linux 应用程序。linux 应用程序跟踪从不同发件人收到的数据包数量。

以下是要求。

  1. 网络中的任何节点都可以是驱动程序(目的地),任何节点都可以是发送者。
  2. 在任何给定时间都可以有多个 Sender,将数据发送到“Driver”节点。
  3. linux应用程序从串口接收和通过串口发送的数据被记录到一个文件中。
  4. linux 应用程序应该能够从文件中读取数据请求消息并在指定的时间将它们发送出去。
  5. 此 linux 应用程序的 GUI。所有代码都在 C 中,因此 GUI 选择必须与 C 相得益彰。

最后一个转折点:从 Sender 到“Driver”的数据是碎片数据。在发件人端,碎片在设备本身中处理。在“驱动程序”端,碎片将在 linux 应用程序中处理。因此,Linux 应用程序必须跟踪分段窗口,并为与多个发送方进行的每个数据传输发送分段确认,并跟踪到目前为止从每个发送方接收到的数据包数量。

那么在 linux 应用程序中,有多个线程的方法 - 每个 Sender 一个线程吗?一个串口可以同时发送和接收多个线程吗?

任何要求的建议将不胜感激。基本思想是测试数据传输,尤其是数据收集(几个节点向一个节点发送数据)。如果建议采用与上述不同的方法,我也非常欢迎听到它们。

谢谢一堆

詹姆士

4

2 回答 2

1

那么在 linux 应用程序中,有多个线程的方法 - 每个 Sender 一个线程吗?
一个串口可以同时发送和接收多个线程吗?

您只需要一个读取器/发送器在串行端口上读取/写入。当您的应用程序在输出时阻塞时,您将需要端口上的非阻塞 I/O,以便您可以响应接收到的字符并处理 UI 请求。此外,在阅读时,您需要将一整套数据组装成一个完整的数据包。这可能需要多次读取,直到您获得完整的“数据包”。

如果您的 GUI 选择是 X,您可以使用 XtAppAddInput() 添加用于读取和写入串行端口的事件处理程序。

于 2009-06-09T05:36:36.847 回答
0

对于完整的软件包,这不是一个问题,而是一个不完整的规范。不过,我会尽我所能来帮助你。

关于单线程与多线程:您当然可以在单线程中编写它。在这种方法中,您可能只是将片段状态保留在数据结构中,并使用 poll() 从所有传感器和串行端口中读取。如果您采用多线程方法,您可能希望使用 pthread 将串行端口访问(和任何其他共享资源)包装在互斥锁中。

是的,所以我看不到你在这里问的任何其他问题。您到底在寻找什么?

于 2009-06-08T22:15:36.663 回答