<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 文件I/O編程之: 嵌入式Linux串口應用編程

          文件I/O編程之: 嵌入式Linux串口應用編程

          作者: 時間:2013-09-13 來源:網(wǎng)絡 收藏

          本文引用地址:http://www.ex-cimer.com/article/257136.htm

          在本實例中使用tcflush()函數(shù),對于在緩沖區(qū)中的尚未傳輸?shù)臄?shù)據(jù),或者收到的但是尚未讀取的數(shù)據(jù),其處理方法取決于queue_selector的值,它可能的取值有以下幾種。

          n TCIFLUSH:對接收到而未被讀取的數(shù)據(jù)進行清空處理。

          n TCOFLUSH:對尚未傳送成功的輸出數(shù)據(jù)進行清空處理。

          n TCIOFLUSH:包括前兩種功能,即對尚未處理的輸入輸出數(shù)據(jù)進行清空處理。

          如在本例中所采用的是第一種方法:

          tcflush(fd,TCIFLUSH);

          9.激活配置

          在完成全部配置之后,要激活剛才的配置并使配置生效。這里用到的函數(shù)是tcsetattr(),它的函數(shù)原型是:

          tcsetattr(intfd,intoptional_actions,conststructtermios*termios_p);

          其中參數(shù)termios_p是termios類型的新配置變量。

          參數(shù)optional_actions可能的取值有以下3種:

          n TCSANOW:配置的修改立即生效。

          n TCSADRAIN:配置的修改在所有寫入fd的輸出都傳輸完畢之后生效。

          n TCSAFLUSH:所有已接受但未讀入的輸入都將在修改生效之前被丟棄。

          該函數(shù)若調用成功則返回0,若失敗則返回-1,代碼如下所示:

          if((tcsetattr(fd,TCSANOW,new_cfg))!=0)

          {

          perror(tcsetattr);

          return-1;

          }

          下面給出了配置的完整函數(shù)。通常,為了函數(shù)的通用性,通常將常用的選項都在函數(shù)中列出,這樣可以大大方便以后用戶的調試使用。該設置函數(shù)如下所示:

          intset_com_config(intfd,intbaud_rate,

          intdata_bits,charparity,intstop_bits)

          {

          structtermiosnew_cfg,old_cfg;

          intspeed;

          /*保存并測試現(xiàn)有參數(shù)設置,在這里如果串口號等出錯,會有相關的出錯信息*/

          if(tcgetattr(fd,old_cfg)!=0)

          {

          perror(tcgetattr);

          return-1;

          }

          /*設置字符大小*/

          new_cfg=old_cfg;

          cfmakeraw(new_cfg);/*配置為原始模式*/

          new_cfg.c_cflag=~CSIZE;

          /*設置波特率*/

          switch(baud_rate)

          {

          case2400:

          {

          speed=B2400;

          }

          break;

          case4800:

          {

          speed=B4800;

          }

          break;

          case9600:

          {

          speed=B9600;

          }

          break;

          case19200:

          {

          speed=B19200;

          }

          break;

          case38400:

          {

          speed=B38400;

          }

          break;

          default:

          case115200:

          {

          speed=B115200;

          }

          break;

          }

          cfsetispeed(new_cfg,speed);

          cfsetospeed(new_cfg,speed);

          /*設置停止位*/

          switch(data_bits)

          {

          case7:

          {

          new_cfg.c_cflag|=CS7;

          }

          break;

          default:

          case8:

          {

          new_cfg.c_cflag|=CS8;

          }

          break;

          }

          /*設置奇偶校驗位*/

          switch(parity)

          {

          default:

          case'n':

          case'N':

          {

          new_cfg.c_cflag=~PARENB;

          new_cfg.c_iflag=~INPCK;

          }

          break;

          case'o':

          case'O':

          {

          new_cfg.c_cflag|=(PARODD|PARENB);

          new_cfg.c_iflag|=INPCK;

          }

          break;

          case'e':

          case'E':

          {

          new_cfg.c_cflag|=PARENB;

          new_cfg.c_cflag=~PARODD;

          new_cfg.c_iflag|=INPCK;

          }

          break;

          case's':/*asnoparity*/

          case'S':

          {

          new_cfg.c_cflag=~PARENB;

          new_cfg.c_cflag=~CSTOPB;

          }

          break;

          }

          /*設置停止位*/

          switch(stop_bits)

          {

          default:

          case1:

          {

          new_cfg.c_cflag=~CSTOPB;

          }

          break;

          case2:

          {

          new_cfg.c_cflag|=CSTOPB;

          }

          }

          /*設置等待時間和最小接收字符*/

          new_cfg.c_cc[VTIME]=0;

          new_cfg.c_cc[VMIN]=1;

          /*處理未接收字符*/

          tcflush(fd,TCIFLUSH);

          /*激活新配置*/

          if((tcsetattr(fd,TCSANOW,new_cfg))!=0)

          {

          perror(tcsetattr);

          return-1;

          }

          return0;

          }

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關文章:linux教程




          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();