亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? linux serial programming howto - 串口通訊編程.txt

?? 學習(編程技巧_編程知識_程序代碼),是學習編程不可多得的學習精驗
?? TXT
?? 第 1 頁 / 共 2 頁
字號:

如果 MIN > 0 且 TIME = 0, MIN 設定為滿足讀取功能的最低字元接收個數. 由於 TIME 是 零, 所以計時器將不被使用.  

如果 MIN = 0 且 TIME > 0, TIME 將被當做逾時設定值. 滿足讀取功能的情況為讀取到單一字元, 或者超過 TIME 所定義的時間 (t = TIME *0.1 s). 如果超過 TIME 所定義的時間, 則不會傳回任何字元.  

如果 MIN > 0 且 TIME > 0, TIME 將被當做一個分割字元組的計時器. 滿足讀取功能的條件為 接收到 MIN 個數的字元, 或兩個字元的間隔時間超過 TIME 所定義的值. 計時器會在每讀到一個字元後重新計時, 且只會在第一個字元收到後才會啟動.  

如果 MIN = 0 且 TIME = 0, 讀取功能就馬上被滿足. 目前所存在的字元組個數, 或者 將回傳的字元組個數. 根據 Antonino (參考 貢獻) 所說, 你可以用 fcntl(fd, F_SETFL, FNDELAY); 在讀取前得到相同的結果.  

藉由修改 newtio.c_cc[VTIME] 及 newtio.c_cc[VMIN] 上述的模式就可以測試了.  


#include  
#include  
#include  
#include  
#include  

#define BAUDRATE B38400 
#define MODEMDEVICE "/dev/ttyS1" 
#define _POSIX_SOURCE 1 /* POSIX 系統相容 */ 
#define FALSE 0 
#define TRUE 1 

volatile int STOP=FALSE;  

main() 
{ 
  int fd,c, res; 
  struct termios oldtio,newtio; 
  char buf[255]; 

 fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );  
 if (fd <0) {perror(MODEMDEVICE); exit(-1); } 

 tcgetattr(fd,&oldtio); /* 儲存目前的序列埠設定 */ 

 bzero(&newtio, sizeof(newtio)); 
 newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; 
 newtio.c_iflag = IGNPAR; 
 newtio.c_oflag = 0; 

 /* 設定輸入模式 (非標準型, 不回應,...) */ 
 newtio.c_lflag = 0; 
  
 newtio.c_cc[VTIME]    = 0;   /* 不使用分割字元組計時器 */ 
 newtio.c_cc[VMIN]     = 5;   /* 在讀取到 5 個字元前先停止 */ 

 tcflush(fd, TCIFLUSH); 
 tcsetattr(fd,TCSANOW,&newtio); 


 while (STOP==FALSE) {       /* 輸入回圈 */ 
   res = read(fd,buf,255);   /* 在輸入 5 個字元後即返回 */ 
   buf[res]=0;               /* 所以我們能用 printf... */ 
   printf(":%s:%d\n", buf, res); 
   if (buf[0]=='z') STOP=TRUE; 
 } 
 tcsetattr(fd,TCSANOW,&oldtio); 
} 


3.3 非同步式輸入  

#include  
#include  
#include  
#include  
#include  
#include  

#define BAUDRATE B38400 
#define MODEMDEVICE "/dev/ttyS1" 
#define _POSIX_SOURCE 1 /* POSIX 系統相容 */ 
#define FALSE 0 
#define TRUE 1 

volatile int STOP=FALSE;  

void signal_handler_IO (int status);   /* 定義訊號處理程序 */ 
int wait_flag=TRUE;                    /* 沒收到訊號的話就會是 TRUE */ 

