GCC- Konsolenfunktionen

Folgende Funktionen zur Ein- und Ausgabe auf einer Konsole am SpartanMC stehen zur Verfügung:

1. uart_wait_idle(UART_MONITOR);

Die Funktion wartet auf den Ruhezustand einer UART, deren Adresse mit dem Namen der Uart im jConfig als Argument (hier UART_MONITOR) in den Klammern angegeben wird. Die Funktion wartet, bis die Schieberegister von Rx und Tx sowie RESET Funktionen abgeschlossen sind. Danach kann dann bei unidirektionalen Datenübertragungen die Datenrichtung geändert werden oder eine andere Datenrate, oder andere um Initialisierungen vorgenommen werden. Bei Verwendung der UART_LIGHT darf diese Funktion nicht aufgerufen werden. Wird die Funktion beim Systemstart vor der 1. Verwendung der Uart nicht aufgerufen, dann werden die Daten verfälscht, wenn der Ruhezustand noch nicht eingenommen wurde!

2. stdio_uart_open(UART_MONITOR);

Die Funktion verknüpft die Uart mit der Adresse UART_MONITOR mit den STDIO Operationen, die in den folgenden Funktionen beschrieben werden.

3. putchar(zeichen);

Ausgabe eines 8 Bit Wertes an das STDIO Gerät. Der folgend Code sendet eine ASCII "0".
unsigned char   zeichen;
zeichen = 0x30;
putchar(zeichen);


4. zeichen = getchar();

Warten auf die Eingabe eines 8 Bit Wertes vom STDIO Gerät. Der folgende Code übergibt den eingegebenen Wert der Variablen "zeichen".
unsigned char   zeichen;
zeichen = getchar();


5. getchar_nb(&zeichen);

Testen, ob am STDIO Gerät ein Zeichen eingegeben wurde. Wurde ein Zeichen empfangen, ist der Rückgabewert der Funktion UART_OK, ansonsten UART_NO_DATA. Im folgenden Beispiel liefert die definierte Funktion eine 0x0 wenn nichts eingegeben wurde oder den Code des gesendeten Zeichens.
// z=uart_getstat() // z=0 keine Eingabe
unsigned char uart_getstat(void){
        unsigned char zeichen;
        if (getchar_nb(&zeichen) == UART_OK) {
                return zeichen;
        } else {
                return 0x0;
        };
}


6. printf("\r\n Wert = 0x%6x\n",out_value);

Senden von Zeichenketten und Anzeige von Werten auf dem STDIO Gerät. Es wird die übliche C-Funktion realisiert, es können aber nur maximal 2 Werte pro Aufruf angezeigt werden. Die Anzeige von Werten im LONG Format ist nicht möglich! Unterstützte formate sind:

OptionFormat
%d dezimal, negativ mit Vorzeichen
%u dezimal, ohne Vorzeichen
%x,%X hexadezimal in Klein- oder Großbuchstaben
%o octal
%b binär
%s Zeichenkette
%% Zeichen "%"


Formatangaben können mit einer Breitenangabe versehen werden, z.B. "%3d" für Dezimalzahl mit 3 stellen oder auch "%03d" für Anzeige füherender Nullen.

unsigned int out_value = 0x12345;
printf("\r\n\t  Hallo ich bin SpartanMC 18   \r");
printf("\r\n\t  SpartanMC 18 TU-Dresden InfMR\r");
printf("\r\n\t  Wert = 0x%6x\n",out_value);


In den Zeichenketten sind die in C üblichen ANSI-Steuerzeichen und Sequenzen möglich. Wird die Standard IO auf einer UNIX-Konsole ausgegeben (Minicom), dann kann man auch die Sequenzen zur Cursor Positionierung und zur Zeichenfarbe aus dem ANSI-Standard verwenden.

Konsolenfunktionen zur long (36 Bit) Ein- Ausgabe mit dem Include "io_funktionen.c" und "io_funktionen.h"

Anzeigen von long Werten (36 Bit) hexadezimal auf dem STDIO Gerät. Mit dem 2. Parameter wird die Anzahl der Anzeigestellen festgelegt. Es sind Werte von 0 bis 9 möglich. Bei 9 werden immer alle Stellen angezeigt und bei 0 nur die Stellen ungleich 0. Bei 1 wird nur die Stelle 16° immer angezeigt.
#include <io_funktionen.h>
unsigned long out_value = 0x123456789;
printf("\r\n 36 Bit Wert = 0x");
print_lx(out_value, 1);


