在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計(jì)應(yīng)用 > 文件I/O編程之: 嵌入式Linux串口應(yīng)用編程

            文件I/O編程之: 嵌入式Linux串口應(yīng)用編程

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

            本文引用地址:http://www.biyoush.com/article/257136.htm

            c_lflag用于控制控制終端的本地?cái)?shù)據(jù)處理和工作模式,c_lflag所支持的常量名稱如表6.14所示。

            表6.14 c_lflag支持的常量名稱

            ISIG

            若收到信號(hào)字符(INTR、QUIT等),則會(huì)產(chǎn)生相應(yīng)的信號(hào)

            ICANON

            啟用規(guī)范模式

            ECHO

            啟用本地回顯功能

            ECHOE

            若設(shè)置ICANON,則允許退格操作

            ECHOK

            若設(shè)置ICANON,則KILL字符會(huì)刪除當(dāng)前行

            ECHONL

            若設(shè)置ICANON,則允許回顯換行符

            ECHOCTL

            若設(shè)置ECHO,則控制字符(制表符、換行符等)會(huì)顯示成“^X”,其中X的ASCII碼等于給相應(yīng)控制字符的ASCII碼加上0x40。例如:退格字符(0x08)會(huì)顯示為“^H”(’H’的ASCII碼為0x48)

            ECHOPRT

            若設(shè)置ICANON和IECHO,則刪除字符(退格符等)和被刪除的字符都會(huì)被顯示

            ECHOKE

            若設(shè)置ICANON,則允許回顯在ECHOE和ECHOPRT中設(shè)定的KILL字符

            NOFLSH

            在通常情況下,當(dāng)接收到INTR、QUIT和SUSP控制字符時(shí),會(huì)清空輸入和輸出隊(duì)列。如果設(shè)置該標(biāo)志,則所有的隊(duì)列不會(huì)被清空

            TOSTOP

            若一個(gè)后臺(tái)進(jìn)程試圖向它的控制終端進(jìn)行寫操作,則系統(tǒng)向該后臺(tái)進(jìn)程的進(jìn)程組發(fā)送SIGTTOU信號(hào)。該信號(hào)通常終止進(jìn)程的執(zhí)行

            IEXTEN

            啟用輸入處理功能

            c_cc定義特殊控制特性。c_cc所支持的常量名稱如表6.13所示。

            表6.13 c_cc支持的常量名稱

            VINTR

            中斷控制字符,對應(yīng)鍵為CTRL+C

            VQUIT

            退出操作符,對應(yīng)鍵為CRTL+Z

            VERASE

            刪除操作符,對應(yīng)鍵為Backspace(BS)

            VKILL

            刪除行符,對應(yīng)鍵為CTRL+U

            VEOF

            文件結(jié)尾符,對應(yīng)鍵為CTRL+D

            VEOL

            附加行結(jié)尾符,對應(yīng)鍵為Carriagereturn(CR)

            VEOL2

            第二行結(jié)尾符,對應(yīng)鍵為Linefeed(LF)

            VMIN

            指定最少讀取的字符數(shù)

            VTIME

            指定讀取的每個(gè)字符之間的超時(shí)時(shí)間

            下面就詳細(xì)講解設(shè)置屬性的基本流程。

            1.保存原先配置

            首先,為了安全起見和以后調(diào)試程序方便,可以先保存原先的配置,在這里可以使用函數(shù)tcgetattr(fd,old_cfg)。該函數(shù)得到fd指向的終端的配置參數(shù),并將它們保存于termios結(jié)構(gòu)變量old_cfg中。該函數(shù)還可以測試配置是否正確、該串口是否可用等。若調(diào)用成功,函數(shù)返回值為0,若調(diào)用失敗,函數(shù)返回值為-1,其使用如下所示:

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

            {

            perror(tcgetattr);

            return-1;

            }

            2.激活選項(xiàng)

            CLOCAL和CREAD分別用于本地連接和接受使能,因此,首先要通過位掩碼的方式激活這兩個(gè)選項(xiàng)。

            newtio.c_cflag|=CLOCAL|CREAD;

            調(diào)用cfmakeraw()函數(shù)可以將終端設(shè)置為原始模式,在后面的實(shí)例中,采用原始模式進(jìn)行串口數(shù)據(jù)通信。

            cfmakeraw(new_cfg);

            3.設(shè)置波特率

            設(shè)置波特率有專門的函數(shù),用戶不能直接通過位掩碼來操作。設(shè)置波特率的主要函數(shù)有:cfsetispeed()和cfsetospeed()。這兩個(gè)函數(shù)的使用很簡單,如下所示:

            cfsetispeed(new_cfg,B115200);

            cfsetospeed(new_cfg,B115200);

            一般地,用戶需將終端的輸入和輸出波特率設(shè)置成一樣的。這幾個(gè)函數(shù)在成功時(shí)返回0,失敗時(shí)返回-1。

            4.設(shè)置字符大小

            與設(shè)置波特率不同,設(shè)置字符大小并沒有現(xiàn)成可用的函數(shù),需要用位掩碼。一般首先去除數(shù)據(jù)位中的位掩碼,再重新按要求設(shè)置。如下所示:

            new_cfg.c_cflag=~CSIZE;/*用數(shù)據(jù)位掩碼清空數(shù)據(jù)位設(shè)置*/

            new_cfg.c_cflag|=CS8;

            5.設(shè)置奇偶校驗(yàn)位

            設(shè)置奇偶校驗(yàn)位需要用到termios中的兩個(gè)成員:c_cflag和c_iflag。首先要激活c_cflag中的校驗(yàn)位使能標(biāo)志PARENB和是否要進(jìn)行偶校驗(yàn),同時(shí)還要激活c_iflag中的對于輸入數(shù)據(jù)的奇偶校驗(yàn)使能(INPCK)。如使能奇校驗(yàn)時(shí),代碼如下所示:

            new_cfg.c_cflag|=(PARODD|PARENB);

            new_cfg.c_iflag|=INPCK;

            而使能偶校驗(yàn)時(shí),代碼如下所示:

            new_cfg.c_cflag|=PARENB;

            new_cfg.c_cflag=~PARODD;/*清除偶校驗(yàn)標(biāo)志,則配置為奇校驗(yàn)*/

            new_cfg.c_iflag|=INPCK;

            6.設(shè)置停止位

            設(shè)置停止位是通過激活c_cflag中的CSTOPB而實(shí)現(xiàn)的。若停止位為一個(gè),則清除CSTOPB,若停止位為兩個(gè),則激活CSTOPB。以下分別是停止位為一個(gè)和兩個(gè)比特時(shí)的代碼:

            new_cfg.c_cflag=~CSTOPB;/*將停止位設(shè)置為一個(gè)比特*/

            new_cfg.c_cflag|=CSTOPB;/*將停止位設(shè)置為兩個(gè)比特*/

            7.設(shè)置最少字符和等待時(shí)間

            在對接收字符和等待時(shí)間沒有特別要求的情況下,可以將其設(shè)置為0,則在任何情況下read()函數(shù)立即返回,如下所示:

            new_cfg.c_cc[VTIME]=0;

            new_cfg.c_cc[VMIN]=0;

            8.清除串口緩沖

            由于串口在重新設(shè)置之后,需要對當(dāng)前的串口設(shè)備進(jìn)行適當(dāng)?shù)奶幚恚@時(shí)就可調(diào)用在termios.h>中聲明的tcdrain()、tcflow()、tcflush()等函數(shù)來處理目前串口緩沖中的數(shù)據(jù),它們的格式如下所示。

            inttcdrain(intfd);/*使程序阻塞,直到輸出緩沖區(qū)的數(shù)據(jù)全部發(fā)送完畢*/

            inttcflow(intfd,intaction);/*用于暫?;蛑匦麻_始輸出*/

            inttcflush(intfd,intqueue_selector);/*用于清空輸入/輸出緩沖區(qū)*/

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

            linux相關(guān)文章:linux教程




            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