DEBUG 正點原子的乙個關於串列埠中小缺陷的問題

2021-10-24 10:45:16 字數 1253 閱讀 1371

這篇文章是針對我大概半個多月前遇到的乙個關於串列埠的bug,之前一直不太明白這個bug問題出現在哪,還以為是關於printf()自身的原因。今天因為我程式設計序過程中必須要用到printf()函式輸出資料,所以就仔細地琢磨了一下,終於找到了bug出現的原因。

首先我們先看正點原子的一段例程

if

(usart_rx_sta&

0x8000

)printf

("\r\n\r\n");

//插入換行

usart_rx_sta=0;

}

這段是正點原子的例程,從**上看它實現的大體功能是,當接收到資料後微控制器先向串列埠列印:

1.另起一行(第乙個\r\n)

2.「您傳送的訊息為:」

3.再另起一行(第二個\r\n)

然後向串列埠傳送接收到的資料,最終將傳送資料標誌位清零理想列印效果應該跟下圖類似(**稍作改變)

但實際列印效果確是如下圖所示:

bug就好像串列埠直接忽略了微控制器傳送的printf()中的第二個回車換行符。

通過檢視串列埠除錯助手的16進製制資訊發現串列埠除錯助手在接收第二個回車換行符(0d 0a)時,沒有接收到0a符號,具體原因是因為下面語句:

while

(usart_getflagstatus

(usart1,usart_flag_tc)

!=set)

;//等待傳送結束

這一句話功能是等待資料傳送完成。但由於我們在printf()和for迴圈之間沒有等待這一句**,使得printf()最後乙個字元還沒有傳送成功就被for迴圈中使用者要傳送資料中的第乙個位元組資料代替了,使得printf()中的0a沒有傳送出去,帶著沒有換行效果。

具體解決方法:在printf()和for迴圈之間將等待資料傳送完成**這一句**加上,這要傳送效果就達到我們的理性效果

if

(usart_rx_sta&

0x8000

)printf

("\r\n\r\n");

//插入換行

usart_rx_sta=0;

}

這樣程式才是正確的。

乙個hdmi音訊問題的debug

問題描述 開啟logcat可了看 沒次卡時都會列印像下面的log w audio hw primary 2194 do out standby.1074415168 i omxplayer 2194 stop player.w audio hw primary 2194 card 0,port 0 ...

最近用到的乙個Debug類

這個是我最近寫的乙個記錄除錯資訊的類,基本功能和以前寫過的udptracelistener類似 通過udp資料報文傳送除錯資訊傳送出去。為了方便除錯,增加了顏色和一些簡單的指令功能。感覺還比較方便,這裡記錄一下,以備後續使用。staticclassdebug publicstaticvoidwrit...

乙個前端反debug工具

概要 此工具通過不斷重定向至特定源 位置能夠讓瀏覽器debugger處於暫停狀態,對非授權除錯者在debug時造成干擾,在一定程度上保護前端 存在的解決方法 deactivate breakpoints 存在的反解決方法 在模板 中與業務邏輯耦合 模板 可直接使用 function construc...