Forum: Mikrocontroller und Digitale Elektronik Terminal Steuerzeichen C - für tabellarische Ausgabe


von Myjestic E. (myjestic)


Lesenswert?

Hi,

möchte von meiner UART (mit GCC) aus eine Tabelle auf dem Terminal 
darstellen. Dabei sollen die einzelnen via printf ausgegebenen Zeilen 
aber nicht durchgescrollt werden, sondern nach Ausgabe der Tabelle 
wieder oben beginnen.
Der Bildschirm auf dem Terminal soll also gelöscht so das ein 
"stehendes" Bild entsteht. Mit Steuerzeichen habe ich es schon getestet. 
Leider bin ich weder mit HTERM noch mit Realterm zu einem Ergebnis 
gekommen.

Vielen Dank für die Hilfe.

von Sven P. (Gast)


Lesenswert?

Dazu gibt es Terminal-Steuersequenzen. Es setzt allerdings voraus, dass 
man auch vor einem ordentlichen Terminal sitzt (VT100 oder dgl. 
Emulator); dazu gibts dann z.B. die ncurses-Bibliothek, die sich um den 
Rest (Cursor bewegen, löschen, einfügen, Farben) kümmert.

Wenn du auf dem AVR sitzt, wirst du dich vermutlich auf einen 
Terminaltypen festlegen müssen, da sich die Steuersequenzen teilweise 
von Terminal zu Terminal unterscheiden (darum halt 
ncurses/termcap/terminfo). Such mal nach VT100-Steuersequenzen, die sind 
recht simpel gehalten.

von Volker Z. (vza)


Lesenswert?

Das Stichwort heisst: Terminal-Emulation.
Such dir ein Terminal raus was die Programme können. zB. VT100
Stelle es drauf ein und benutze die entsprechenden Escape-Sequenzen.

Einer der noch vor Hardwareterminals gessesen hat.

von Harry S. (littlegonzo)


Lesenswert?

Schau mal hier nach Debug Ausgabe von mir, ist ein kleines Programm 
welches die Steuerkommandos für so eine positionierung (X,Y) für ein 
VT100 Terminal mit drin hat. Du kannst ja die Serielle Ausgabe für 
irgendeinen Pin weglassen. Das Programm diente eigentlich dazu eine 
Seriele Debug Ausgabe auf irgendeinem Pin zu machen falls man mehrere 
braucht.

Gruß
Littlegonzo

von Myjestic E. (myjestic)


Lesenswert?

Mit Putty gehts, aber leider nicht so wie ich es mir vorstelle. Flackert 
sehr, weil Baudrate wohl zu niedrig mit 56700. Habe mich vorhin 
verschrieben, der C-Compiler ist ICCPROP und der gibt höhere 
Übertragungsraten nicht her... Und selbstschreiben mag ich das jetzt 
nicht.

Trotzdem Danke

von Karl H. (kbuchegg)


Lesenswert?

Kai I. schrieb:
> Mit Putty gehts, aber leider nicht so wie ich es mir vorstelle. Flackert
> sehr,

Soll das ein ständiger Life-Update werden?

Wenn ja, dann darfst du nicht einfach nur den Bildschirm löschen.
Da musst du etwas raffinierter vorgehen.

Am Anfang werden die konstanten Texte ein mal hingemalt
und dann bei jedem Update-Durchgang nur die sich veränderten Werte 
übermalt.

von Myjestic E. (myjestic)


Lesenswert?

Mh okay das klingt ja erstmal einleuchtend.
Heißt das, ich muss den Cursor immer genau an die entsprechende Stelle 
setzen oder an den entsprechenden Zeilenanfang?

Wenn ja, wie?

von Karl H. (kbuchegg)


Lesenswert?

Das Stichwor lautet immer noch Terminal Emulation.

Da gibt es auch Escape Sequenzen mit denen man den Cursor an eine 
bestimmte Stelle jagen kann.

(Aber aufpassen: Wenn du Zahlenfelder hast, hast du das gleiche 
'Problem' wie bei einem LCD. Du musst sicherstellen, das auch wirklich 
alle POsitionen der vorhergehenden Zahl übermalt werden)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eine einfachere Alternative wäre die Beibehaltung der zyklischen Ausgabe 
von allem, jedoch ohne Löschen des Bildschirms, sondern stattdessen mit 
"Cursor home".

Das sieht allerdings in den Fällen beknackt aus, in denen 
unterschiedlich lange Zeilen oder unterschiedlich viele Zeilen zwischen 
zwei Durchläufen ausgegeben werden. Und es ist natürlich ineffizienter, 
weil auch feste Texte jedesmal wieder übertragen werden müssen.

Allerdings muss bei einer zyklischen Aktualisierung vieler einzelner 
Textfelder auch deren Cursorposition jedesmal einzeln neu gesetzt 
werden, so daß man auch hier einen gewissen "Verschnitt" erhalten kann.

Was letztendlich effektiver ist, hängt vom Einzelfall des verwendeten 
Bildschirminhaltes ab.

Ist das Verhältnis* statischer Text/dynamischer Text größer 1, lohnt die 
Einzelausgabe mit Cursorpositionierung, ist das Verhältnis kleiner, ist 
eine Komplettausgabe effizienter.


*) ganz genau: Eine komplette Bildschirmausgabe mit statischem Text und 
dynamischem Text ohne Positionierung und eine komplette 
Bildschirmausgabe mit dynamischem Text mitsamt Positionierung

von Myjestic E. (myjestic)


Lesenswert?

Einwandfrei, habe beides gerade getestet und nutze jetzt erstmal die 
Cursor Home ESC-Sequenz. Werde mir jetzt ein paar #defines und 
Funktionen zusammenbauen, dann habe ich eine Deluxedebugausgabe.

Für andere, die mal in diesem Thread landen.

1. Putty
2. #define CURSOR_HOME        printf("\033[H")

Danke nochmal!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.