当前位置: 首页 > 面试题库 >

为什么仅在按Enter键后才能在串行连接中收到字符?

松嘉颖
2023-03-14
问题内容

我有一个使用串口(9600,无奇偶校验,8位,无硬件流)的简单PC到板连接,我在PC中打开了简单的终端*(带有teraterm),然后在teraterm和板中输入密钥,我只是这样做

 cat /dev/ttyO5

我看到了作用域中被按下的字符,但是只有在第三次按下“
enter”之后,我才在板子控制台中看到这些字符(就好像它们存储在Linux驱动程序中的某些FIFO中,仅输入会触发)

  1. 为什么只有按Enter键才能在Linux驱动程序中接收到字符?
  2. 有什么方法可以不用按回车键来接收字符吗?(我们使用了一些ascii协议,因此将其作为虚拟对象发送是没有意义的)

谢谢您的建议,冉


问题答案:

但是我只能在Teraterm中按下“ enter”之后才能看到板子控制台中的字符

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

  1. 为什么只有按Enter键才能在Linux驱动程序中接收到字符?

不,Linux串行端口驱动程序正在接收线路上显示的每个字符。
每个字符都被缓冲(通常在DMA可用的内存中),然后转发到 行规程处理程序 ,该 程序 也缓冲接收到的数据。userland程序会阻止
规范的 read() 系统调用,直到行规程处理程序检测到行终止符为止。

  1. 有什么方法可以不用按回车键来接收字符吗?

是的,在发出cat命令之前,将串行端口配置为非规范模式:

stty -F /dev/tty05 raw

或更可能是正确的设备节点是

stty -F /dev/ttyO5 raw

或使用 termios
界面在主板上的用户空间程序中将串行端口配置为非规范模式。示例代码在这里。

有关如何正确编程串行端口的文档,请 参阅《
POSIX操作系统串行编程指南》和“
正确设置终端模式”。



 类似资料:
  • 问题内容: 我有以下python代码: 但是当我按下按钮时,出现以下错误: PS我在Windows 7上使用python IDLE版本2.6。 问题答案: 对于Python 2,您不需要。前者会读一行。后者将读取一行并尝试执行它,如果您不希望代码被输入数据的人破坏,则不建议这样做。 例如,他们可以按照以下示例执行调用任意函数的操作: 如果您在Python 2下运行该代码并输入,则即使您的代码(在其

  • 问题内容: 我只是发现我认为PLSQL与Oracle中的SQL有点意外的行为。 如果我在SQLDeveloper上运行此查询,则会得到5个结果: 但是,如果我在SQLDeveloper中运行以下语句: 变量 w_counter 以值1(怪异)结束 但最奇怪的部分是,如果我将查询封装在子查询中…… 该 w_counter 变量完成与价值5 … 你对此有什么要说的? 我正在使用Oracle 9.2i

  • 我有一个xhtml文件(JSF应用程序),我正在呈现一个带有自定义列的数据表。 由于上一个自定义列,我收到: JBWEB000236:Servlet。servlet jsp的service()引发异常:javax。面孔。看法小脸蛋。FaceletException:分析applicationPortfolioList时出错。xhtml:与元素类型“ul”关联的属性“id”应该有错误跟踪[line:

  • 问题内容: 我正在使用Selenium Server(v2.21)和SeleniumJavaClient(v.2.21.0)来自动化Web表单,该表单需要在每次输入后都按下键,因为字段是根据输入的值公开的。因此,根据此处的解决方案,我一直在尝试不同的方法以在表单中输入字符串并按-这是我尝试过的方法: 它会 看起来 像这是最合理的解决方案(),但是编译器抛出,如果你不添加一个错误,因为期待一个字符串

  • 问题内容: 我是Bootstrap的新手,并且一直遇到这个问题。我有一个输入字段,只要输入一个数字,就会调用from函数,但是我希望在输入完整个数字后按“ Enter”键才能调用它。验证功能存在相同的问题-调用时间过早。 问题答案: 根据React Doc的说法,您可以听键盘事件,例如or ,not 。 更新:使用React.Component 这是使用React.Component的代码,它执行