gpt4 book ai didi

c - C语言串口: read non-canonical mode

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:13 28 4
gpt4 key购买 nike

我正在尝试从 STM32 Nucleo 板获取数据(但这并不重要 ^^)。我想获取原始数据并使用非规范模式,一切都已准备就绪。我已将 VMIN 设置为 7 以等待 7 个字符未读,读取也等待 7 个字符。然而,我的阅读返回值之前得到 7 个值,我不明白为什么。你有什么主意吗 ?我理解错了吗 VMIN ?谢谢你帮助我!

我的代码:

int main(){
int r=-1;
char * device = "/dev/ttyS3";
pt = open(device, O_RDWR | O_NOCTTY | O_SYNC);
if(pt == -1){
perror("open");
exit(-1);
}
printf("open : %d\n",pt);
ioctl(pt, I_SRDOPT, RMSGD);
tcgetattr(pt, &old);
atexit(reset_tty);

tcgetattr(pt, &tty); // Get the current attributes of the Serial port

//cfmakeraw(&tty);
tty.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON | IXOFF);
tty.c_oflag &= ~(OPOST);
tty.c_cflag |= (CS8);
tty.c_cflag &= ~(CSIZE|PARENB);
tty.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
tty.c_cc[VMIN] = 7; // wait 7 characters
tty.c_cc[VTIME] = 0;
cfsetispeed(&tty,B9600); // Setting the Baud rate
cfsetospeed(&tty,B9600);

sleep(1);
r = tcflush(pt, TCIFLUSH);
printf("tcflush : %d\n",r);

r = tcsetattr(pt, TCSANOW, &tty);
printf("tcsetattr : %d\n",r);
int i = 0;
char end[20];

int count = 0;
char line[20];
memset(line,0,sizeof(line));
char forWrite[2]={'A','\0'};

while(count<10){
r = read(pt ,line,7);
printf("number of characters : %d\n",r);
printf("line = %s\n",line);
//printf("l = %c\n",line[0]);
count++;
memset(line,0,sizeof(line));
printf("\n");
}
return 0;
}

我的输出:

number of characters : 1
line =

number of characters : 2
line = 12

number of characters : 2
line = 33

number of characters : 5
line = 456ab

number of characters : 5
line = cdefg

number of characters : 1
line = a

number of characters : 4
line = bcde

number of characters : 2
line = fg

number of characters : 1
line = 1

number of characters : 3
line = 233

我从我的 STM32 发送“abcdefg”,然后是“1234567”

编辑:我发布的代码和输出是匹配的,我刚刚更改了我的打印品以便对您来说更清楚......但我失败了 ^^,它现在已经被编辑了,谢谢 :)

最佳答案

我不知道这是不是正在发生的事情,但是如果有信号,“慢速”设备(例如串行端口)上的 read()(和其他 I/O 接口(interface))将立即返回在他们等待完成时收到。

关于c - C语言串口: read non-canonical mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626490/

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