終端I/O---ttyS3: 3 input overrun(s)

沒系統地學過終端I/O的控制,只是按照別人的要求配置了一下
背景:gps插在串口3上
#include <stdio.h>
#include "time.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>

int main()
{
  struct termios opt;
  int fd=-1;
  int nread;
  char buf[1024];
  
  fd=open( "/dev/ttyS3" ,O_RDONLY    |O_NONBLOCK);
   if(fd==-1)    {    printf( "open /dev/ttyS3 error\n");    }
  
  tcgetattr(fd,&opt);
             //獲取終端屬性到opt
  tcflush(fd,TCIOFLUSH);
             //同時刷新收到的數據可是不讀,刷新寫入的數據可是不傳送
  cfsetispeed(&opt, B9600);    
            //設置輸入波特率
  cfsetospeed(&opt, B9600);
            //設置輸出波特率

  opt.c_cflag&=~CSIZE;
             //(不用     )字符長度掩碼。取值爲 CS5, CS6, CS7, 或 CS8。
  opt.c_cflag |=CS8;
             //取值爲CS8

  opt.c_cflag &= ~PARENB;
             //(不用     )容許輸出產生奇偶信息以及輸入的奇偶校驗。
  opt.c_iflag &= ~INPCK;
             //(不用     )啓用輸入奇偶檢測。
  opt.c_cflag &= ~CSTOPB;
             //(不用     )設置兩個中止位,而不是一個
  opt.c_cflag &= ~CRTSCTS;
             //(不用     )硬件流控
  opt.c_cc[VTIME] = 150;
             //非 canonical 模式讀時的延時,以十分之一秒爲單位
  opt.c_cc[VMIN] = 0;        
             //非 canonical 模式讀的最小字符數

  opt.c_lflag    &= ~(ICANON | ECHO) ;
             //(不用     )啓用標準模式 (canonical mode)容許使用
             //特殊字符 EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT, 
             //和 WERASE,以及按行的緩衝。
             //(不用     )回顯輸入字符。
  tcflush(fd,TCIOFLUSH);
  tcsetattr(fd,TCSANOW,&opt);
             //改變當即發生
  
     while(1)
    {
        nread = read(fd,buf,1000);
        //printf( "nread=%d\n",nread);
        // if(nread !=-1 )    printf( "%s",buf);//打印數據
        sleep(2);
        memset(buf,0x0,1024);
    }
  
   if(fd!=-1) close(fd);
  return 0;
}
我用
  cat /dev/ttyS3
發現輸入到串口的數據是對的啊
但是我用上面這個程序去讀的時候
出現以下錯誤啊:
ttyS3: 3 input overrun(s)
ttyS3: 5 input overrun(s)
而且這類問題隨程序的執行,一直都慢慢地出來,連綿不絕啊
誰碰到過這個問題,請指教

依舊沒有獲得解決辦法:權益之計,我把arm-linux-2.6內核源碼的n_tty.c
611行printk註釋掉了,重編內核,就是說,碰到這個警告不讓它打印出來
相關文章
相關標籤/搜索