自己實現乙個printf函式

2021-07-23 22:57:06 字數 1271 閱讀 2047

在arm嵌入式開發環境中,串列埠一般使用arm pl011的uart實現,uart的實現原理就是實現了乙個8bits寬度,32深度的fifo,不停的往螢幕輸出乙個byte,乙個byte。這個就是硬體的實現,那麼軟體是怎麼實現列印 高階程式語言中定義的char,short,int,long,float,string呢?這個就是軟體實現的技巧了,今天我來實現乙個printf函式,當然我現在的環境是x86平台,嵌入式開發環境就是替換x86下的putchar函式罷了。

硬體平台:x86環境   編譯器環境:mingw 

實現如下:

print_cui.h:

#ifndef     __print_h_

#define    __print_h_

#include

#include

void    print(char* fmt, ...);

void    printch(char ch);

void    printdec(int dec);

void    printflt(double flt);

void    printbin(int bin);

void    printhex(int hex);

void    printstr(char* str);

#define console_print(ch)    putchar(ch)

#endif    /*#ifndef __print_h_*/

print_cui.c:

#include "print_cui.h"

int main(void)

void print(char* fmt, ...) 

pfmt++;

}else

}va_end(vp);

}void printch(char ch)

void printdec(int dec)

printdec(dec/10);

printch( (char)(dec%10 + '0'));

}void printflt(double flt)

void printstr(char* str)

}void printbin(int bin)

printbin(bin/2);

printch( (char)(bin%2 + '0'));

}void printhex(int hex)

printhex(hex/16);

if(hex < 10)

else

}執行結果:

實現自己的printf函式

在嵌入式開發中,常常會通過串列埠列印一些資訊到pc終端,這就需要實現自己的printf函式,下面介紹列印函式print的實現。print.h cpp view plain copy print?ifndef print h define print h void print char fmt,voi...

自己實現乙個 atoi 函式

情況一 輸入的字元包含不是數字字元的字元?例如 123adc4 針對這種情況,我們只要加上判斷就行了,只要遇到不是數字字元的直接返回。情況二 如果在數字字元前面有正負號又該怎麼辦?例如 123 123 針對這種情況,我們再加上判斷,判斷字串的第乙個字元是不是正負號,並用乙個標記位flag記錄正負。情...

自己實現printf

原理不是很難網上有很多,自己搜一下就明白了。void printlog const char fmt,看到上面 太簡單了,也許有人會說,這有什麼用?在我看來最大的用處在於寫日誌,如果我們把 稍稍改下就可以把螢幕上的輸出一起輸出到檔案乙份 在初始化處把全域性變數日誌檔案開啟就像這樣 plogfile ...