回覆列表
  • 1 # 使用者1158134898603

    1)開啟KE02 platinum的IAR工程,進入到platinum.c檔案,找到main函式如下圖1,可以看到其呼叫了printf列印函式,而該工程是預設呼叫底層串列埠的,跳轉到該函式的定義如圖2,再繼續跳轉到out_char的函式定義如圖3,這下就屢清楚了,可以很直觀的看到工程預設是呼叫UART底層的,下面就要動手改造它對printf進行重定向;

    2)首先需要註釋掉printf的實現函式,將其遮蔽掉,然後需要給printf一個重新指向的地址,下面就該常見的

    3)這裡先說說stdio.h檔案的作用,開啟stdio.h檔案可以看到其內部定義了標準輸入輸出函式,包括常見的scanf和printf等函式,而這些函式所呼叫的底層即為IAR提供的連結到其Terminal的驅動,所以……懂的,呵呵。除此之外,肯定不滿足只輸出列印(給人略顯低端的趕腳有木有),所以為了體現我們不是“土豪”,有必要讓它互動起來,實現真正的串列埠功能(因為一些類似bootloader之類的還是需要輸入引數的),我在main函式添加了scanf語句用來測試輸入功能,如下:

    4)準備工作就緒,編譯連結整個工程,然後下載到KE02的板子中並進入到Debug除錯環境中,點選View->Terminal I/O調出虛擬終端,然後全步執行,就可以看到Terminal下開始列印除錯資訊,如下。當然顯示輸出有點小case了,我們再試試輸入功能,在input框中輸入‘a’,然後回車,如下圖,perfect:

  • 中秋節和大豐收的關聯?
  • 劉開文英文名字怎麼寫?