<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 串口DMA跑數據接收壓力測試的問(wèn)題及其解決辦法

串口DMA跑數據接收壓力測試的問(wèn)題及其解決辦法

發(fā)布人:dianlaotie 時(shí)間:2022-03-24 來(lái)源:工程師 發(fā)布文章

做項目時(shí)使用官方串口DMA例程,在跑數據接收壓力測試時(shí)發(fā)現了一些細節問(wèn)題,正是這些問(wèn)題卡了我2天?,F在終于得到解決,在此立個(gè)貼做記錄。例程現象:

1. 串口DMA在接收過(guò)程中,是不定長(cháng)接收的。就算你上位只發(fā)送了1次,例程接收端總會(huì )給你2 - N段不定長(cháng)數據給你。論壇上也有類(lèi)似的帖子說(shuō)是底層驅動(dòng)的某些特性。

2. 串口DMA在接收線(xiàn)程中serial_thread_entry里面不可以做協(xié)議數據解析,盡管這是個(gè)獨立的線(xiàn)程,盡管你的數據解析函數沒(méi)有任何阻塞線(xiàn)程的動(dòng)作,都不行。你必須把接收到的數據通過(guò)其他途徑轉移到其他線(xiàn)程去處理(比如消息隊列)。否則會(huì )產(chǎn)生意想不到異常,現象是在運行一段時(shí)間后tshell卡死,或者當前接收線(xiàn)程直接在ps列表消失,但是依然可以接收數據,無(wú)論哪樣最終都會(huì )讓tshell完全卡死加死機,就連cmTraceback也救不了(不能百分百觸發(fā)異常播報),cmTraceback只會(huì )告訴你的shell串口在接收中斷處有問(wèn)題,但是具體什么問(wèn)題我看不出。個(gè)人懷疑是 rx_length = rt_device_read(msg.dev, 0, rx_buffer, msg.size); 這個(gè)函數有隱藏阻塞,如果在下文加上長(cháng)延時(shí)的數據解析會(huì )導致跟tshell沖突。

嘗試過(guò),提高或降低tshell 或 syswork或其他線(xiàn)程優(yōu)先級,增大串口或線(xiàn)程緩沖區。都不行。

解決辦法:
串口接收線(xiàn)程收到的數據只能再中轉到其他線(xiàn)程去做處理。 以下是我串口生產(chǎn)者,和消費者代碼。

小提示:
消費者線(xiàn)程的優(yōu)先級要高于生產(chǎn)者線(xiàn)程的優(yōu)先級(消息隊列應用),否則會(huì )出現數據覆蓋的現象。比如,高優(yōu)先級生產(chǎn)者隊列入了3次數據,低優(yōu)先級消費者線(xiàn)程出隊列只能取到最后一條數據。這個(gè)我也很納悶。我覺(jué)得可能跟線(xiàn)程搶占有關(guān)或者優(yōu)先級翻轉之類(lèi)的現象,解決辦法也許把消費者和生產(chǎn)者加上互斥鎖后應該就能解決,但是這樣的話(huà),因為被鎖了,生產(chǎn)者線(xiàn)程有可能不能及時(shí)接受到外來(lái)數據導致丟包。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 串口 DMA

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>