用C语言编写多线程串行端口程序
Serial port programming with multi-thread in C
我正在编写一个gtk应用程序(在c++中)通过串口与电机控制器通信。我正在使用Linux Ubuntu和termios lib。我需要关于做这件事的最佳解决方案的建议。以下是我的约束条件:当我发送请求时,控制器会给我返回一条消息2-如果发生错误,控制器可以随时向我发送错误通知请求是以[CR]结尾的ansi字符串4-控制器答案为以[CR][NL]
结尾的ansi字符串由于(3)和(4),我认为在CANONICAL模式下配置串行端口是合适的。由于GUI +(2),我想到了多线程:一个主线程在串行端口上写用户请求,另一个无限线程读取控制器答案。你认为这是个好主意吗?
第二个问题:如果我使用多线程,我希望能够在我需要的时候写数据,所以我必须找到一种方法来停止/睡眠读线程在写期间可能使用pthread_cond_wait。我说的对吗?我见过投票和选择函数,但我不太理解它们,我不确定它们是否与规范模式兼容。
我开始使用多线程和串口。我在谷歌、论坛上读了很多东西……但是对于一个初学者来说,大量的信息是有点压倒性的。
谢谢你的帮助。
在这里,将GUI与串行端口分开要考虑的主要问题是延迟。您是否会执行任何操作,导致您需要轮询端口一段特定的时间,这将引起用户的注意?如果你只是做请求/回复,并且延迟很低,你的用户可能不会注意到这些延迟。此外,我认为接收这些异步错误消息也不会造成任何明显的延迟。除非你知道在Init消息或类似的东西被发送到控制器后可能会有很多秒的延迟,否则保持应用程序的单线程可能会让你的生活简单得多。
另一方面,如果会有那些大的延迟,或者你只是想搞乱多线程,我会开始用一个线程做所有的GUI工作,另一个线程处理所有的串行IO。在这两个线程之间使用消息传递或事件通知来协调您的活动,它应该非常直接。
- Qt Q串行端口未编程设备未关闭
- 在 linux c++ 中没有通过串行端口发送的数据
- 检查串行端口Linux中是否有传入数据(cbInQue for linux)
- 在不传输的情况下更改 Win32 中的串行端口波特率
- C/C++ Linux 上的多线程服务器/客户端崩溃
- 增强 ASIO 和串行端口异步读取
- 串行端口写入究竟如何从缓冲区实际写入数据?
- 如何将参数这些串行端口传递到函数中
- 从 C/C++ 访问 Android 中的串行端口
- Qt两个串行端口发送和接收
- 通过串行端口从GPS传感器读取
- 提升 asio 串行端口"end of file"
- 通过串行端口发送多个值
- 与QSerialPort配合使用的串行端口仿真
- 读取文件在多次串行端口读取后ERROR_INVALID_HANDLE
- 串行端口与 C++ 中的线程冲突
- 多个软件串行端口
- 使用串行端口线程进行 CPU 支持
- Qt串行端口的C++线程模式
- 用C语言编写多线程串行端口程序