Printf in BareMetal (PI4): Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
|||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
== printf == | == printf == | ||
Bis hierhin haben wir vieles selbst gemacht. Wir haben einen Weg gefunden, wie der Raspberry Pi Texte auf den Bildschirm anzeigen kann. | Bis hierhin haben wir vieles selbst gemacht. Wir haben einen Weg gefunden, wie der Raspberry Pi Texte auf den Bildschirm anzeigen kann. Unsere DrawString-Funktion hat jedoch nicht viele Vorteile. Viele kennen wahrscheinlich die printf-Funktion aus der Programmiersprache C. Diese Funktion kann formatierte Ausgaben erzeugen, bei denen auch Variablen eingebunden werden können. Da wir in einer Bare-Metal-Umgebung ohne Betriebssystem programmieren, können wir diese vorgefertigte Funktion nicht direkt nutzen und müssen sie selbst programmieren. printf ist eine sehr mächtige Funktion. | ||
Bei einer kleinen Recherche im Internet habe ich herausgefunden, dass bereits einige Leute diese Funktion für ähnliche Projekte programmiert haben. Also kam schnell die Idee auf, eine solche Lösung in unser Projekt einzubinden. | Bei einer kleinen Recherche im Internet habe ich herausgefunden, dass bereits einige Leute diese Funktion für ähnliche Projekte programmiert haben. Also kam schnell die Idee auf, eine solche Lösung in unser Projekt einzubinden. | ||
Ich habe mich für die | Ich habe mich für die printf-Version von Kustaa Nyholm entschieden, da diese einfach einzubinden ist und die Funktionen unterstützt, die wir für die weitere Entwicklung benötigen. | ||
Die Bibliothek kann hier heruntergeladen werden: [http://www.sparetimelabs.com/tinyprintf/tinyprintf.php Tinyprintf] | Die Bibliothek kann hier heruntergeladen werden: [http://www.sparetimelabs.com/tinyprintf/tinyprintf.php Tinyprintf] | ||
Das ZIP-Archiv enthält nur zwei Dateien. Die Datei | Das ZIP-Archiv enthält nur zwei Dateien. Die Datei printf.c speichern wir in unser Hauptverzeichnis und die Datei printf.h in das Include-Verzeichnis. | ||
In der Datei | In der Datei printf.h ist beschrieben, wie man die Funktionen in sein eigenes Projekt einbindet. | ||
== Änderungen im Main-Programm == | == Änderungen im Main-Programm == | ||
| Zeile 43: | Zeile 43: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
In der Anleitung steht, dass man das | In der Anleitung steht, dass man das printf-System initialisieren muss. Dies wird durch den Befehl init_printf(0, putc); durchgeführt. | ||
Hier verwende ich | Hier verwende ich anschließend printf, um meinen Titel im Terminal anzuzeigen. | ||
Zusätzlich müssen wir noch eine | Zusätzlich müssen wir noch eine putc-Funktion erstellen, die einfach nur auf die DrawCharAtCursor-Funktion verweist: | ||
<syntaxhighlight lang="C"> | <syntaxhighlight lang="C"> | ||
| Zeile 59: | Zeile 59: | ||
== Warum nicht alles selbst programmieren? == | == Warum nicht alles selbst programmieren? == | ||
Grundsätzlich möchte ich hiermit beschreiben, dass es manchmal keinen großen Sinn macht, alles selbst zu programmieren. Der Code, den ich hier für | Grundsätzlich möchte ich hiermit beschreiben, dass es manchmal keinen großen Sinn macht, alles selbst zu programmieren. Der Code, den ich hier für printf verwende, wurde bereits 2004 geschrieben. Also ein Code, der nun gut 20 Jahre alt ist. Und er funktioniert immer noch! | ||
Du kannst den Source-Code als ZIP-Datei mit folgenden Link downloaden: https://www.satyria.de/arm/sources/RPI4/C/7.zip | Du kannst den Source-Code als ZIP-Datei mit folgenden Link downloaden: https://www.satyria.de/arm/sources/RPI4/C/7.zip | ||
'''Hinweis''': In einem späteren Kapitel habe ich mich dann doch entschlossen, ein eigenes <code>printf</code> zu schreiben. Dennoch soll dies hier Zeigen, das man durchaus Fremden Code verwenden kann und wie dies verwendet werden kann. | |||
----- | ----- | ||
| Zeile 74: | Zeile 70: | ||
| style="width: 33%;" | [[Das Terminal in C (PI4)|< Zurück (Das Terminal in C (PI4))]] | | style="width: 33%;" | [[Das Terminal in C (PI4)|< Zurück (Das Terminal in C (PI4))]] | ||
| style="width: 33%; text-align:center;" | [[Hauptseite|< Hauptseite >]] | | style="width: 33%; text-align:center;" | [[Hauptseite|< Hauptseite >]] | ||
| style="width: 33%; text-align:right;" | Weiter ( | | style="width: 33%; text-align:right;" | [[Systeminformationen (PI4)|Weiter (Systeminformationen) >]] | ||
|} | |} | ||
Aktuelle Version vom 31. Juli 2025, 06:35 Uhr
printf
Bis hierhin haben wir vieles selbst gemacht. Wir haben einen Weg gefunden, wie der Raspberry Pi Texte auf den Bildschirm anzeigen kann. Unsere DrawString-Funktion hat jedoch nicht viele Vorteile. Viele kennen wahrscheinlich die printf-Funktion aus der Programmiersprache C. Diese Funktion kann formatierte Ausgaben erzeugen, bei denen auch Variablen eingebunden werden können. Da wir in einer Bare-Metal-Umgebung ohne Betriebssystem programmieren, können wir diese vorgefertigte Funktion nicht direkt nutzen und müssen sie selbst programmieren. printf ist eine sehr mächtige Funktion.
Bei einer kleinen Recherche im Internet habe ich herausgefunden, dass bereits einige Leute diese Funktion für ähnliche Projekte programmiert haben. Also kam schnell die Idee auf, eine solche Lösung in unser Projekt einzubinden.
Ich habe mich für die printf-Version von Kustaa Nyholm entschieden, da diese einfach einzubinden ist und die Funktionen unterstützt, die wir für die weitere Entwicklung benötigen.
Die Bibliothek kann hier heruntergeladen werden: Tinyprintf
Das ZIP-Archiv enthält nur zwei Dateien. Die Datei printf.c speichern wir in unser Hauptverzeichnis und die Datei printf.h in das Include-Verzeichnis.
In der Datei printf.h ist beschrieben, wie man die Funktionen in sein eigenes Projekt einbindet.
Änderungen im Main-Programm
Zuerst ändern wir unser Main-Programm:
// main.c
#include "led.h"
#include "screen.h"
#include "types.h"
#include "printf.h"
int main(void)
{
LED_off();
Init_Screen();
init_printf(0, putc);
SetFrontColor(0x80, 0xa0, 0xff);
printf("*****************************************************************************************\n");
printf("*** ***\n");
printf("*** (c) by Satyria ***\n");
printf("*** ***\n");
printf("*****************************************************************************************\n\n");
SetFrontColor(0xff, 0xff, 0xff);
LED_Error(2);
}
In der Anleitung steht, dass man das printf-System initialisieren muss. Dies wird durch den Befehl init_printf(0, putc); durchgeführt.
Hier verwende ich anschließend printf, um meinen Titel im Terminal anzuzeigen.
Zusätzlich müssen wir noch eine putc-Funktion erstellen, die einfach nur auf die DrawCharAtCursor-Funktion verweist:
void putc(void* p, char c)
{
//UartPutc(c);
DrawCharAtCursor(c); //Verwendung von printf im Terminal
}
Warum nicht alles selbst programmieren?
Grundsätzlich möchte ich hiermit beschreiben, dass es manchmal keinen großen Sinn macht, alles selbst zu programmieren. Der Code, den ich hier für printf verwende, wurde bereits 2004 geschrieben. Also ein Code, der nun gut 20 Jahre alt ist. Und er funktioniert immer noch!
Du kannst den Source-Code als ZIP-Datei mit folgenden Link downloaden: https://www.satyria.de/arm/sources/RPI4/C/7.zip
Hinweis: In einem späteren Kapitel habe ich mich dann doch entschlossen, ein eigenes printf zu schreiben. Dennoch soll dies hier Zeigen, das man durchaus Fremden Code verwenden kann und wie dies verwendet werden kann.
| < Zurück (Das Terminal in C (PI4)) | < Hauptseite > | Weiter (Systeminformationen) > |