日期:2014-05-16  浏览次数:20692 次

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;
}
}


这样写是错误的,你第一次读到数据后,已经把句柄关闭,后边再去读,肯定出错.