標(biāo)題: 關(guān)于串口接收問題的一點(diǎn)小看法 [打印本頁]

作者: xuwei    時(shí)間: 2015-6-13 16:14
標(biāo)題: 關(guān)于串口接收問題的一點(diǎn)小看法




串口,似乎是一個(gè)司空見慣的代名詞,但是我遇到了一個(gè)問題直到昨天才解決,那就是怎么完整的接收接受的數(shù)據(jù)而不丟失呢?串口都會(huì)用,都說很簡單,然而當(dāng)你去做的時(shí)候你才發(fā)現(xiàn)并不是想的那樣簡單那,當(dāng)然可能是我笨了點(diǎn),但是我解決了,怎怎么處理呢?現(xiàn)在看來很簡單了,用FIFO來解覺這個(gè)問題就簡單了,不用程序單單從邏輯上就是通的,實(shí)現(xiàn)起來也不難,怎么實(shí)現(xiàn)呢?很好搞,首先在內(nèi)存中開辟一塊緩存區(qū),當(dāng)然越大越好,只不過要根據(jù)內(nèi)存的容量來權(quán)衡,我的那個(gè)系統(tǒng)內(nèi)存很吃緊,因?yàn)楦采w了線程的堆棧,非常的耗費(fèi)RAM用量,開辟完了內(nèi)存,然后定義兩個(gè)指針,指向這個(gè)緩存,一個(gè)用來寫么一個(gè)用來讀,典型的FIFO,這下好了,你可以接受N個(gè)數(shù)據(jù)包,操作系統(tǒng)拿出一給線程監(jiān)聽串口數(shù)據(jù),一旦有數(shù)據(jù)包,那么兩個(gè)指針必定不相等,這樣用變量來記錄字節(jié)數(shù),用指針來訪問FIFO,就實(shí)現(xiàn)了,我測(cè)試過了,沒有問題,很穩(wěn)定,而且不會(huì)錯(cuò)過一個(gè)字節(jié)哦!尤其適用于不定長數(shù)據(jù)的處理,因?yàn)槎ㄩL非常好高,只要匹配就可以,不定長卻沒那么簡單,就要用這個(gè)FIFO,當(dāng)然如果你沒由運(yùn)行操作系統(tǒng),那么你還是一樣的操作只是你要不斷地去查詢是否有數(shù)據(jù)到來,串口是以中斷 方式接受。


作者: 3263065307    時(shí)間: 2016-5-5 18:58
大神為什么串口接收到的數(shù)據(jù)總是不完整的比如1234456總會(huì)出現(xiàn)少一些數(shù)據(jù)的情況比如會(huì)出現(xiàn)12346或者123等等的情況求幫助我的qq3263065307謝謝大神了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1