例項6---程式除錯助手printf-----程式目的:如何利用標準庫實現
printf函式
printf函式稱為格式輸出函式,其關鍵字最末乙個字母f即為「格式」(format)之意。其功能是按使用者指定的格式,把指定的資料顯示到顯示器螢幕上。
printf函式是乙個標準庫函式,它的函式原型在標頭檔案「stdio.h」中,printf函式呼叫的一般形式為:
printf(「格式控制字串」, 輸出表列)
其中格式控制字串用於指定輸出格式。格式控制串可由格式字串和非格式字串兩種組成。格式字串是以%開頭的字串,在%後面跟有各種格式字元,以說明輸出資料的型別、形式、長度、小數字數等。如:
%d 十進位制有符號整數
%u 十進位制無符號整數
%f 浮點數
%s 字串
%c 單個字元
%p 指標的值
%e 指數形式的浮點數
%x或者%x 無符號以十六進製制表示的整數,小寫則輸出小寫,大寫則輸出大寫
%o 無符號以八進位制表示的整數
%g 自動選擇合適的表示法
%p 輸出位址符
如果這個是在vc環境下,printf就可以直接使用。那在msp430的平台下如何實現,下面我們就來編寫程式,首先確定的就是printf我們呼叫的是iar環境下的標準庫函式,那麼我們只要寫個底層就可以了,也是就我們寫個putchar函式即可,不了解putchar函式的同學自己問下度娘,putchar函式如下:
//向終端輸出乙個字元
int putchar(int c)
uca0txbuf = c;
while(!(ifg2 & uca0txifg));
return c;
}注意形式引數與函式型別都是int型,不要更改這個資料型別,否則不相容。這個我們可以看下printf的宣告
__eff_nw1 __printfpr __attributes int printf(const char *_restrict, ...);
下面我們看演示程式:
在我們上節課的uart.c的檔案裡我們新增putchar函式
//uart0底層驅動檔案
#include
#include "uart.h"
//串列埠0初始化 波特率9600
void uart0_init(void)
//串列埠0傳送資料
void uart0_send_byte(u8 data)
//向終端輸出乙個字元
int putchar(int c)
uca0txbuf = c;
while(!(ifg2 & uca0txifg));
return c;
}//串列埠0接收中斷
#pragma vector=usciab0rx_vector
__interrupt void usci0rx_isr(void)
//主函式
#include
#include "msp430type.h"
#include "system.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
#include "uart.h"
//主函式
void main(void)
}主函式很簡單,就是不斷傳送字串,led燈不斷閃爍。上圖看下串列埠除錯助手有沒有收到資料。
其他的格式輸出大家自己去驗證,這裡就不一一演示了。
printf函式實現課程完結。源程式:
學習討論q群:167390222 2023年7月5日
printf函式實現
要實現printf函式需要考慮如下三點 1.如何告訴printf傳入引數的個數 引數個數不確定。2.printf如何訪問到這些引數。3.函式呼叫完成後,系統如何釋放在堆疊的引數。printf函式的定義 原型 int cdecl printf const char format,注 cdecl是c c...
printf函式的實現
printf函式是c語言庫函式中的輸出函式。在學習stm32過程用由於需要用到串列埠列印功能,但是程式原來的printf函式列印到串列埠時,出現了大量亂碼。無奈只能自己研究一下printf函式的構成。寫個乙個簡化版的printf函式。int myprintf const char format,wh...
C標準庫常用函式實現
size t mystrlen const char s s指向的內容唯讀 sc更加符合人的思維就是需要它改變。int mystrncmp const char s1 const char s2 size t n 從s2執行的資料複製最多n個字元到s1指向陣列中.如果s2比n短,則s1執行資料後面新...