在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            本文引用地址:http://www.biyoush.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ù)若調(diào)用成功則返回0,若失敗則返回-1,代碼如下所示:

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

            {

            perror(tcsetattr);

            return-1;

            }

            下面給出了配置的完整函數(shù)。通常,為了函數(shù)的通用性,通常將常用的選項都在函數(shù)中列出,這樣可以大大方便以后用戶的調(diào)試使用。該設置函數(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ū)

            關閉