gpt4 book ai didi

c++ - 需要有关编程方法的建议

转载 作者:可可西里 更新时间:2023-11-01 02:52:45 24 4
gpt4 key购买 nike

我需要为一个家庭自动化项目编写一个程序,该程序将在运行 Ubuntu 12.04 的 Beagle Board 上运行。以下是程序的功能:

  1. 从串行端口获取数据,在我的例子中,串行端口是使用 Linux 版本中预先存在的 FTDI 驱动程序的虚拟 COM 端口。 XBEE 模块连接到 USB 端口,通过 Zigbee 协议(protocol)接收数据并将其串行发送到 Beagle 板。

  2. 将上述数据转储到 MySQL 数据库中。

  3. 聆听平板电脑通过 TCP/IP 协议(protocol)发送命令的指令,并通过 TCP/IP 发送请求的信息。在某些情况下,它可能只是一个小数据,而在某些情况下,它可能是连续的数据流。

我已经实现了以上功能,具体如下:

  1. 我用于串口读写的代码使用了以下网站提供的头文件http://www.teuniz.net/RS-232/ .它使用 while(1) 循环不断读取串行端口以获取值。我为此创建了一个单独的线程。

  2. 我已经创建了一个单独的线程来将数据转储到 MySQL 数据库中。

  3. TCP/IP 服务器的另一个线程。当将来添加接受多个客户端连接的功能时,该线程可能会产生更多线程。

我的问题是:

  1. 考虑到它运行在具有 1GhZ ARM 7 内核的嵌入式平台上,这种产生多个线程的编程方法是否是一种好的编程方法?

  2. 有更好的方法吗?

  3. 你能给我一个方法,让我可以同时通过串口读写。我是否需要再次将读取和写入功能放在单独的线程中才能执行此操作?

最佳答案

Is this programming method of spawning multiple threads a good programming method when considering that it is running on an embedded platform with a 1GhZ ARM 7 core?

你说你目前有三个线程:串口监听线程、数据库管理线程和TCP/IP线程。

这里的答案是,这实际上取决于您希望从硬件中获得的性能。每个线程消耗多少 CPU 资源?

在我看来,线程简化了软件的设计和外观(在大多数情况下)。然而,它们是有代价的:

  • 他们需要 context-switching .如果过于频繁,会导致性能显着下降。
  • 它们使调试变得更加困难。

如果您不打算接近平台的性能极限,我没有根据的猜测是您现在应该可以使用三个线程。


Is there a better method to do it?

这与您之前的问题非常相关。我不熟悉你项目的瓶颈和限制。也许有几个,也许根本就没有,所以很难说是否有更好的方法来做到这一点。这也取决于您真正想要实现的目标。当然,还有替代方法。

例如,您可以实现多个进程而不是多个线程。多处理有自己的一组 pros and cons :

  • 上下文更重。另外,通常是 IPC更复杂。
  • 它更稳定。一个进程中的错误不会导致另一个进程停止。


Can you suggest me a method so that I can read and write via serial port concurrently. Do I need to put read and write functionality in separate threads again to do this?

可以将串行通信线程实现为一个平面while(1) 旋转循环,它同时处理读取和写入(读取数据 block 、写入数据 block 、读取数据 block )数据,写入数据 block ,等等......)。

也就是说,我认为将串行通信线程拆分为两个单独的线程(Rx 和 Tx)是一个有效(且正确)的建议。我参与过很多这样实现的项目,随着串行协议(protocol)变得越来越复杂,它通常被证明是有益的。
我不明白的是你的串行端口是 USB 还是 RS-232。


无论如何,我希望我的回答对您有所帮助和有见地。祝你好运。

关于c++ - 需要有关编程方法的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11168167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com