這篇文章是針對我大概半個多月前遇到的乙個關於串列埠的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...