W806使用中斷方式接收數據,僅打開UART_INTS_RL和 UART_INTS_RTO兩個中斷
我設置了兩個變量,用來統計在接收的時候進入中斷的總次數INT_Count和接收用的次數INT_RX_Count,並且打印每次讀取FIFO中的數據個數;
現測試,發送一條153字節的數據,打印情況如下:
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:16
RF:0
RF:9
INT_Count=19,INT_RX_Count=18
從上面打印的結果看,僅接收進入中斷18次,但其中一半讀取的是0值,我嘗試在讀取後複位RXFIFO,降低系統主頻至40MHz,情況仍然是這樣的,顯然資源浪費了
現在有兩個疑問,1.設定的16字節觸發中斷,為什麼會出現0值觸發?2.如何避免這種情況,提高效率?
@ZYQ 感謝您的回答!只是您的回答對我來說沒有任何幫助。我大概也知道應該是代碼的問題,或者說應該是對這個U使用過程中規避一些坑的用法不熟悉;我如果貼代碼,只知道是串口部分的,具體貼哪段,如果知道了就不用在這裡尋求幫助了。所以,現在反馈的是測試過程和現象;如果您理解不了,還請原諒,個人表達能力有限。
值得慶幸的是,這個問題目前在群友4061N的幫助下已經解決!在次表示感謝!
下面我們說一下這個研究這個問題的原因,
我的串口部分程序是基於原廠固件庫修改而來的,因原廠固件庫有很多bug,0.6.0版本中斷發送方式是不能正常工作的,此處改了兩個地方,還有接收完後對指針進行減操作,在頻繁大批量傳輸時很不安全且會數據錯亂!
在校正了這些問題後,串口操作時仍然會偶爾死機的情況……由此特做了以上的測試!
官方固件對處理中斷的操作是先清中斷標識,然後讀取FIFO,會出現以上測試的情況;群友4061N的分析,是清過中斷後,由於FIFO中還存在數據,二次觸發了中斷!
最終,在讀取完FIFO後再清一次中斷,即可解決雙倍中斷的情況!
希望各位在使用串口的時候特別注意!
至於我在項目中出現的死機情況是否跟此有關,後續會做進一步測試,到時再告知大家,謝謝!
再次感謝群友4061N的幫助!
問題得到解決就行,我的回答,只是想說,你得抓住重點去提問,並沒有其他的意思,如果不知道哪裡有問題,那麼幹脆全部打包貼上去,這樣想要幫助你的人,才能分析你的代碼,才能真正幫助你;就跟去醫院看病一樣,你只會對醫生說我肚子不舒服,就是肚子不舒服,現象確實是你肚子不舒服,你沒說錯;關鍵是大家又不是三歲小孩子,總讓醫生猜測你可能某某某原因麼??這讓醫生怎麼去分呢??
上面,反馈的是測試過程和現象!我覺得這些是最接近問題根本所在的
兩個變量都很難理解了,全部打包,更多陌生變量,更沒人願意看了!
不過,還是感謝你的熱心回答