Hi Leute,
also ich möchte mein Mikrocontroller mit einem Command Line Interface
erweitern. Da gibt es die Variante 1) ich sende per UART den Befehl und
erhalte danach dann die Antwort (z.B. über HTerm, cutecom).
Und dann gibt es die Variante 2) da kann man wie in der Linux Shell
direkt sehen was man eingibt und auch mit Backspace den Befehl vor
Absenden noch editieren etc.. Das kenne ich in Zusammenhang mit putty
und einigen Ethernet Switchen.
Ich hoffe ihr wisst was ich meine. Gibt es für Variante 2) einen Namen?
So ganz klar ist mir das nämlich noch nicht wie das funktioniert.
Wahrscheinlich wird mit jedem tippen der ganze Output neu geschrieben?
HappyNuYear schrieb:> Gibt es für Variante 2) einen Namen?
Keinen genormten, aber local echo trifft es ganz gut. Bei einem
ernstzunehmenden Terminal-Programm kann man das einstellen. Wenn der
Empfänger die Daten als Antwort zurücksendet (was fast immer der Fall
ist, z.B. bei einem Modem) sollte man das abschalten, damit man nicht
alles doppelt sieht (das liegt dann nicht an Silvester).
Georg
Bei 2 läuft zusätzlicher ein Zeileneditor auf dem Controller. Der
sendet die empfangenen Zeichen zurück (echo) und interpretiert einige
davon als Editierkommandos (z.B. Backspace = letztes Zeichen löschen).
Hier mal ein einfaches Beispiel:
Ich habe mal ein Beispiel angehängt.
Es ist sogar möglich mit Cursortasten Menüpukte auszuwählen.
Es muss irgendeinen Standard/Protokoll geben, welches da im Hintergrund
läuft und genau dazu suche ich die Bezeichnung.
Scheinbar wird der Output ständig refreshed also muss es irgendwelche
Sonderkommandos geben die Putty empfängt und daraufhin refreshed.
Der "Standard" nennt sind ANSI-Escapesequenzen[1]. Ein Programm auf dem
Controller malt die Menues, wertet die Cursurtasten aus, malt
entsprechend neu, steuert den Cursor, usw, usf.
Ein Paket, das einem das erleichtert, nennt sich ncurses[2]. Auf
kleineren Mikrocontrollern wirst du das aber kaum zum Rennen bekommen.
[1] https://de.wikipedia.org/wiki/ANSI-Escapesequenz
[2] https://de.wikipedia.org/wiki/Ncurses
HappyNuYear schrieb:> Es muss irgendeinen Standard/Protokoll geben, welches da im Hintergrund> läuft und genau dazu suche ich die Bezeichnung.
Meinst du Terminal Emulationen wie VT-100,VT200 oder VT-52? Dabei kann
der Host das Terminal steuern inkl. Position, Farbe usw.
Suche doch mal nach "ANSI-Escape-Sequenzen". Da gab es früher für
bestimmte Terminals diese Steuersequenzen, mit denen du auf dem
Bildschirm verschiedene Sachen machen kannst.
HappyNuYear schrieb:> Es ist sogar möglich mit Cursortasten Menüpukte auszuwählen.> Es muss irgendeinen Standard/Protokoll geben, welches da im Hintergrund> läuft und genau dazu suche ich die Bezeichnung.
Ansi Escape Sequenzen
https://en.wikipedia.org/wiki/ANSI_escape_code
HappyNuYear schrieb:> Scheinbar wird der Output ständig refreshed
Nein, das wird da nicht gemacht. Wie aber bereits genannt, werden hier
Escape-Sequenzen verwendet. Der von Dir beobachtete Refresh, erfolgt
durch Cursorpositionierung und Überschreiben.
HappyNuYear schrieb:> also ich möchte mein Mikrocontroller mit einem Command Line Interface> erweitern. Da gibt es die Variante 1)...
Ach wo. Es geht viel viel viel einfacher: Dein Terminalprogramm im PC
sendet die Zeichen, die du eintippst, zum µC. Dort ist ein kleines
Kommandoprogramm, das diese Zeichen in einen Puffer (üblich sind 80
Zeichen) einlaufen läßt und dabei einige wenige Sonderzeichen passend
interpretiert. Zum Beispiel 8 (=BS), was das letzte Zeichen löscht.
Und dieses Kommandoprogramm sendet die empfangenen Zeichen auch wieder
zurück an den PC. Dort kannst du sie dann in deinem Terminalprogramm
sehen. Und wenn die Zeile komplett ist (CR als Zeilenende), dann wird
sie ausgewertet - je nachdem, was du da an Kommandos eingebaut hast.
Viel mehr braucht es nicht, um eine Kommandozeile im µC zu
implementieren.
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