my_printf ist ein, in der Funktionalität reduzierter Ersatz, für die jedem C-Compiler beiliegenden printf-Funktion, und ist speziell für die Benutzung in Verbindung mit Mikrocontrollern gedacht. my_printf macht immer dann Sinn, wenn es darum geht, Flashspeicher zu sparen. Die Syntax von my_printf : void my_printf(const char *s,...); Prototypdeklaration in : ../include/my_printf.hEine Beschreibung zum originalen printf gibt es hier: https://www.jjflash.de/printf_myprintf.html Ein vom Standard abweichendes Umwandlungszeichen %k ermöglicht es, Pseudo-Kommazahlen auszugeben. my_printf benötigt zur Ausgabe irgendwo in den zu einem Programmprojekt gehörenden Dateien (vorzugsweise in der Datei, die die main-Funktion beinhaltet) einer Funktion namens: void my_putchar(char ch);my_printf bedient sich dieser Funktion zur Zeichenausgabe. Soll bspw. ein Programm die Ausgaben auf der seriellen Schnittstelle vornehmen und ist die Software in uart.c eingebunden, dann gibt es dort die Funktion: void uart_putchar(char ch);Um diese Ausgabefunktion nutzen zu können, kann ein einfaches Programm folgendermaßen aussehen: #include "ch32fun.h" #include "ch32v003_gpio.h" #include "uart.h" #include "my_printf.h" #define printf my_printf /* ---------------------------------------------------------- my_putchar wird von my_printf aufgerufen. Hierauf gibt my_printf den Datenstream aus ---------------------------------------------------------- */ void my_putchar(char ch) { uart_putchar(ch); } int main(void) { SystemInit(); uart_init(115200); printf("\n\r Hallo Welt \n\r "); while(1); }Eine wichtige Zeile im obigen Programm ist: #define printf my_printfMit diesem define wird jede printf-Anweisung auf die eigene abgespeckte Version my_printf umgeleitet.
Beispiel: #include "ch32fun.h" #include "ch32v003_gpio.h" #include "uart.h" #include "my_printf.h" #define printf my_printf /* ---------------------------------------------------------- my_putchar wird von my_printf aufgerufen. Hierauf gibt my_printf den Datenstream aus ---------------------------------------------------------- */ void my_putchar(char ch) { uart_putchar(ch); } int main(void) { int a, a2, b, c; SystemInit(); uart_init(115200); printf("\n\r ASCII-Zeichen '%c' = dezimal %d = hexadezimal 0x%x\n\r", 'M', 'M', 'M'); a= 42; b= 13; // Variable a um 2 Stellen nach links schieben, um spaeter //2 Nachkommastellen anzeigen zu koennen a2= a*100; c= a2 / b; printfkomma= 2; printf(" %d / %d = %k", a, b, c); while(1); }Ausgabe:
|