有没有一个跨平台的C++串口库可以枚举端口?

11

我正在寻找一个可以连接和与串口设备通信的C++库。我需要一个可以在Windows和Linux上使用的库。我已经找到了"serialib",但它没有列举可用端口的功能。

因此,我需要一个跨平台的"端口枚举器"库或者一个全新的跨平台串口库。

有人知道好的库吗?

谢谢,丹。


你正在尝试解决错误的问题。插入串行电缆到机器背面清晰标记的连接器的日子已经一去不复返了。你可以通过本地调用获取可用端口列表,但这仍然无法告诉你哪个端口实际上连接到设备。用户将不得不自己解决这个问题。提供一个配置文件让他输入端口名称。现在,无论使用什么特定格式的端口名称都不再重要。 - Hans Passant
5
在配置文件中写入端口名称是一种不便。我曾看到跨平台的应用程序会枚举可用/已连接的端口,并为用户提供列表。这就是我想要的。(一个很好的例子是Arduino IDE,它是用Java编写的。) - Lex - Boycott Slack - see bio
你找到了一个适用于Arduino的跨平台库?当然,这对用户来说是不方便的。串行端口可以追溯到上世纪70年代,40年前的硬件并不支持即插即用。错误在于依赖于一个40年历史的硬件标准。也许这不是你的错,某些硬件供应商选择了简单的路线。那就找另一个供应商吧。 - Hans Passant
8
像Arduino上发现的FTDI芯片为例,它提供了对ATMega328等芯片上串行端口的USB访问。串行通信并不过时,几乎所有微控制器都有TX和RX引脚,而USB显然也不过时。FTDI驱动程序提供了与硬件串行端口完全相同的串行连接方式,这在所有现代操作系统中都得到了充分支持。我没有使用过时的技术。我不介意为每个操作系统创建自己的带有#IFDEF的库,所以我想知道每个操作系统的最佳方法是什么? 谢谢,丹。 - Lex - Boycott Slack - see bio
FTDI驱动程序相当臭名昭著。经销商拒绝支持它,而FTDI不会发布源代码,以便让任何人有机会改进它。可能是因为他们不拥有它。祝你好运。 - Hans Passant
2个回答

8

1
谢谢,看起来正是我需要的东西。不过我已经开始使用这里的一个了:http://www.teuniz.net/RS-232/,对我来说它很好用。 - Lex - Boycott Slack - see bio
1
关于http://www.teuniz.net/RS-232:<br/> “它使用轮询从串口接收字符。不支持中断/事件驱动。” <br/> 有没有其他选项可以避免上述限制? - Nikita Vorontsov
1
不幸的是,该库对于内存分配、泄漏、抛出异常、锁定等方面非常粗心大意,据我所见也不支持异步IO。 - Trass3r
1
@Trass3r,哪个库是不稳定的?是teuniz RS-232还是wjwwood serial? - PBJ
1
wjwwood库。 - Trass3r

2

QextSerialPort项目是一个跨平台的串口库,包括端口枚举功能。 这里 是他们简单枚举所有串口的示例。


1
谢谢您的建议,但我不确定这是否完全符合我的要求,因为我没有使用Qt。 - Lex - Boycott Slack - see bio
1
好的,但请记住您不需要使用Qt的GUI工具。QtCore库(仅需要使用QextSerialPort)仅依赖于Glib和PCRE。 - wjl
我一直在尝试将QextSerialPort集成到Eclipse中,而不是QtCreator,但是遇到了一个又一个的错误。 - user3085931

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接