unix下串口编程 加速问题
工程上的需要写了一个串口通讯的程序,实际过程中调用的次数很多,所以每次程序都要运行很长时间(实在不能忍)才结束,请教一下怎样优化串口通讯程序才能提速?无限的感谢!!下面是程序的主要部分:
int uart_tx(uint32_t opera){
int fd;
fd = OpenDev("/dev/ttyS0"); /* Open Serial Port #1*/
SetSpeed(fd, 9600); //设置波特率
SetFormat(fd, 8, 1, 'N'); //其他的设置
write(fd, &opera, sizeof(opera)); //传输数据
close(fd); //关闭串口
return 0;
}
int uart_rx(char *buff){
int fd;
int nread = 0;
int i;
for (i = 0; i < 130; i++){
*(buff+i) = '\0';
} //初始化
fd = OpenDev("/dev/ttyS0"); /*Open Serial Port #1*/
SetSpeed(fd, 9600);
SetFormat(fd, 8, 1, 'N');
tcflush(fd, TCIOFLUSH); /*No use*/
while (1){
while ((nread = read(fd, buff, 116)) > 0){ //循环等待接受的数据
close(fd);
return 0;
}
}
}
------解决方案--------------------
while (1){
while ((nread = read(fd, buff, 116)) > 0){ //循环等待接受的数据
close(fd);
return 0;
}
}
这样写是错误的,你第一次读到数据后,已经把句柄关闭,后边再去读,肯定出错.