gpt4 book ai didi

Linux串口的正确初始化顺序

转载 作者:IT王子 更新时间:2023-10-29 00:57:15 27 4
gpt4 key购买 nike

我写了一个应用程序,它必须在 Linux 上使用串行端口,尤其是 ttyUSB 端口。读取和写入操作是通过标准的 select()/read() 循环和 write() 执行的,它们可能没有任何问题,但是初始化代码(或缺少其中的某些部分)损坏了 tty 子系统中的某些东西。在这里:


vuxboot(string filename, unsigned baud = B115200) : _debug(false) {
_fd = open(filename.c_str(), O_RDWR | O_NOCTTY);
if(_fd < 0) throw new io_error("cannot open port");

// Serial initialization was written with FTDI USB-to-serial converters
// in mind. Anyway, who wants to use non-8n1 protocol?

tcgetattr(_fd, &_termios);

termios tio = {0};
tio.c_iflag = IGNPAR;
tio.c_oflag = 0;
tio.c_cflag = baud | CLOCAL | CREAD | CS8;
tio.c_lflag = 0;

tcflush(_fd, TCIFLUSH);
tcsetattr(_fd, TCSANOW, &tio);
}

另一个 tcsetattr(_fd, TCSANOW, &_termios) 位于析构函数中,但它无关紧要。

有或没有这个 termios 初始化,奇怪的事情发生在系统应用程序退出后。有时,普通的 cat(或 hd)会立即退出,每次都不打印或打印相同的内容,有时它会等待并且不会显示任何确定发送到端口的数据;和 close()(read() 也是,但不是每次)向 dmesg referring to usb-serial.c 发出奇怪的 WARNING .

我检查了硬件和固件数十次(甚至在不同的机器上),我确信它按预期工作;此外,我剥离了固件,只是一遍又一遍地打印相同的消息。

如何在不破坏任何东西的情况下使用串口?谢谢。

最佳答案

点击 WARN_ON可能意味着您遇到了内核错误。我知道最近有很多改进 USB 串行驱动程序的工作;我建议尝试更新的内核,和/或在 linux-usb@vger.kernel.org 邮件列表上询问。

关于Linux串口的正确初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982552/

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