一、Printf簡介
Printf是一個標準的c庫API,用來打印信息顯示的。
Printf的底層輸出調(diào)用,在windows環(huán)境下是fputc函數(shù),在GNUC環(huán)境下是__io_putchar函數(shù)。
Printf主要做兩件事:第一件是將參數(shù)字符串以及可變參數(shù)進行解析,格式化成一串字符串。第二件事就是將格式化的字符串一個字節(jié)一個字節(jié)的輸出出去(至于以什么樣的方式輸出那就得看底層的實現(xiàn)了,比如有OS的情況下就是輸出在命令行下的)。
二、串口和Printf
- 在嵌入式設備中一般有兩種調(diào)試方法,一種是硬件調(diào)試無序軟件干預(利用廠商提供的仿真器和應用軟件),另一種是軟件調(diào)試(利用串口發(fā)送調(diào)試)。一般在系統(tǒng)初始階段串口無法使用的情況下都是用的硬件進行調(diào)試但是這種方式不太靈活,限制很多,能用軟件調(diào)試盡量都用軟件,這種方式比較靈活。
- 串口設備本身只能將我們寫入數(shù)據(jù)寄存器的數(shù)據(jù)發(fā)送出來,無法支持更多的功能。比如將存放十進制的數(shù)據(jù)的變量轉(zhuǎn)換成字符形式再發(fā)出去,這樣我們?nèi)瞬抛R別。而標準庫的printf就是實現(xiàn)了這些功能。
- Printf的第一件事主要是軟件實現(xiàn)的我們不用管,而第二件事就是輸出到那個地方,所以我們只需要將fputc或者__io_putchar函數(shù)實現(xiàn)為串口的發(fā)送,將Printf打印的信息打印到串口助手顯示區(qū)。代碼如下:
除此之外,我們還要再做一點配置工作——禁用半主機模式,禁用了半主機模式才能使用標準庫函數(shù)Printf()打印信息到串口,在程序中加入以下代碼即可。那么什么是半主機模式?為什么不用它?半主機模式是ARM單片機的一種調(diào)試機制,跟串口調(diào)試不一樣的是,它需要通過仿真器來連接電腦和ARM單片機,并調(diào)用相應的指令來實現(xiàn)單片機向電腦顯示器打印信息(或者從電腦鍵盤讀取輸入)。簡而言之,這種方法比串口調(diào)試更復雜(需要進行更多的配置操作),也更不靈活(一定要用仿真器)。
上面的配置似乎有點麻煩,要加入這么一堆難懂的代碼,難道沒有更簡便點的方法嗎?有,但不推薦。方法是使用微庫(MicroLIB),只要在Keil的“Options for Target -> Target ->Use MicroLIB”上打勾,即可使用串口打印(fputc()函數(shù)還是要實現(xiàn),但上述的禁用半主機代碼不用加)。微庫是區(qū)別于C標準庫的另一個庫,當使用微庫時,就默認關閉了半主機模式,也就不用添加上面的代碼。這樣雖然方便,但個人建議能不用就不用,原因:第一,微庫是為小內(nèi)存嵌入式設備而設計的,使用它可以減少代碼所占空間,但對現(xiàn)在STM32等單片機來說,內(nèi)存一般都夠用,微庫并非必需;第二,微庫相對于C標準庫而言,支持的功能更少,主要體現(xiàn)在對操作系統(tǒng)的支持上??偟膩碚f,標準的東西總是相對更可靠,所以不必要的掉坑,還是用C標準庫,不用微庫。
-
函數(shù)
+關注
關注
3文章
4381瀏覽量
64926 -
嵌入式設備
+關注
關注
0文章
116瀏覽量
17427 -
Printf
+關注
關注
0文章
84瀏覽量
14248
發(fā)布評論請先 登錄
免費三分鐘
職場啟示: 三分鐘碎片化
電阻、感抗、容抗、阻抗三分鐘理清它們的關系
讓程序運行三分鐘,停一分鐘,循環(huán)下去,直到設置停止循環(huán)的位置
三分鐘能做什么?三分鐘能讓我的iPhone6s重啟N次!
小米掃地機器人臺灣開售 三分鐘售罄
三分鐘概述8類常用元器件資料下載

三分鐘看懂工字型功率電感外觀破損的常見原因gujing

Brocade幫助Netzlink實現(xiàn)三分鐘云服務供應

Node-RED初學者教程-三分鐘學習

評論