在單片機調試中常用的調試方法有Printf和仿真,Printf用得好很靈活,但用不好程序會(huì )死得很慘;
舉一個(gè)簡(jiǎn)單的實(shí)例:
主程序Main.c
按鍵初始化在Main.c里被調用,實(shí)際的操作都被注釋了,就剩下一個(gè)空殼,
工程中設置為軟件仿真,理論上是這代碼是沒(méi)有什么問(wèn)題,實(shí)際上也不存在問(wèn)題
編譯結果在第一張圖出看出來(lái),沒(méi)有任何警告,沒(méi)有任何錯誤,仿真時(shí)程序應該運行一個(gè)死循環(huán):
當然以上都是說(shuō)的正常情況下,但是實(shí)際仿真效果是:
點(diǎn)
.s起動(dòng)文件 –> main.c –> 調用KeyInit() –> 返回 –> 死循環(huán)
這邏輯一點(diǎn)問(wèn)題都沒(méi)有,為什么沒(méi)法運行呢?
分析:
Key.c
Key.h
從上面看引用了Stdio.h的Printf,而Printf()需要調用Putchar(),這個(gè)模塊是需要外部來(lái)實(shí)現的,而程序中沒(méi)有實(shí)現,編譯時(shí)也沒(méi)有報警,導致一個(gè)隱式調用。
所以程序無(wú)法運行,建議printf使用時(shí)自己實(shí)現,不容易出問(wèn)題,前設置調試開(kāi)關(guān)。
解決辦法:
1、實(shí)現Putchar();
2、實(shí)現printf();
3、不用printf();
聯(lián)系客服