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