通過串口打印調(diào)試信息或者實(shí)現(xiàn)上下位機(jī)交互是我們最常使用的調(diào)試手段之一,畢竟實(shí)現(xiàn)起來無論是硬件成本(接出兩根線Txd和Rxd,外加一個電平轉(zhuǎn)換芯片)還是軟件成本(下位機(jī)寫好UART驅(qū)動,上位機(jī)直接超級終端或者一些第三方串口調(diào)試助手)都是相對較低的,所以這種方式還是灰常受廣大“攻城師”們歡迎的。不過如果由于I/O資源緊缺串口被用做其他用處或者板子直接沒有引出串口的話(是不是產(chǎn)生共鳴了,呵呵),那該怎么辦呢?
當(dāng)然,所謂時代不同了(liao)(我咋順口想說“男女都一樣呢”,呵呵,哎,都是生在舊社會長在紅旗下的孩子啊),隨著嵌入式開發(fā)生態(tài)系統(tǒng)越來越完善,目前也是有越來越多的Poweful開發(fā)工具支持豐富的調(diào)試功能(支持打印調(diào)試信息和交互等),但是涉及到一些版權(quán)的問題價(jià)格上還是有點(diǎn)小貴的(對一些小企業(yè)來說還是難以接受的),所以這個時候就需要我們動動腦筋去摸索摸索其他的方法(所謂路是探索出來的),事實(shí)證明破釜沉舟下人的潛力是無限的,呵呵,這里就分享一個折衷的辦法去解決大家一直苦惱的問題,即使用IAR虛擬的串口終端來實(shí)現(xiàn)信息的交互和打印,下面進(jìn)入正題:
測試平臺:IAR6.6 + FRDM KE02開發(fā)板(我目前手里有就拿這個了,其他板子都可以放心用的,呵呵)
測試代碼:KE驅(qū)動庫(KEXX_DRIVERS_V1.0.1_DEVD\kexx_drv_lib_release_r1.0.1\build\iar\ke02\platinum)
這里稍微提一句,我測試的是KE驅(qū)動庫的代碼,但是實(shí)際上只要你看懂了我下面的解決方法(授之以漁而不是魚),其他代碼都是類似的。
1)打開KE02 platinum的IAR工程,進(jìn)入到platinum.c文件,找到main函數(shù)如下圖1,可以看到其調(diào)用了printf打印函數(shù),而該工程是默認(rèn)調(diào)用底層串口的,我們跳轉(zhuǎn)到該函數(shù)的定義如圖2,再繼續(xù)跳轉(zhuǎn)到out_char的函數(shù)定義如圖3,這下就屢清楚了,我們可以很直觀的看到工程默認(rèn)是調(diào)用UART底層的,呵呵,下面我們就要動手改造它對printf進(jìn)行重定向;
2)首先我們需要注釋掉printf的實(shí)現(xiàn)函數(shù),將其屏蔽掉,然后需要給printf一個重新指向的地址,下面就該我們常見的這位老兄出場了(貌似當(dāng)初自打我開始接觸Turbo C的時候就已經(jīng)用到它了,老生常談的“Hello world”就是調(diào)用它內(nèi)部的printf來實(shí)現(xiàn)的)。我們找到Common.h文件,將添加到其中,如下圖,這樣凡是需要printf的文件只需要添加common.h頭文件即可:
3)這里先說說stdio.h文件的作用,我們打開stdio.h文件可以看到其內(nèi)部定義了標(biāo)準(zhǔn)輸入輸出函數(shù),包括我們常見的scanf和printf等函數(shù),而這些函數(shù)所調(diào)用的底層即為IAR提供的鏈接到其Terminal的驅(qū)動,所以……懂的,呵呵。除此之外,我們肯定不滿足只輸出打印(給人略顯低端的趕腳有木有),所以為了體現(xiàn)我們不是“土豪”,我覺著有必要讓它交互起來,實(shí)現(xiàn)真正的串口功能(因?yàn)橐恍╊愃芺ootloader之類的還是需要輸入?yún)?shù)的),我在main函數(shù)添加了scanf語句用來測試輸入功能,如下:
4)準(zhǔn)備工作就緒,編譯鏈接整個工程,然后下載到KE02的板子中并進(jìn)入到Debug調(diào)試環(huán)境中,點(diǎn)擊View->Terminal I/O調(diào)出虛擬終端,然后全步運(yùn)行,就可以看到Terminal下開始打印調(diào)試信息,如下。當(dāng)然顯示輸出有點(diǎn)小case了,我們再試試輸入功能,在input框中輸入‘a(chǎn)’,然后回車,如下圖,perfect:
5)還沒完,我們要玩就玩高端大氣上點(diǎn)檔次的,我們再探索探索呢,結(jié)果又發(fā)現(xiàn)個小驚喜,我們點(diǎn)擊上圖右下角的“Input Mode”,彈出設(shè)置框如下,很高端啊有木有:
呼,終于寫完了,呵呵,看完之后是不是有種躍躍欲試的興奮呢,哈哈,enjoy it~
未完待續(xù)~
附件為我修改好的工程,僅供參考:
|