www.mikrocontroller.net

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


Autor: Myjestic Elek. (myjestic)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Harry S. (littlegonzo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Myjestic Elek. (myjestic)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Myjestic Elek. (myjestic)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Myjestic Elek. (myjestic)
Datum:

Bewertung
1 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.