Re: [問題] 關於RS232介面設計

看板C_and_CPP (C/C++)作者 (pazroach)時間13年前 (2012/09/12 01:24), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《LM356 (熱爆了!!)》之銘言: : 各位好,最近用CLR windows form application : 寫一個視窗程式接收RS232(來源8051)的資料,並將資料即時顯示繪圖 : 基本上,8051資料送出的部份已確認沒問題 : 剩下就是視窗程式這邊資料漏接的問題 : 拜過Google大神,有人建議如下 : (1) 建立一個監控RS232埠的thread 如您所說的 SerialPort 會做好所有的工作 : (2) 將接收資料放置序列中 SerialPort 有個 DataRecieved 事件,預設寫法是這樣的 serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); 一旦有資料進來,超過 threshold 就會呼叫 void serialPort_DataReceived( object sender, ev??? 忘記了) 這個 thread 跟你主程式的 thread 一定不一樣。所以有跨 thread的問題, 老實點就是用 delegate, 不然用笨方法,因為你的資料量非常低, 可以開一個 global variable 的 byte [] RxBuffer; 每次收到資料就是往這邊丟。 之後主程式那邊用個 timer 去檢查有沒有新資料,做處理與繪圖。 : (3) 使用另一個thread做後處理(即繪圖等) : 目前我的作法是用,VC2008內建的serialPort元件處理(1)的部份 : (2) 則是採用Queue的方式去暫時存放資料 : 最後使用backgroundWorker去判斷Queue是否有東西,有的話將資料取出做後處理 : 但是,結果似乎沒有改善,不知道問題出在哪裡? : 不知道各位先進可否可以指引我一個方向 : ps. 我資料傳輸的量約 150 bytes/sec ,bps 設定為9600 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.154.60

09/12 09:27, , 1F
DR事件內可偵測buffer資料量 猜測可能資料上來太慢
09/12 09:27, 1F

09/12 11:26, , 2F
我剛才發現,這是C++, 不是 C#板 orz 不過用法一樣啦:)
09/12 11:26, 2F

09/12 11:29, , 3F
謝謝,我依你的方法去改。。
09/12 11:29, 3F
文章代碼(AID): #1GJtF4Sw (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1GJtF4Sw (C_and_CPP)