<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

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

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

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

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

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

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

tcflush(fd,TCIFLUSH);

9.激活配置

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

tcsetattr(intfd,intoptional_actions,conststructtermios*termios_p);

其中參數termios_p是termios類(lèi)型的新配置變量。

參數optional_actions可能的取值有以下3種:

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

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

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

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

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

{

perror(tcsetattr);

return-1;

}

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

intset_com_config(intfd,intbaud_rate,

intdata_bits,charparity,intstop_bits)

{

structtermiosnew_cfg,old_cfg;

intspeed;

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

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;

}

}

/*設置等待時(shí)間和最小接收字符*/

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操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

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




關(guān)鍵詞: I/O編程 Linux 串口 操作系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>