main() 
{ 
  int fd,c, res; 
  struct termios oldtio,newtio; 
  struct sigaction saio;           /* definition of signal action */ 
  char buf[255]; 

  /* 開啟裝置為 non-blocking (讀取功能會馬上結束返回) */ 
  fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); 
  if (fd <0) {perror(MODEMDEVICE); exit(-1); } 

  /* 在使裝置非同步化前, 安裝訊號處理程序 */ 
  saio.sa_handler = signal_handler_IO; 
  saio.sa_mask = 0; 
  saio.sa_flags = 0; 
  saio.sa_restorer = NULL; 
  sigaction(SIGIO,&saio,NULL); 
   
  /* 允許行程去接收 SIGIO 訊號*/ 
  fcntl(fd, F_SETOWN, getpid()); 
  /* 使檔案ake the file descriptor 非同步 (使用手冊上說只有 O_APPEND 及 
  O_NONBLOCK, 而 F_SETFL 也可以用...) */ 
  fcntl(fd, F_SETFL, FASYNC); 

  tcgetattr(fd,&oldtio); /* 儲存目前的序列埠設定值 */ 
  /* 設定新的序列埠為標準輸入程序 */ 
  newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; 
  newtio.c_iflag = IGNPAR | ICRNL; 
  newtio.c_oflag = 0; 
  newtio.c_lflag = ICANON; 
  newtio.c_cc[VMIN]=1; 
  newtio.c_cc[VTIME]=0; 
  tcflush(fd, TCIFLUSH); 
  tcsetattr(fd,TCSANOW,&newtio); 
  
  /* 等待輸入訊號的回圈. 很多有用的事我們將在這做 */  
  while (STOP==FALSE) { 
    printf(".\n");usleep(100000); 
    /* 在收到 SIGIO 後, wait_flag = FALSE, 輸入訊號存在則可以被讀取 */ 
    if (wait_flag==FALSE) {  
      res = read(fd,buf,255); 
      buf[res]=0; 
      printf(":%s:%d\n", buf, res); 
      if (res==1) STOP=TRUE; /* 如果只輸入 CR 則停止回圈 */ 
      wait_flag = TRUE;      /* 等待新的輸入訊號 */ 
    } 
  } 
  /* 回存舊的序列埠設定值 */ 
  tcsetattr(fd,TCSANOW,&oldtio); 
} 

/*************************************************************************** 
* 訊號處理程序. 設定 wait_flag 為 FALSE, 以使上述的回圈能接收字元          * 
***************************************************************************/ 

void signal_handler_IO (int status) 
{ 
  printf("received SIGIO signal.\n"); 
  wait_flag = FALSE; 
} 


3.4 等待來自多個訊號來源的輸入  
這一段很短. 它只能被拿來當成寫程式時的提示, 故□例程式也很簡短. 但這個□例不只能用在序列埠上, 還可以用在被當成檔案來使用的裝置上.  

select 呼叫及伴隨它所引發的巨集共用 fd_set. fd_set 則是一個位元陣列, 而其中每一個位元代表一個有效的檔案敘述結構. select 呼叫接受一個有效的檔案敘述結構并傳回 fd_set 位元陣列, 而該位元陣列中若有某一個位元為 1, 就表示相對映的檔案敘述結構的檔案發生了輸入, 輸出或有例外事件. 而這些巨集提供了所有處理 fd_set 的功能. 亦可參考手冊 select(2).  


#include  
#include  
#include  

main() 
{ 
   int    fd1, fd2;  /* 輸入源 1 及 2 */ 
   fd_set readfs;    /* 檔案敘述結構設定 */ 
   int    maxfd;     /* 最大可用的檔案敘述結構 */ 
   int    loop=1;    /* 回圈在 TRUE 時成立 */  

   /* open_input_source 開啟一個裝置, 正確的設定好序列埠, 
      并回傳回此檔案敘述結構體 */ 
   fd1 = open_input_source("/dev/ttyS1");   /* COM2 */ 
   if (fd1<0) exit(0); 
   fd2 = open_input_source("/dev/ttyS2");   /* COM3 */ 
   if (fd2<0) exit(0); 
   maxfd = MAX (fd1, fd2)+1;  /* 測試最大位元輸入 (fd) */ 

   /* 輸入回圈 */ 
   while (loop) { 
     FD_SET(fd1, &readfs);  /* 測試輸入源 1 */ 
     FD_SET(fd2, &readfs);  /* 測試輸入源 2 */ 
     /* block until input becomes available */ 
     select(maxfd, &readfs, NULL, NULL, NULL); 
     if (FD_ISSET(fd1))         /* 如果輸入源 1 有訊號 */ 
       handle_input_from_source1(); 
     if (FD_ISSET(fd2))         /* 如果輸入源 2 有訊號 */ 
       handle_input_from_source2(); 
   } 

}    

這個□例程式在等待輸入訊號出現前, 不能確定它會停頓下來. 如果你需要在輸入時加入逾時功能, 只需把 select 呼叫換成:  

int res; 
struct timeval Timeout; 

