【发布时间】:2021-02-03 19:50:51
【问题描述】:
我尝试在 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身份运行代码。问题不在于设置结构的配置,因为在将其注释掉后,我得到了同样的错误
【问题讨论】:
-
您是否尝试以root身份运行代码,您可能没有配置设备的权限。
-
“问题不在于设置结构的配置,因为...” -- 然后发布minimal,可重现的示例。您的程序还应该检查 tcgetattr() 的返回码。
标签: c++ linux linux-kernel serial-port embedded