全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1863
推到 Plurk!
推到 Facebook!

從控制傳送多筆資料來不及處理...如何接收較"流暢"

尚未結案
goodfeel1001
一般會員


發表:10
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-30 15:02:03 IP:211.23.xxx.xxx 未訂閱
Dear 各位前輩~        小弟正在撰寫toush panpel(觸控式螢幕)的driver...是要做一個自由畫(free draw ==> 這個功能很像是我們常在用的手寫板)的功能....我有正確地將資料給收了進來...可是當我畫完圖中的圓圈圈...如下圖...可是當我手放開... 下面那張圖要慢個1S它才會按照...剛剛我手寫板的路徑..給它秀了出來.... 我已經將我的    Timer1_Form1_RS232->Interval = 1 ; (程式裡最大上限是 Interval =1000) ==> 我已經設到最低輪詢了...檢查控制器是否有資料傳進來...至於 Interval = 1,2,3...,1000也都試過了越往上調..接收資料來不及的情況也會變得更嚴重   ReadFile(hComm, in_buff, 5, &nBytes_R, NULL); 上面的設5是因為從firmware(韌體)送上來就是5個BYTE....之前也有設10..或者 是20..要不然將資料一次讀進來...可是有的資料會沒收到... 1 BYTE ==> STATE BYTE(判斷是否有人按下TOUSH PANPEL) 2 BYTE ==> X 軸低八位元 3 BYTE ==> X 軸高八位元 4 BYTE ==> Y 軸低八位元 5 BYTE ==> Y 軸高八位元 我的程式碼如下 void __fastcall TForm1::Timer1_Form1_RS232Timer(TObject *Sender) { byte in_buff[2048]; DWORD nBytes_R, dwEvent , dwError; unsigned int i; COMSTAT cs; //The COMSTAT structure contains information about a communications device. ClearCommError(hComm,&dwError,&cs); // ClearCommError():讀取串列埠現在狀態 //reports the current status of a communications device if(cs.cbInQue!=0) { if(cs.cbInQue > sizeof(in_buff)) { PurgeComm(hComm, PURGE_RXCLEAR); return; } ReadFile(hComm, in_buff, 5, &nBytes_R, NULL); for(i=0;i<5;i++) { //檢查第一個BYTE是否是你所需要的資料,若符合則處理該筆資料 if(in_buff[i]==0xc8||in_buff[i]==0x88) { //整理從控制器送上來X軸和Y軸資料 x_ptr=in_buff[i+1]*32+(in_buff[i+2]>>2); y_ptr=in_buff[i+3]*32+(in_buff[i+4]>>2); AutoCali2(); SetCursorPos(xc/4, (yc*3)/16); if (in_buff[i]==0xc8) mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); if (in_buff[i]==0x88) mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); } } } }
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-12-01 00:24:34 IP:218.168.xxx.xxx 未訂閱
您好: 上傳圖片請用.jpg避免資源的浪費    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 >
goodfeel1001
一般會員


發表:10
回覆:7
積分:3
註冊:2005-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-12-01 08:56:35 IP:211.23.xxx.xxx 未訂閱
Dear 副站長~         我用的圖檔..是正確的jpg檔..程式碼....已以重貼如下    void __fastcall TForm1::Timer1_Form1_RS232Timer(TObject *Sender) { byte in_buff[2048]; DWORD nBytes_R, dwEvent , dwError; unsigned int i;    COMSTAT cs; //The COMSTAT structure contains information about a communications device. ClearCommError(hComm,&dwError,&cs); // ClearCommError():讀取串列埠現在狀態 //reports the current status of a communications device if(cs.cbInQue!=0) {     if(cs.cbInQue > sizeof(in_buff))     {         PurgeComm(hComm, PURGE_RXCLEAR);         return;     }     ReadFile(hComm, in_buff, 5, &nBytes_R, NULL);     for(i=0;i<5;i ) { //檢查第一個BYTE是否是你所需要的資料,若符合則處理該筆資料 if(in_buff[i]==0xc8||in_buff[i]==0x88) { //整理從控制器送上來X軸和Y軸資料 x_ptr=in_buff[i 1]*32 (in_buff[i 2]>>2); y_ptr=in_buff[i 3]*32 (in_buff[i 4]>>2); AutoCali2(); SetCursorPos(xc/4, (yc*3)/16); if (in_buff[i]==0xc8) mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); if (in_buff[i]==0x88) mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); } } }
系統時間:2017-10-23 10:29:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!