小编Tau*_*sen的帖子

C:read()挂起而没有从unix上的串口输入

我在Ubuntu 12系统上使用C从串口获取数据时遇到了一些问题.

我正在使用open()和read(),这是我的代码:

Fd = open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY);
if (Fd == -1) {
    printf("Could not open serial port: %s\n", strerror(errno));
    return 1;
}

fcntl(Fd, F_SETFL, 0);

char buf;
while (1) {
    read(Fd, &buf, 1);
    printf("%c", buf);
}
Run Code Online (Sandbox Code Playgroud)

但是 - 我的串行设备设置为发送"Boot.\ r \n",然后发送"To send:",但是当我连接设备并启动程序时,我只得到第一行("Boot.")然后不再.如果我启动gtkterm/picocom,我会立即获得两条线路.

我还尝试为SIGTERM添加信号处理程序以正确关闭端口,使用:

void signal_callback_handler(int signum) {
    printf("Caught SIGTERM\n");
    close(Fd);
    exit(signum);
}
Run Code Online (Sandbox Code Playgroud)

signal(SIGINT, signal_callback_handler);
Run Code Online (Sandbox Code Playgroud)

使用这个,当我按下CTRL-C时,我得到以下内容:

Boot.
^CTo send: Caught SIGTERM
Run Code Online (Sandbox Code Playgroud)

我还尝试先设置端口,使用:

struct termios port_settings;          // structure to store the port settings in
cfsetispeed(&port_settings, B115200);  // set baud …
Run Code Online (Sandbox Code Playgroud)

c unix serial-port

3
推荐指数
1
解决办法
1531
查看次数

标签 统计

c ×1

serial-port ×1

unix ×1