gpt4 book ai didi

c - 从串口读取和写入,通过linux中的c中的环回

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

我正在编写一个程序,使用串行交叉电缆和通过连接电缆的第 2 和第 3 针进行环回来读取和写入串行端口。我会写但不会读。在读取输出中,它显示 0 作为编号。它读取的字节数。它没有将错误显示为 -1。

#include <stdio.h> // standard input / output functions
#include <string.h> // string function definitions
#include <unistd.h> // UNIX standard function definitions
#include <fcntl.h> // File control definitions
#include <errno.h> // Error number definitions
#include <termios.h> // POSIX terminal control definitionss
#include <time.h> // time calls
#include <sys/ioctl.h>


int open_port(void)
{
int fd; // file description for the serial port

fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);

if(fd == -1) // if open is unsucessful
{
perror("open_port: Unable to open /dev/ttyS0 - ");
}
else
{
fcntl(fd, F_SETFL, 0);
}
printf("%d",fd);
return(fd);
}
int configure_port(int fd) // configure the port
{
struct termios port_settings; // structure to store the port settings in

cfsetispeed(&port_settings, B9600); // set baud rates
cfsetospeed(&port_settings, B9600);
port_settings.c_cflag |= ( CLOCAL | CREAD );

port_settings.c_cflag &= ~PARENB; // set no parity, stop bits, data bits
port_settings.c_cflag &= ~CSTOPB;
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;
tcflush( fd, TCIOFLUSH );
tcsetattr(fd, TCSANOW, &port_settings); // apply the settings to the port
return(fd);

}
int main()
{
int fd= open_port();
int d=configure_port(fd);
printf("%d",d);
int bytes;

char mk[10];
scanf("%s",&mk);
int w=write(fd,mk,strlen(mk));

int y=ioctl(fd,FIONREAD,&bytes);

printf("%d\n",w);
perror("write");
printf("%d",y);
char buffer[80];
char *data;
int nbytes;

data=buffer;
nbytes=read(fd,data,5);
printf("the outputis \n%d\n\n",nbytes);
perror("read");
while(nbytes > 0)
{printf("datmukun %d\n\n",nbytes);
data+=nbytes;
if (data[-1]=='\n'||data[-1]=='\r')
break;
}
return 0;
}

最佳答案

根据您的 TTY 驱动程序,O_NDELAYO_NONBLOCK 可能导致 read 以非阻塞方式运行。因此,很可能在您调用 read 时尚未收到数据。如果删除这些标志,则应阻止 read 直到至少有一个字符可用。

关于c - 从串口读取和写入,通过linux中的c中的环回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658903/

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