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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? 用mfc實(shí)現(xiàn)串口編程.txt

?? 用MFC實(shí)現(xiàn)串口編程, 本文詳細(xì)介紹了串行通信的基本原理
?? TXT
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):

   。。。。。 // 處理其他MSComm控件 

} 

void CMainFrame::OnCommSend() { 

。。。。。。。。 // 準(zhǔn)備需要發(fā)送的命令,放在TxData[]中 

CByteArray array; 

array.RemoveAll(); 

array.SetSize(Count); 

for(i=0;i<Count;i++) 

array.SetAt(i, TxData); 

   m_ComPort.SetOutput(COleVariant(array)); // 發(fā)送數(shù)據(jù) 

} 

請(qǐng)大家認(rèn)真關(guān)注第⑷、⑸中內(nèi)容,在實(shí)際工作中是重點(diǎn)、難點(diǎn)所在。 



㈡ 使用32位的API 通信函數(shù): 

可能很多朋友會(huì)覺(jué)得奇怪:用32位API函數(shù)編寫串口通信程序,不就是把16位的API
換成32位嗎?16位的串口通信程序可是多年之前就有很多人研討過(guò)了…… 

此文主要想介紹一下在API串口通信中如何結(jié)合非阻塞通信、多線程等手段,編寫出
高質(zhì)量的通信程序。特別是在CPU處理任務(wù)比較繁重、與外圍設(shè)備中有大量的通信數(shù)
據(jù)時(shí),更有實(shí)際意義。 

⑴.在中MainFrm.cpp定義全局變量 

HANDLE    hCom; // 準(zhǔn)備打開(kāi)的串口的句柄 

HANDLE    hCommWatchThread ;//輔助線程的全局函數(shù) 

⑵.打開(kāi)串口,設(shè)置串口 

hCom =CreateFile( "COM2", GENERIC_READ | GENERIC_WRITE, // 允許讀寫 

         0,          // 此項(xiàng)必須為0 

         NULL,         // no security attrs 

         OPEN_EXISTING,    //設(shè)置產(chǎn)生方式 

         FILE_FLAG_OVERLAPPED, // 我們準(zhǔn)備使用異步通信 

         NULL ); 

請(qǐng)大家注意,我們使用了FILE_FLAG_OVERLAPPED結(jié)構(gòu)。這正是使用API實(shí)現(xiàn)非阻塞通信的關(guān)鍵所在。 

ASSERT(hCom!=INVALID_HANDLE_VALUE); //檢測(cè)打開(kāi)串口操作是否成功 

SetCommMask(hCom, EV_RXCHAR|EV_TXEMPTY );//設(shè)置事件驅(qū)動(dòng)的類型 

SetupComm( hCom, 1024,512) ; //設(shè)置輸入、輸出緩沖區(qū)的大小 

PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR 

           | PURGE_RXCLEAR ); //清干凈輸入、輸出緩沖區(qū) 

COMMTIMEOUTS CommTimeOuts ; //定義超時(shí)結(jié)構(gòu),并填寫該結(jié)構(gòu) 

   ………… 

SetCommTimeouts( hCom, &CommTimeOuts ) ;//設(shè)置讀寫操作所允許的超時(shí) 

DCB    dcb ; // 定義數(shù)據(jù)控制塊結(jié)構(gòu) 

GetCommState(hCom, &dcb ) ; //讀串口原來(lái)的參數(shù)設(shè)置 

dcb.BaudRate =9600; dcb.ByteSize =8; dcb.Parity = NOPARITY; 

dcb.StopBits = ONESTOPBIT ;dcb.fBinary = TRUE ;dcb.fParity = FALSE; 

SetCommState(hCom, &dcb ) ; //串口參數(shù)配置 

上述的COMMTIMEOUTS結(jié)構(gòu)和DCB都很重要,實(shí)際工作中需要仔細(xì)選擇參數(shù)。 

⑶啟動(dòng)一個(gè)輔助線程,用于串口事件的處理。 

Windows提供了兩種線程,輔助線程和用戶界面線程。區(qū)別在于:輔助線程沒(méi)有窗口
,所以它沒(méi)有自己的消息循環(huán)。但是輔助線程很容易編程,通常也很有用。 

在次,我們使用輔助線程。主要用它來(lái)監(jiān)視串口狀態(tài),看有無(wú)數(shù)據(jù)到達(dá)、通信有無(wú)
錯(cuò)誤;而主線程則可專心進(jìn)行數(shù)據(jù)處理、提供友好的用戶界面等重要的工作。 

