gpt4 book ai didi

c++ - 串口打开返回EAGAIN

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:08 25 4
gpt4 key购买 nike

我在打开串行端口后立即收到 EAGAIN 错误。该代码在共享库中使用并由 Python 代码调用。

我知道端口 (/dev/ttyUSB0) 是好的。我使用相同的端口直接与 Python (PySerial) 通信,并且工作正常。在那种情况下,我的设备会回答。

但是当从 ctypes (Python) 调用下面的代码时...我得到了 EAGAIN 错误。

ERROR_CODES SerialPortLinux::openCommunication() {
ERROR_CODES error_code;
hComm = open(port_name.c_str(), O_RDWR | O_NOCTTY | O_SYNC);

error_code = getPortErrorCode();
if (error_code == ERROR_CODES::SUCCESS) {
...
} else {
close(hComm);
}
return error_code;
}


ERROR_CODES SerialPortLinux::getPortErrorCode(){
ERROR_CODES error_code;
auto error_number = errno;
switch(error_number){
...
}
}

在获取句柄之前是否需要进行配置?我是否遗漏了一些明显的东西?

最佳答案

成功 调用任何 POSIX 系统函数后 errno 的值是未指定的,至少根据 Single Unix Specification v6。您应该查看 open() 是否成功(即返回非负句柄),并仅在 open() 失败时分析 errno

所以,你的代码应该是:

ERROR_CODES SerialPortLinux::openCommunication()
{
ERROR_CODES error_code;
hComm = open(port_name.c_str(), O_RDWR | O_NOCTTY | O_SYNC);
if (hComm == -1)
{
error_code = getPortErrorCode();
// Treat this error condition somehow
return error_code;
}

return ERROR_CODES::SUCCESS;
}

在您的特定情况下,我猜想 open() 操作成功了,但您仍然从 errno 获得了 EAGAIN,因为该值自上次失败操作以来一直存在.

关于c++ - 串口打开返回EAGAIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58085527/

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