打开串行端口后,我立即收到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){
...
}
}
在获取手柄之前是否需要进行配置? 我缺少明显的东西吗?
答案 0 :(得分:2)
至少在单个Unix规范v6中,未对errno
的值进行指定。您应该查看open()
是否成功(即返回非负句柄),并仅在errno
失败时分析open()
。
因此,您的代码应为:
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,因为该值自上次失败操作以来一直存在。