hCommWatchThread= 

     CreateThread( (LPSECURITY_ATTRIBUTES) NULL, //安全屬性 

         0,//初始化線程棧的大小,缺省為與主線程大小相同 

         (LPTHREAD_START_ROUTINE)CommWatchProc, //線程的全局函數(shù) 

         GetSafeHwnd(), //此處傳入了主框架的句柄 

         0, &dwThreadID ); 

  ASSERT(hCommWatchThread!=NULL); 

⑷為輔助線程寫一個(gè)全局函數(shù),主要完成數(shù)據(jù)接收的工作。請(qǐng)注意OVERLAPPED結(jié)構(gòu)
的使用,以及怎樣實(shí)現(xiàn)了非阻塞通信。 

UINT CommWatchProc(HWND hSendWnd){ 

  DWORD dwEvtMask=0 ; 

  SetCommMask( hCom, EV_RXCHAR|EV_TXEMPTY );//有哪些串口事件需要監(jiān)視? 

  WaitCommEvent( hCom, &dwEvtMask, os );// 等待串口通信事件的發(fā)生 

  檢測(cè)返回的dwEvtMask,知道發(fā)生了什么串口事件: 

  if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR){ // 緩沖區(qū)中有數(shù)據(jù)到達(dá) 

  COMSTAT ComStat ; DWORD dwLength; 

  ClearCommError(hCom, &dwErrorFlags, &ComStat ) ; 

  dwLength = ComStat.cbInQue ; //輸入緩沖區(qū)有多少數(shù)據(jù)? 

  if (dwLength > 0) { 

BOOL fReadStat ;   

  fReadStat = ReadFile( hCom, lpBuffer,dwLength, &dwBytesRead, 

            &READ_OS( npTTYInfo ) ); //讀數(shù)據(jù) 

注:我們?cè)贑reareFile()時(shí)使用了FILE_FLAG_OVERLAPPED,現(xiàn)在ReadFile()也必須使用 

  LPOVERLAPPED結(jié)構(gòu).否則,函數(shù)會(huì)不正確地報(bào)告讀操作已完成了. 

    使用LPOVERLAPPED結(jié)構(gòu), ReadFile()立即返回,不必等待讀操作完成,實(shí)現(xiàn)非阻塞 

    通信.此時(shí), ReadFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING. 

if (!fReadStat){ 

   if (GetLastError() == ERROR_IO_PENDING){ 

     while(!GetOverlappedResult(hCom, 

       &READ_OS( npTTYInfo ), & dwBytesRead, TRUE )){ 

       dwError = GetLastError(); 

       if(dwError == ERROR_IO_INCOMPLETE) continue; 

             //緩沖區(qū)數(shù)據(jù)沒(méi)有讀完,繼續(xù) 

       …… ……       

   ::PostMessage((HWND)hSendWnd,WM_NOTIFYPROCESS,0,0);//通知主線程,串口收到數(shù)據(jù)  } 

  所謂的非阻塞通信,也即異步通信。是指在進(jìn)行需要花費(fèi)大量時(shí)間的數(shù)據(jù)讀寫
操作(不僅僅是指串行通信操作)時(shí),一旦調(diào)用ReadFile()、WriteFile(), 就能立
即返回,而讓實(shí)際的讀寫操作在后臺(tái)運(yùn)行;相反,如使用阻塞通信,則必須在讀或
寫操作全部完成后才能返回。由于操作可能需要任意長(zhǎng)的時(shí)間才能完成,于是問(wèn)題
就出現(xiàn)了。 

非常阻塞操作還允許讀、寫操作能同時(shí)進(jìn)行(即重疊操作?),在實(shí)際工作中非常有用。 

要使用非阻塞通信,首先在CreateFile()時(shí)必須使用FILE_FLAG_OVERLAPPED;然后
在 ReadFile()時(shí)lpOverlapped參數(shù)一定不能為NULL,接著檢查函數(shù)調(diào)用的返回值,
調(diào)用GetLastError(),看是否返回ERROR_IO_PENDING。如是,最后調(diào)用
GetOverlappedResult()返回重疊操作(overlapped operation)的結(jié)果;WriteFile()
的使用類似。 

⑸.在主線程中發(fā)送下行命令。 

BOOL  fWriteStat ; char szBuffer[count]; 

       …………//準(zhǔn)備好發(fā)送的數(shù)據(jù),放在szBuffer[]中 

fWriteStat = WriteFile(hCom, szBuffer, dwBytesToWrite, 

           &dwBytesWritten, &WRITE_OS( npTTYInfo ) ); //寫數(shù)據(jù) 

注:我們?cè)贑reareFile()時(shí)使用了FILE_FLAG_OVERLAPPED,現(xiàn)在WriteFile()也必須使
用   LPOVERLAPPED結(jié)構(gòu).否則,函數(shù)會(huì)不正確地報(bào)告寫操作已完成了. 

   使用LPOVERLAPPED結(jié)構(gòu),WriteFile()立即返回,不必等待寫操作完成,實(shí)現(xiàn)非阻
塞 通信.此時(shí), WriteFile()返回FALSE, GetLastError()返回ERROR_IO_PENDING. 

int err=GetLastError(); 

if (!fWriteStat) { 

   if(GetLastError() == ERROR_IO_PENDING){ 

    while(!GetOverlappedResult(hCom, &WRITE_OS( npTTYInfo ), 

           &dwBytesWritten, TRUE )) { 

      dwError = GetLastError(); 

      if(dwError == ERROR_IO_INCOMPLETE){ 

           // normal result if not finished 

        dwBytesSent += dwBytesWritten; continue; } 

    ...................... 

  綜上,我們使用了多線程技術(shù),在輔助線程中監(jiān)視串口,有數(shù)據(jù)到達(dá)時(shí)依靠事
件驅(qū)動(dòng),讀入數(shù)據(jù)并向主線程報(bào)告(發(fā)送數(shù)據(jù)在主線程中,相對(duì)說(shuō)來(lái),下行命令的
數(shù)據(jù)總是少得多);并且,WaitCommEvent()、ReadFile()、WriteFile()都使用了
非阻塞通信技術(shù),依靠重疊(overlapped)讀寫操作,讓串口讀寫操作在后臺(tái)運(yùn)行。 

  依托vc6.0豐富的功能,結(jié)合我們提及的技術(shù),寫出有強(qiáng)大控制能力的串口通信
應(yīng)用程序。就個(gè)人而言,我更偏愛(ài)API技術(shù),因?yàn)榭刂剖侄我`活的多,功能也要強(qiáng)
大得多。 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美专区亚洲专区| 中文字幕日韩欧美一区二区三区| 精品国产一二三| 亚洲综合视频在线| 国产xxx精品视频大全| 91精品久久久久久久99蜜桃| 国产精品视频第一区| 美女视频黄频大全不卡视频在线播放 | 岛国一区二区三区| 欧美一区二区大片| 亚洲国产精品久久久久秋霞影院| 国产成人精品免费在线| 欧美一级在线观看| 香蕉乱码成人久久天堂爱免费| 成人美女视频在线看| 欧美sm美女调教| 在线亚洲欧美专区二区| 中文成人综合网| 国产精品一卡二卡在线观看| 这里只有精品免费| 亚洲国产精品一区二区www在线| 成人免费观看av| 国产精品视频一二三区| 国产精品1区2区| 久久精品视频在线看| 国产麻豆视频一区| 久久综合色一综合色88| 久久精品国产999大香线蕉| 91精品国产综合久久久蜜臀图片| 亚洲综合久久av| 欧洲一区二区av| 亚洲最大的成人av| 欧日韩精品视频| 亚洲一区欧美一区| 欧美三级电影在线看| 亚洲国产中文字幕| 欧美区一区二区三区| 亚洲成人av在线电影| 欧美日韩免费观看一区二区三区 | 蜜臀91精品一区二区三区| 欧美一区二区三区免费视频| 日韩成人免费电影| 日韩视频一区二区三区在线播放| 免费人成精品欧美精品 | 久久电影网电视剧免费观看| 日韩一区二区不卡| 国产在线精品视频| 国产欧美精品一区二区三区四区| 成人性生交大片免费| 亚洲精品欧美专区| 欧美日韩视频第一区| 久久精品久久精品| 中文字幕av在线一区二区三区| 成人白浆超碰人人人人| 亚洲精品国产高清久久伦理二区| 欧美色中文字幕| 蜜芽一区二区三区| 国产精品久久久久国产精品日日 | 在线观看av一区| 日韩av高清在线观看| 久久久久亚洲综合| 一本久久a久久精品亚洲| 日韩电影一二三区| 国产精品午夜在线观看| 欧美日韩另类一区| 国产伦理精品不卡| 亚洲国产精品麻豆| 久久久国产午夜精品| 欧美中文字幕一二三区视频| 蜜桃av一区二区三区| 国产精品国产三级国产aⅴ中文| 欧美无乱码久久久免费午夜一区| 久久成人久久爱| 亚洲理论在线观看| 久久―日本道色综合久久| 色域天天综合网| 国产九九视频一区二区三区| 亚洲国产欧美另类丝袜| 国产午夜精品理论片a级大结局 | 成人免费看黄yyy456| 视频一区二区不卡| 亚洲人精品午夜| 久久久三级国产网站| 欧美日韩一区在线观看| 成人av在线看| 精品亚洲porn| 日韩av电影天堂| 亚洲欧美一区二区三区孕妇| 久久亚洲私人国产精品va媚药| 欧美午夜片在线观看| 色综合久久中文综合久久97| 国产在线不卡一卡二卡三卡四卡| 性做久久久久久免费观看| 国产精品国产三级国产普通话99| 久久综合精品国产一区二区三区 | 亚洲伊人伊色伊影伊综合网| 国产清纯美女被跳蛋高潮一区二区久久w | 国产一区二区女| 日韩电影在线免费看| 亚洲国产成人高清精品| 一区二区不卡在线播放| 国产精品久久久久久久久图文区 | 精品一区二区三区在线观看| 亚洲第一狼人社区| 一区二区三区欧美日| 中文字幕一区日韩精品欧美| 国产视频911| 久久久精品免费网站| 国产亚洲精品久| 国产亚洲美州欧州综合国| 久久久午夜精品理论片中文字幕| 日韩欧美国产小视频| 精品剧情v国产在线观看在线| 欧美福利一区二区| 欧美一区二区三区免费大片| 7777精品伊人久久久大香线蕉超级流畅| 一本大道av一区二区在线播放| 99国产精品久久久久久久久久久| 粉嫩av亚洲一区二区图片| 成人av综合一区| 99v久久综合狠狠综合久久| 99久久精品免费看国产| 色妹子一区二区| 欧美色网站导航| 在线不卡欧美精品一区二区三区| 717成人午夜免费福利电影| 91精品在线观看入口| 日韩亚洲国产中文字幕欧美| 日韩女同互慰一区二区| 久久久久久久综合狠狠综合| 亚洲一区二区三区小说| 午夜精品成人在线视频| 日本vs亚洲vs韩国一区三区二区 | 精品久久国产97色综合| 亚洲精品在线观| 国产精品久久99| 亚洲国产精品视频| 久久99国产精品尤物| 成人在线视频首页| 欧美亚洲国产bt| 欧美videossexotv100| 国产精品视频在线看| 天堂成人免费av电影一区| 黑人精品欧美一区二区蜜桃| 国产成人av影院| 精品视频免费看| 久久久久久久久久久电影| 亚洲欧美日本在线| 六月婷婷色综合| av网站免费线看精品| 在线综合视频播放| 国产三级精品在线| 婷婷综合久久一区二区三区| 国产曰批免费观看久久久| 色哟哟亚洲精品| 精品电影一区二区三区| 亚洲精品视频在线看| 国内精品久久久久影院薰衣草| 91麻豆精品在线观看| 精品女同一区二区| 一区二区成人在线观看| 国产经典欧美精品| 91精品国产91久久久久久最新毛片| 国产欧美日韩亚州综合| 午夜精品视频在线观看| 99久久婷婷国产综合精品电影| 亚洲不卡av一区二区三区| 成人黄色一级视频| 欧美成人乱码一区二区三区| 亚洲精品videosex极品| 国内精品在线播放| 88在线观看91蜜桃国自产| 一区二区三区产品免费精品久久75| 国产黄人亚洲片| 日韩欧美卡一卡二| 日日摸夜夜添夜夜添国产精品| 99久久精品免费观看| 亚洲国产成人在线| 精品午夜一区二区三区在线观看| 欧美亚一区二区| 亚洲欧美日韩国产中文在线| 国产麻豆成人精品| 日韩精品一区二区三区在线| 亚洲一区二区精品3399| 91免费在线播放| 中文字幕一区二区三区在线播放| 国产一区二区三区日韩| 日韩三级视频在线看| 午夜精品久久久久久久| 欧美在线观看视频在线| 亚洲男同性视频| av不卡一区二区三区| 中文欧美字幕免费| 成人小视频免费观看| 国产欧美日韩三区| 国产黄色91视频| 国产精品丝袜一区| 高清日韩电视剧大全免费| 久久综合九色综合久久久精品综合| 日本亚洲欧美天堂免费|