m_hSer, &dwReadError," />
主題:串口通信 共有50345人關注過本帖 |
---|
xxq2012 |
1樓 |
串口通信 Post By:2012-5-17 9:41:00 [只看該作者]
ClearCommError( lpSerial->m_hSer, &dwReadError, &cmStat );
nWillLen = cmStat.cbInQue; 為什么當串口有數據主動上送時,串口接收線程收到的字節數是128的,而不是8個字節觸發的 |
|
單帖管理 | 引用 | 回復 |
lqk |
2樓 信息 | 搜索 | 郵箱 |
加好友 發短信 |
Post By:2012-5-17 13:14:00 [只看該作者]
不太清楚你講的問題,請描述具體一點。
|
單帖管理 | 引用 | 回復 |
xxq2012 |
3樓 |
Post By:2012-5-17 13:31:00 [只看該作者]
EM9360 串口接收下面終端上送的數據,數據很多,我斷點設在nWillLen = cmStat.cbInQue;語句的下一條,監測收到的數據長度,每次收到的nWillLen  =0x00000080,就是數據長度達到了128個字節了,而不是8個字節
|
|
單帖管理 | 引用 | 回復 |
x10 |
4樓 |
Post By:2012-5-17 14:20:00 [只看該作者]
EM9360板上的串口是DMA驅動的,其buffer長度為128字節,所以當連續接收的數據超過128個字節,就會在128字節是產生中斷(DMA buffer切換),若發送的字節小于128字節,接收在3個字節長度的時間沒有進一步的數據時,會產生超時中斷,這時應用程序就會收到不是128字節的數據的。
|
|
單帖管理 | 引用 | 回復 |
xxq2012 |
5樓 |
Post By:2012-5-17 14:26:00 [只看該作者]
去年我調試的時候是收到8個字節就觸發了nWillLen =0x00000008,現在是板子改了啊?
|
|
單帖管理 | 引用 | 回復 |
x10 |
6樓 |
Post By:2012-5-17 14:44:00 [只看該作者]
是修改了buffer長度,這樣可提高效率,適應更高波特率的應用。這個對你有什么不利的影響嗎?
|
|
單帖管理 | 引用 | 回復 |
xxq2012 |
7樓 |
Post By:2012-5-17 14:48:00 [只看該作者]
呵呵,我原來接收數據部分的代碼得修改了
|
|
單帖管理 | 引用 | 回復 |
admin |
8樓 |
Post By:2012-5-18 14:50:00 [只看該作者]
串口驅動程序提供的數據是一種流式的數據,應用程序的接收線程需要對原始數據進行格式分析,才能提取出符合應用需要的應用數據包供上層使用。比方應用數據包有n個字節,格式為0x55,0xaa, {真正的數據},chksum。這時接收線程需要識別整個數據結構,并做校驗和,這樣才能得到可靠的應用數據包。如果用收到n個字節就作為應用數據包,可以但肯定不可靠。因為一旦傳送過程出點錯,那就會連續好幾幀數據的丟失。
|
|
單帖管理 | 引用 | 回復 |
xxq2012 |
9樓 |
Post By:2012-5-30 16:14:00 [只看該作者]
下面設備不停的發送數據上來,完整的數據幀是以3個EB 90為同步字頭,幀內包括數據長度字節,數據的提取,處理你們有相關的代碼和例程嗎,能發給我一份作參考嗎,請發送到414595534@QQ.com,謝謝!
|
|
單帖管理 | 引用 | 回復 |
x10 |
10樓 |
Post By:2012-5-31 8:28:00 [只看該作者]
我們沒有統一的數據幀提取方法,原則是把接收線程做成一個狀態機,根據具體的幀結構會有發現相應的簡化算法。
|
|
單帖管理 | 引用 | 回復 |
xxq2012 |
11樓 |
Post By:2012-6-1 15:09:00 [只看該作者]
那恢復成原來8個字節觸發的方式行嗎?通過燒寫內核,發個老版本的內核給我,謝謝
|
|
單帖管理 | 引用 | 回復 |
x10 |
12樓 |
Post By:2012-6-2 19:43:00 [只看該作者]
寫解析應當很容易的。就是
switch(state) { case 0:    if(buf[i] == 0xEB)       state = 1:    break; .... } 類似上面的流程。對串口數據通訊的程序,應用數據包的提取應當是最基本的。否則通訊過程肯定是不穩定的,這與8字節buffer還是128字節buffer沒關系。 如果一定希望要收8個,自然成組,建議發送8個字節后,停4個字節的時間,再發。這樣你肯定就能收到8個字節了。 |
|
單帖管理 | 引用 | 回復 |