gpt4 book ai didi

c++ - 使用 boost::asio 打开串行连接时堆栈溢出

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:25 24 4
gpt4 key购买 nike

我正在尝试连接到 COM3 上的设备,代码会一直运行,直到我调用 open("COM3"),这会导致堆栈溢出。这是相关代码:

asio::io_service io;
asio::basic_serial_port<asio::serial_port_service> scope(io);

//Open the connection and configure it
cout << "OPENING\n";
system::error_code error;
scope.open(PORT, error);

打开连接后,我用波特率等配置它。

它卡在 win_iocp_serial_port_service.ipp 中,在 SetCommState(handle, &dcb) 的内部。

我还有一些用于连接、发送命令和断开连接的 labview 代码,这些代码有效。如果我在启动计算机后运行了 labview 代码,那么我的 C++ 程序就可以工作(连接而不挂起),但是如果我还没有运行 labview 代码,它就会出现堆栈溢出。这让我觉得我不是在启动某个驱动程序或设置一些持久性的东西,但我不确定它会是什么。如果有人遇到此问题或有任何见解,我将感谢您的帮助!

来自进一步测试的信息:从非 labview 串行连接客户端连接似乎也可以启用 boost 连接。如果我首先通过 super 终端连接,它会工作,如果我通过命令行连接(根据本指南 https://learn.sparkfun.com/tutorials/terminal-basics/command-line-windows-mac-linux ),那么我随后也可以通过 boost 连接,这可能是一个可行的解决方案,即使它很笨。不幸的是,我无法使用 System.IO.Ports.SerialPort 成功发送数据,因此临时解决方案是使用 System.IO.Ports.SerialPort 连接,断开连接,然后使用 boost asio 连接,现在它可以工作了。这工作得相当好,但代码现在只能在 Windows 上工作。

最佳答案

由于您可以使用来自 LabVIEW 的串行仪器,您“没有启动某些驱动程序或设置某些持久性”的假设可能是正确的。

您可以看到 LabVIEW 和 VISA 如何使用 NI 提供的工具I/O Trace [1] 配置端口和发送命令。一旦您掌握了工作设置和命令,您就可以将它们与您对 boost::asio 的调用相匹配,并确定您是过度配置了端口还是配置不足。

在 I/O 跟踪日志中,您会看到 VISA 在打开 session 之前设置波特率、流量控制和其他特征。然而,驱动程序所共享的并不多,因此如果您的程序使用相同的设置和序列但仍然挂起,那么请仔细检查您是如何针对 asio 接口(interface) [2] 进行编程的。

References

[1] Performing a Good NI I/O Trace Capture for Debugging/Troubleshooting
http://digital.ni.com/public.nsf/allkb/282C5D41E2BA04F2862574BA007803B9

[2] Serial ports and C++
http://www.webalice.it/fede.tft/serial_port/serial_port.html

关于c++ - 使用 boost::asio 打开串行连接时堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049447/

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