Forum: Compiler & IDEs char enter, neue zeile?


von tronic (Gast)


Lesenswert?

hallo nochmal,

ich habe folgende Variable:

char s[]="Fensteralarm 1:\"ON\"\n ";

dies zeige ich am Hyperterminal über die UART an,
jedoch wird mir das \n nicht ganz so interpretiert wie erwünscht,
ich möchte das eine neue Zeile angefangen wird, und der Cursor also
auch ganz am Anfang der Zeile anfängt, und nicht an der Position von
der vorigen Zeile...

ist das möglich? gibts ähnlich wie "\n" auch was für return oder
so?
gibts irgendwo eine übersicht?

thx
tronic

von Jürgen S. (jsachs)


Lesenswert?

Hallo,

Ein Terminal braucht, wie du schon vermutest eine Carrige Return UND
ein Linefeed am Ende.
Wenn du also deine Variable wie folgt erweiterst, sollte es gehen:
char s[]="Fensteralarm 1:\"ON\"\r\n ";

"\r" entspricht 0x0D.

Gruss
Juergen

von Thomas (Gast)


Lesenswert?

Hallo,

vernünftige Terminalprogramme und sogar Hyperterminal (Eigenschaften |
ASCII Einstellungen) erlauben die Einstellung, dass ein \n als \r\n
interpretiert wird.

Es gibt im übrigen einige schöne, leistungsfähige und freie
Alternativen zum Hyperterminal. Quäl dich mit dem nicht rum, wenn es
nicht unbedingt sein muss ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Außerdem kann man noch in der Ausgaberoutine allen \n ein \r
voranstellen.  Das entspricht ungefähr dem, was die Terminal-
treiber unter Unix machen: intern wird alles mit \n geschrieben,
erst an der Grenze von Unix zur Außenwelt erfolgt die Anpassung.

von Günter R. (galileo14)


Lesenswert?

@Thomas:

Welches Terminalprogramm empfiehlst Du denn? URL?

Günter

von Peter S. (peter) Benutzerseite


Lesenswert?

Ich würde dir HTerm (http://www.der-hammer.info/terminal) empfehlen.
Ich habe damit sehr gute Erfahrungen gemacht.

von tronic (Gast)


Lesenswert?

vielen Dank noch!

von Günter R. (galileo14)


Lesenswert?

@Peter und Thomas:

HTerm kenne ich schon lange, das ist ein super Programm zu Testen von
Mikrocontroller-Schaltungen und zum Mitprotokollieren. Es ist aber
keine Alternative zu HyperTerm, da es einen ganz anderen Ansatz
verfolgt. Für "tronic" ist es dennoch sicher gut geeignet.

HTerm stellt Sende- und Empfangsdaten in getrennten Fenstern dar, mit
ASCII-, Hex-, Dez- und Bin-Format, jeweils separat schaltbar, mit
vielen Protokollen (user-konfigurierbar), Zeichenzähler und -Trigger,
Auto-Modi etc.. Ganz besonders praktisch ist, daß man die meisten
Eigenschaften direkt an der Oberfläche ändern kann (da ist HyperTerm
super-umständlich).

HyperTerm jedoch stellt Sende- und Empfangsdaten im gleichen Fenster
dar und erlaubt somit eine Kommunikation mit einem Terminalmodus, den
man im Mikrocontroller programmieren kann; da gibt es dort dann eine
Kommandozeile, in die man Befehle und Parameter eintippen kann, das
ganze verhält sich dann in etwa so wie früher ein PC unter MS-DOS. Das
kann zum Debuggen auf höherer Ebene sehr praktisch sein. Aber es
erfordert, daß sich das Programm (hier HyperTerm) so verhält wie früher
ein "Smart Terminal" wie z.B. VT52, VT100, TTY etc.). Das kann HTerm
nicht (und ist dafür auch garnicht gedacht!).

Ich suche schon länger nach einer Alternative für HyperTerm, das (im
gleichen Fenster) auch Hex-Codes akzeptieren kann (ohne
Alt/KleinerTastenblock) und die Einstellungen ähnlich wie bei HTerm
einzustellen erlaubt (und ohne die langweilige zeitverbratende
Weltkugel beim Start). Kennt jemand so ein Programm?

Günter

von tronic (Gast)


Lesenswert?

jetzt hab ich doch noch eine Frage,
wie krieg ich den Cursor im Hypeterminal eine Zeile rauf oder runter,
oder auch nur ein zeichen links, rechts - ich möchte dadurch z.B ein
Anzeige Fensteralarm1 "ON" auf Fensteralarm "OFF" wechseln ohne den
ganzen Text Fensteralarm "OFF" nochmals in einer Charvariable zu
speichern, geht das?

von Karl H. (kbuchegg)


Lesenswert?

Wenn Hyperterminal auf ANSI eingestellt ist, dann schickst
du ihm die ANSI-Escape Sequenzen:

http://adm.lacitec.on.ca/~ymicha/mcours/micro1/escape.html

von tronic (Gast)


Lesenswert?

und wie integrier ich das im string?

also char s[10]="???Zeile runter, cursor rechts usw."

von Karl H. (kbuchegg)


Lesenswert?

Das sind ganz normale Texte!

Lediglich das Escape Zeichen musst du extra darstellen, da es
dafür im Zeichensatz kein Symbol gibt. Geht aber mit einer
Fluchtsymboldarstellung als Hex-Code:

char CursorRight[] = "\x1B[1C";
char CursorLeft[] = "\x1B[1D";

oder aber:
char* CursorDown = "\x1B[1B";
char* CursorUp   = "\x1B[1A";

von tronic (Gast)


Lesenswert?

tiptop, thx.

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.