8 0 標準庫printf函式實現

2021-06-22 15:29:23 字數 1901 閱讀 4383

例項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執行資料後面新...