mikrocontroller.net

Forum: Compiler & IDEs Was bedeutet diese Befehlszeile?


Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

hab da so ein kleinen Problem bezüglich einer Codezeile.
Ich verstehe sie einfach nicht. Habe sie schon auseinandergenommen und 
nur Teile davon ausgeführt aber irgendwie komme ich nicht dahinter. 
Vieleicht könnt ihr mir helfen.
printf("\x02R%.2X%.2X%.2X%.2X%.2X\x03\r", tag[0], tag[1], tag[2], tag[3], tag[4]);

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es werden fünf Variablen (tag[0]...tag[4]) ausgegeben, und zwar jeweils 
2-stellig in Hexadezimal mit Großbuchstaben (ohne Angabe der minimalen 
Feldbreite, deshalb keine Angabe vor dem Punkt). Am Anfang wird ein STX 
(0x02, Start of text)-Zeichen, ein 'R' und am Ende ein ETX (0x03, End of 
text) ausgegeben.

"Befehle" gibt es in C übrigens nicht, nur Anweisungen und Operatoren...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die \x02 und \x03 ergeben die ASCII-Zeichen <STX> und <ETX>, sowas
nimmt man gern für einfaches RS-232-Framing.

Das R wird 1:1 ausgegeben.

Die %.2X führen eine Hexadezimalwandlung durch, wobei als Genauigkeit
2 Stellen gefordert sind.  Das führt dazu, dass immer (mindestens)
zwei Stellen ausgegeben werden, ggf. halt mit 0 gefüllt in der 1.
Stelle.  Das Format %02X wäre ein Äquivalent dafür.  Die 10 hexadezi-
malen Stellen werden ohne Zwischenraum aneinander gefügt.

Das abschließende \r (ASCII <CR>) beendet den Datensatz.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Upps, das '\r' hatte ich glatt übersehen...

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten. Ich möchte nämlich den Inhalt der Variablen mit 
einem festen Wert vergleichen.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robin Tönniges wrote:
> Danke für die Antworten. Ich möchte nämlich den Inhalt der Variablen mit
> einem festen Wert vergleichen.
Und was hat das jetzt mit der Frage zu tun? Wäre mir neu, dass man mit 
printf irgendwas vergleichen kann...

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne. Aber ich wusste nicht was in den Variablen drin ist. Weil da die 
Ausgabe so krass formatiert war.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Formatierung der Ausgabe hat normalerweise niemals einfluss auf den 
Inhalt der Variable... Deshalb ist dieser printf-Ausdruck unerheblich 
für dein eigentliches Problem. Schau lieber mal von welchem Typ die 
Variablen sind und wo sie initialisiert/zugewiesen/geändert werden.

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
> Eine Formatierung der Ausgabe hat normalerweise niemals einfluss auf den
> Inhalt der Variable...

Das ist richtig. Aber ich kann ja nicht einfach in die Variable 
reingucken. Sondern muss es irgendwie ausgeben. Und wenn ich einfach

printf(tag[0]);

gemacht habe kam nichts raus.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robin Tönniges wrote:

> Und wenn ich einfach
>
> printf(tag[0]);
>
> gemacht habe kam nichts raus.

Vermutlich, weil dann der anderen Seite das <STX>-<ETX>-<CR>-Framing
fehlt.

Autor: Robin Tönniges (rotoe) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö wieso. Ganz normales Terminal benutzt. Häte auch ohne gehen müssen.

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.