/* 設定輸入回圈的逾時值 */ 
Timeout.tv_usec = 0;  /* 毫秒 */ 
Timeout.tv_sec  = 1;  /* 秒 */ 
res = select(maxfd, &readfs, NULL, NULL, &Timeout); 
if (res==0) 
/* 檔案敘述結構數在 input = 0 時, 會發生輸入逾時. */  

這個程式會在 1 秒鐘後逾時. 如果超過時間, select 會傳回 0, 但是應該留意 Timeout 的時間遞減是由 select 所等待輸入訊號的時間為基準. 如果逾時的值是 0, select 會馬上結束返回.  




-------------------------------------------------------------------------------- 

     
-------------------------------------------------------------------------------- 

4. 其它資源 


Linux Serial-HOWTO 敘述如何設定序列埠及所有相關的硬體資訊.  
由 Michael Sweet 所寫的 Serial Programming Guide for POSIX Compliant Operating Systems. 這個連結已經荒廢了但我找不到它的新位址. 有人知道能在哪找到它嗎? 它是很棒的文件!  
termios(3) 的使用手冊. 敘述所有有關 termios 結構體的旗標.  


-------------------------------------------------------------------------------- 
-------------------------------------------------------------------------------- 

5. 貢獻 
就跟簡介所說的一樣, 我并非在這領域有所專精, 但我自己遇到問題, 并透過他人的幫助找到答案. 感謝來自 European Transonic Windtunnel 的 Strudthoff 先生, Cologne, Michael Carter (mcarter@rocke.electro.swri.edu), 及 Peter Waltenberg (p.waltenberg@karaka.chch.cri.nz)  


