Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么串行连接仅在按enter键后接收字符?_Linux_Serial Port_Uart - Fatal编程技术网

Linux 为什么串行连接仅在按enter键后接收字符?

Linux 为什么串行连接仅在按enter键后接收字符?,linux,serial-port,uart,Linux,Serial Port,Uart,我有一个简单的PC到板的串行连接(9600,无奇偶校验,8位,无硬件流) 我在PC中打开了简单终端*(teraterm),然后在teraterm和board中输入键,我就这么做了 cat /dev/ttyO5 我在作用域中看到了按下的字符,但只有在teraterm中按下“enter”后,我才在board控制台中看到这些字符(就好像它们存储在Linux驱动程序中的某个FIFO中,该驱动程序只输入或输出) 为什么Linux驱动程序只在按enter键时接收字符 是否有一些方法可以不按enter键接

我有一个简单的PC到板的串行连接(9600,无奇偶校验,8位,无硬件流) 我在PC中打开了简单终端*(teraterm),然后在teraterm和board中输入键,我就这么做了

 cat /dev/ttyO5
我在作用域中看到了按下的字符,但只有在teraterm中按下“enter”后,我才在board控制台中看到这些字符(就好像它们存储在Linux驱动程序中的某个FIFO中,该驱动程序只输入或输出)

  • 为什么Linux驱动程序只在按enter键时接收字符
  • 是否有一些方法可以不按enter键接收字符?(我们使用一些ascii协议,因此将其作为伪协议发送是没有意义的)
  • 谢谢你的建议, 跑

    但是我在board控制台中看到字符,只是在按下teraterm中的“enter”之后

    您描述的行为是规范阅读(又称阅读行)的特征。
    您似乎想要的行为称为非规范读取(也称为原始读取或二进制读取)

  • 为什么Linux驱动程序只在按enter键时接收字符
  • 否,Linux串行端口驱动程序正在接收线路上显示的每个字符。
    每个字符都被缓冲(通常在可DMA的内存中),然后转发给行规程处理程序,该处理程序也在缓冲接收到的数据。
    userland程序的规范化read()syscall将被阻止,直到行规程处理程序检测到行终止字符

  • 是否有一些方法可以不按enter键接收字符
  • 是,在发出
    cat
    命令之前,将串行端口配置为非规范模式:

    stty -F /dev/tty05 raw
    
    或者更可能是正确的设备节点

    stty -F /dev/ttyO5 raw
    
    或者使用termios接口在板上的用户空间程序中将串行端口配置为非规范模式。示例代码是

    有关如何正确编程串行端口的文档如下
    还有。

    这个设备真的是
    tty05
    ,还是应该是
    ttyO5
    ?关于tty05,我已经纠正了问题中的错误