c++ - 为什么当我尝试设置串口时,函数返回“输入/输出错误”?
问题描述
我尝试在 C++ 中设置一些串行端口,但是当我尝试函数 tcsetatrr 时,它的返回错误 -1。端口打开没有问题。
char port_name[] = "/dev/ttyS1";
int port = open(port_name, O_RDWR | O_NOCTTY | O_NDELAY);
if(port < 0){
std::cout << "Cant open port" << std::endl;
return;
}
struct termios settings;
tcgetattr(port, &settings);
cfgetispeed(&settings);
//std::cout << settings.c_cflag;
//Baudrate
cfsetispeed(&settings, B115200);
cfsetospeed(&settings, B115200);
//Data bits
settings.c_cflag &= ~CSIZE;
settings.c_cflag |= CS8;
//Parity
settings.c_cflag |= ~PARENB;
//Stop bit
settings.c_cflag &= ~CSTOPB;
//Flow control
settings.c_cflag |= ~CRTSCTS;
settings.c_iflag &= ~(IXON | IXOFF | IXANY);
int er = tcsetattr(port, TCSANOW, &settings);
if (er<0) {
fprintf(stderr, "Error openinig: %s\n", strerror(errno));
}
close(port);
输出:
Input/output error
我该如何解决?我以root身份运行代码。问题不在设置结构的配置中,因为在将其注释掉后,我得到了同样的错误
解决方案
最可能的答案是您实际上并没有串行设备 /dev/ttyS1。尝试 /dev/ttyS0 代替。我的电脑上也有同样的交易。
我在这里看到了一些额外的问题。
你不检查是否tcgetattr()
成功,所以不要太确定你是否到达tcsetattr()
.
跟注settings.c_cflag |= ~PARENB;
orsettings.c_cflag |= ~CRTSCTS;
很可能不是您想要做的(将引发除所选标志之外的所有标志)。
推荐阅读
- pytorch - 如何在 PyTorch 中做蒙面平均值?
- python - 使用for循环绘制多条曲线和交点?
- postgresql - PostgreSQL:pg_sleep 的串联
- python - 为什么 Python 在调用派生自 C++ std::vector 的 pybind11 type_cast-ed 类的方法时会抱怨?
- r - 如何一次性计算 R 中 group_by 变量的总数?
- vue.js - 只看一次触发 - vue3
- r - 从数据框中的特定行中删除括号内的文本
- django - 固定装置/加载数据中的 Django id vs pk
- ios - Apple 代码兑换 - presentCodeRedemptionSheet() 未提供任何反馈
- amazon-web-services - Terraform EKS 配置图被禁止