gpt4 book ai didi

linux - 串口数据通过/dev/ttyS0和文件读写

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:23 24 4
gpt4 key购买 nike

我最近拿起一根带有交叉适配器(零调制解调器)的串行电缆,并认为它可以做一个教育实验,看看我是否可以通过它在两台 Linux (Lubuntu) 计算机之间进行一些受控的字节传递和接收。我用 Java 编写了一些基本代码,将/dev/ttyS0"file"作为输入和输出文件流打开。

我可以使用 minicom 以及 echo 和 cat 来回发送数据。我假设这些程序的作者理解我不理解的东西 :) 但出于某种原因,当我尝试对这段代码做同样的事情时,传输端挂起,直到添加了一个 LF (ascii 10) 字符。我在想操作系统会一直保存字节,直到它有某种理由发送一大块数据......?另外,接收方报告了两份“10”收据,我真的不明白。

出于某种原因,我在想如果我写一个字节,一个字节应该立即显示在另一侧,但事实并非如此。

正如我所说,这只是一个探索性练习,除了更好地了解操作系统如何与串行端口交互之外,没有真正的结局……感谢您提供任何信息!

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class SOtest {

public static void main(String[] args) {
SOtest sot = new SOtest();
sot.rx(); // or sot.tx() for the transmit side
}

public void tx() {
FileOutputStream nmoutfile;

try {
nmoutfile = new FileOutputStream("/dev/ttyS0");
nmoutfile.write(49); // ascii value 10 still needed...?
nmoutfile.close(); // doesn't force value 49 to send

} catch (Exception ex) {
System.out.println(ex.getMessage().toString());
}
}

public void rx() {
FileInputStream nminfile;

try {
nminfile = new FileInputStream("/dev/ttyS0");

while (true) {
System.out.println(nminfile.read());
}
} catch (Exception ex) {
System.out.println(ex.getMessage().toString());
}
}
}

最佳答案

对于您遇到的问题,您应该在两侧正确设置串行连接(hek2mgl 正在谈论的 termios.h 内容)。您不仅要将串行 chardev 作为文件打开,还要对其进行设置。

关于这个主题的好读物是:

一些关于 Java 和串行端口的东西:

关于linux - 串口数据通过/dev/ttyS0和文件读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16951667/

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