Anzeigen von long Werten (36 Bit) dezimal auf dem STDIO Gerät. Mit dem 3. Parameter wird die Anzahl der Anzeigestellen festgelegt. Es sind Werte von 0 bis 11 möglich. Bei 11 werden immer alle Stellen angezeigt und bei 0 nur die Stellen ungleich 0. Bei 1 wird nur die Stelle 10° immer angezeigt. Mit sig=0 wird wert ohne Vorzeichen angezeigt. Für ungleich 0 wird das Vorzeichen und der Betrag angezeigt.
#include <io_funktionen.h>
unsigned long out_value = ­34359738368;
printf("\r\n 36 Bit Wert = ");
print_ld(out_value, 1, 1);


9. get_lx(unsigned int pos);

Eingabe von long Werten (36 Bit) hexadezimal mit dem STDIO Gerät. Werden mit der Funktion weniger als pos Stellen eingegeben, dann wird nach ENTER ein TAB auf die Konsole ausgegeben. Damit sind mehrere Eingaben in einer Zeile möglich. Mit BS kann die Eingabe korrigiert werden.
#include <io_funktionen.h>
unsigned long in_value;
printf("\r\n 36 Bit Wert = 0x");
in_value = get_lx(4);


10. get_ld(unsigned int sig, unsigned int pos);

Eingabe von long Werten (36 Bit) dezimal mit dem STDIO Gerät. Werden mit der Funktion weniger als pos Stellen eingegeben, dann wird nach ENTER ein TAB auf die Konsole ausgegeben. Damit sind mehrere Eingaben in einer Zeile möglich. Mit BS kann die Eingabe korrigiert werden. Mit sig = 0 wird ein Wert ohne Vorzeichen beginnend mit einer Ziffer erwartet. Bei ungleich 0 muss die Eingabe mit „+“ oder „-“ anfangen.
#include <io_funktionen.h>
unsigned long in_value;
printf("\r\n 36 Bit Wert = ");
in_value = get_ld(1, 4);


11. get_18(char *meld, unsigned int pos);

Eingabe von Werten (18 Bit) hexadezimal mit dem STDIO Gerät. Werden mit der Funktion weniger als pos Stellen eingegeben, dann wird nach ENTER ein TAB auf die Konsole ausgegeben. Damit sind mehrere Eingaben in einer Zeile möglich. Mit BS kann die Eingabe korrigiert werden. Der 1. Parameter ist eine Zeichenkette zur Eingabeaufforderung. Bei der Eingabe von Werten > 0x3ffff wird eine Fehlermeldung angezeigt und erneut zur Eingabe aufgefordert.
#include <io_funktionen.h>
unsigned long in_value;
in_value = get_18(„\r\n 18 Bit = 0x“, 4);


12. get_18d(char *meld, unsigned int sig, unsigned int pos);

Eingabe von Werten (18 Bit) dezimal mit dem STDIO Gerät. Werden mit der Funktion weniger als pos Stellen eingegeben, dann wird nach ENTER ein TAB auf die Konsole ausgegeben. Damit sind mehrere Eingaben in einer Zeile möglich. Mit BS kann die Eingabe korrigiert werden. Der 1. Parameter ist eine Zeichenkette zur Eingabeaufforderung. Bei der Eingabe von Werten die mehr als 18 Bit benötigen wird eine Fehlermeldung angezeigt und erneut zur Eingabe aufgefordert. Mit sig = 0 wird ein Wert ohne Vorzeichen beginnend mit einer Ziffer erwartet. Bei ungleich 0 muss die Eingabe mit „+“ oder „-“ anfangen.
#include <io_funktionen.h>
unsigned long in_value;
in_value = get_18d(„\r\n 18 Bit = “, 1, 4);



Beispiele mit Long Ein- Ausgabe


  • . Addition long mit hexadezimaler Ein- Ausgabe: summe36in.c
  • . Addition long mit dezimaler Ein- Ausgabe: summe36dez.c
  • . Multiplikation 36 Bit = 18 Bit * 18 Bit hexadezimal: mul181836.c
  • . Multiplikation 36 Bit = 18 Bit * 18 Bit dezimal: mul181836d.c


SpartanMC