與我同時準備這份文件的 Antonino Ianella (antonino@usa.net 所篆寫的 Serial-Port-Programming Mini HOWTO. Greg Hankins 要求我把 Antonino's Mini-HOWTO 一并放入這份文件.  

這份文件的結構及 SGML 的格式是源自 Greg Hankins 的 Serial-HOWTO. 感謝 Dave Pfaltzgraff (Dave_Pfaltzgraff@patapsco.com), Sean Lincolne (slincol@tpgi.com.au), Michael Wiedmann (mw@miwie.in-berlin.de), 及 Adrey Bonar (andy@tipas.lt) 各方面的協助.  
 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩视频一区二区| 日韩精品一区二区三区视频播放 | 国产盗摄一区二区| 99精品视频在线播放观看| 在线视频一区二区免费| 欧美成人精品二区三区99精品| 亚洲在线视频一区| 精品一区二区三区影院在线午夜| 懂色av中文字幕一区二区三区 | 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 欧美一区二区成人| 日韩免费视频一区二区| 亚洲欧洲另类国产综合| 日本欧美在线观看| 国产另类ts人妖一区二区| 99久久精品99国产精品 | 亚洲人成亚洲人成在线观看图片| 午夜精品123| 99综合电影在线视频| 欧美一区二区三区在| 亚洲欧美激情小说另类| 精品一区二区在线播放| 在线免费视频一区二区| 精品99999| 亚洲一区二区在线播放相泽| 国产ts人妖一区二区| 日韩欧美一区二区免费| 亚洲国产欧美另类丝袜| 99v久久综合狠狠综合久久| 精品国产伦一区二区三区免费 | 亚洲人成小说网站色在线 | 5858s免费视频成人| 亚洲精品成人天堂一二三| 从欧美一区二区三区| 精品久久久久一区| 日本va欧美va精品| 色综合天天综合狠狠| 欧美va亚洲va香蕉在线| 日本美女视频一区二区| 欧美精品vⅰdeose4hd| 一区二区在线看| 91丨九色丨蝌蚪丨老版| 国产精品久久久久永久免费观看 | 欧美精品乱人伦久久久久久| 亚洲免费成人av| 91免费版在线看| 亚洲视频在线一区| 97久久超碰国产精品电影| 中文字幕在线免费不卡| 成人精品一区二区三区中文字幕| 国产清纯白嫩初高生在线观看91| 久久99日本精品| 欧美成人精品3d动漫h| 久久99久久久久| 久久色在线视频| 成人丝袜高跟foot| 国产一区二区导航在线播放| 日韩一区二区免费电影| 日韩中文字幕av电影| 6080国产精品一区二区| 免费人成在线不卡| 精品国产免费久久| 成人激情视频网站| 亚洲男人天堂av网| 在线不卡中文字幕播放| 男人的j进女人的j一区| 欧美成人video| 久久国产夜色精品鲁鲁99| 欧美va在线播放| 不卡视频一二三四| 午夜精品久久久久久不卡8050| 欧美久久久久久蜜桃| 国产在线精品一区二区三区不卡| 久久这里只有精品视频网| 不卡的av中国片| 亚洲一区二区视频在线| 欧美变态凌虐bdsm| 国产精品18久久久久久vr| 国产精品久久夜| 欧美日韩美少妇| 国产成人精品一区二区三区网站观看| 中文字幕不卡在线观看| 欧美性视频一区二区三区| 日本特黄久久久高潮| 久久久蜜桃精品| 欧美亚洲综合另类| 国产中文字幕一区| 亚洲精品国产精华液| 4438亚洲最大| av成人老司机| 国产一区二区三区免费播放| 亚洲精品国产高清久久伦理二区| 日韩情涩欧美日韩视频| heyzo一本久久综合| 丝袜美腿亚洲综合| 日韩一区欧美一区| 精品国产亚洲在线| 欧美日韩中字一区| 成人激情免费视频| 日韩综合一区二区| 亚洲精品综合在线| 久久日韩精品一区二区五区| 91福利在线导航| 成人综合激情网| 视频一区免费在线观看| 精品av综合导航| 日韩一区二区三区av| 欧美亚洲精品一区| 成人18视频在线播放| 国产一区二区导航在线播放| 一区二区三区视频在线观看| 国产欧美中文在线| 日韩精品一区二区三区中文不卡| 成人精品视频网站| 国产九色精品成人porny| 日韩极品在线观看| 亚洲一区二区成人在线观看| 国产精品美日韩| www久久久久| 亚洲精品一区二区精华| 欧美一区二区三区四区五区| 在线视频综合导航| 91在线精品秘密一区二区| 国产传媒久久文化传媒| 激情综合网av| 美国av一区二区| 免费欧美日韩国产三级电影| 天天射综合影视| 奇米影视一区二区三区| 全国精品久久少妇| 天堂久久一区二区三区| 婷婷国产v国产偷v亚洲高清| 亚洲综合色婷婷| 亚洲一区二区3| 日韩电影在线一区二区三区| 日韩精品电影在线| 蜜桃一区二区三区在线观看| 日韩精品每日更新| 麻豆精品在线视频| 国产中文一区二区三区| 国产91高潮流白浆在线麻豆| 国产成人免费网站| 91美女在线视频| 欧美日韩国产片| 欧美日韩亚洲另类| 欧美精品乱人伦久久久久久| 欧美一区二区在线看| 欧美大尺度电影在线| 国产日韩欧美精品一区| 国产精品久久久久久久午夜片| 亚洲天堂网中文字| 亚洲一区二区三区免费视频| 免费三级欧美电影| 国产69精品久久777的优势| 99精品久久久久久| 欧美日韩一区三区| 欧美大片在线观看一区二区| 日本中文一区二区三区| 中文字幕五月欧美| 青青国产91久久久久久 | 亚洲自拍都市欧美小说| 国产乱码精品一区二区三区忘忧草 | 在线观看成人小视频| 国产亚洲精久久久久久| 婷婷综合五月天| 91在线视频免费观看| 久久久久亚洲综合| 天天影视色香欲综合网老头| 波多野结衣精品在线| 精品国产区一区| 日韩在线观看一区二区| 色久综合一二码| 欧美国产一区二区在线观看| 人人爽香蕉精品| 欧美裸体一区二区三区| 亚洲激情图片一区| www.亚洲激情.com| 久久久精品免费观看| 久久99精品久久久| 在线电影一区二区三区| 亚洲资源在线观看| 色综合久久天天综合网| 国产精品免费aⅴ片在线观看| 激情综合色播激情啊| 日韩欧美在线影院| 日韩精品一级中文字幕精品视频免费观看 | 日韩国产欧美在线播放| 欧美三级欧美一级| 亚洲影院在线观看| 91豆麻精品91久久久久久| 日韩一区日韩二区| av一本久道久久综合久久鬼色| 久久日一线二线三线suv| 黄色成人免费在线| 欧美不卡一二三| 精品写真视频在线观看 | 国产老女人精品毛片久久| 26uuu亚洲综合色| 国产毛片一区二区| 国产日韩欧美一区二区三区乱码 |