gpt4 book ai didi

c - 为什么我在使用 read() 时一次只能得到一个字符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:21 25 4
gpt4 key购买 nike

我直接连接TTY的Tx和Rx,然后我写一个字符串到TTY,然后,我使用read()期望得到我之前写的相同的字符串。当我运行程序时,我发现我可以将整个字符串写入一次 TTY,但是当我稍后使用 read() 时,我每次只能读取一个字符。请帮我弄清楚为什么会这样,以及如何发生的我能解决这个问题吗?我使用的系统是Ubuntu14.04,编译器是gcc 4.8.2。谢谢!

这是我写的主要功能:

int main(){
int fd;
fd = open("/dev/ttyUSB0",O_RDWR);
if(fd == -1)
{
perror("serialport error\n");
}
else
{
printf("open ");
printf("%s",ttyname(fd));
printf(" succesfully\n");
}

set_speed(fd,115200);
if (set_Parity(fd,8,1,'N') == FALSE) {
printf("Set Parity Error\n");
exit (0);
}
char buf[100] = "aaaaaaaaaa";
char buf_r[100]= "12314";
int wl= write(fd,buf,strlen(buf)+1);
printf("write succesfully length %d\n",wl);
int rl=read(fd,buf_r,100);
printf("read succesfully length %d\n",rl);
while (rl<wl){
rl+=read(fd,buf_r+rl,100);
printf("read succesfully length %d\n",rl);
}
printf("buf_r=%s\n",buf_r);
close(fd);
return 0;}

这是程序的结果:

open /dev/ttyUSB0 succesfully

write succesfully length 11

read succesfully length 1

read succesfully length 2

read succesfully length 3

read succesfully length 4

read succesfully length 5

read succesfully length 6

read succesfully length 7

read succesfully length 8

read succesfully length 9

read succesfully length 10

read succesfully length 11

buf_r=aaaaaaaaaa

最佳答案

简答:电脑快,串口慢。

使用您使用的设置(8 无 1)每个字符需要 10 位时间来传输(1 位起始位、8 位数据位、0 位奇偶校验位、1 位停止位)。由于波特率为115200,字符传输速率为每秒11520个字符。所以每个字符需要 87 微秒。发送 11 个字符需要 957 微秒,或大约 1 毫秒。

在现代处理器(等待数据)上调用read 只需几微秒。因此代码读取数据的速度比串口传输数据快得多。

作为一个简单的测试,在read 之前调用usleep(1000),您应该在一次read 中获取所有数据。

关于c - 为什么我在使用 read() 时一次只能得到一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32537792/

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