www.mikrocontroller.net

Forum: Compiler & IDEs Kommentare in .S Dateien


Autor: T.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe gerade etwas merkwürdiges entdeckt und kann mir keinen Reim 
darauf machen.

Aus Geschwindigkeitsgründen habe ich in meinem aktuellen Projekt eine 
eigene Datei mit handgeschriebenem ASM-Code erstellt welche alle 
Zugriffe auf ein T6963 GLCD erledigt. Der Dateiname überrascht keinen: 
t6963c.S

Nun ist es so, das wenn in einem Kommentar, also nach ';' in der 
gleichen Zeile, ein  '\' steht, die folgende Zeile nicht übersetzt wird. 
Und auch nur dann wenn '\' als letztes Zeichen da steht. Folgt ein 
weiteres, ist alles ok.

Beispiel:

.global t6963c_clear
.func t6963c_clear

t6963c_clear:
; Screen#0 löschen
    ldi r20, 0x00                   ;
    ldi r21, lo8(0x0000)            ; L \
    ldi r22, hi8(0x0000)            ; H / Startadresse
    ldi r23, lo8(0x1000)            ;
    ldi r24, hi8(0x1000)            ;
    rjmp t6963c_fill_mem            ;

.endfunc

Diese Zeile
    ldi r22, hi8(0x0000)            ; H / Startadresse
wird einfach nicht übersetzt.

Ändere ich diese Zeile
    ldi r21, lo8(T6963C_SCR_0_START); L
oder in
    ldi r21, lo8(T6963C_SCR_0_START); L \ Startadresse

funktioniert alles wie erwartet.

Eine kleine Ewigkeit habe ich gesucht um das zu finden.

Die Doku http://www.nongnu.org/avr-libc/user-manual/index.html habe ich 
vorwärts und rückwärts gelesen.

Hmm. Muß ich mir diese Schreibweise in den Kommentaren abgewöhnen 
und/oder habe ich etwas in der Doku übersehen?

Torsten

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.S Dateien werden durch den C-Präprozessor gejagt und für den ist \ am 
Zeilenende ein Hinweis den Zeilenwechsel zu ignorieren und die nächste 
Zeile anzuhängen. Dadurch wird aus

asm 1 ; \
asm 2

das entstehen

asm 1 ; asm 2

D.h. asm2 landet im Kommentar.

Wenn du den C-Präprozessor nicht verwenden willst, achte auf .s als Typ 
des Quellcodes.

Autor: T.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan

Das die Dateiendung eine Rolle spielt, d.h. *.s != *.S habe ich irgendwo 
schon einmal gelesen. Mehr in Richtung C++ war bis jetzt meine 
Vermutung.

Bekannt ist mir auch das der Präprozessor in einer ASM-Datei Hand 
anlegt.

Nur das auch Kommentare ausgewertet werden hielt ich bis heute für 
unmöglich.

Nun gut, Bug oder Feature. Meine Kommentare muß ich wohl ändern. ;)

Danke für den Hinweis.

Torsten

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

Bewertung
0 lesenswert
nicht lesenswert
Nein, es wird nicht ,,der Kommentar ausgewertet'', sondern es wird
durch den Präprozessor daraus ein langer Kommentar.  Der Präprozessor
läuft vor dem Assembler und weiß gar nicht, dass das jetzt gerade ein
Kommentar sein soll.  Du kannst das durch Anhängen eines Leerzeichens
verhindern, denn nur die Folge "\\\n" bewirkt das Zusammenfügen der
Zeilen, "\\ \n" würde es nicht bewirken.  Da man das folgende
Leerzeichen aber typischerweise im Editor nicht sieht, ist das wohl
eher hässlich.

Das Feature erlaubt es, Zeilen an beliebigen Stellen zu trennen,
du kannst also auch schreiben
t6963c_\
clear:

Du kannst dafür im Gegenzug auch normale C-Kommentare schreiben,
denn diese werden vom Präprozessor durch Leerzeichen ersetzt.  Damit
ließe sich dein Beispiel umschreiben auf:
t6963c_clear:
; Screen#0 löschen
    ldi r20, 0x00                   /*                   */
    ldi r21, lo8(0x0000)            /* L \               */
    ldi r22, hi8(0x0000)            /* H / Startadresse  */
    ldi r23, lo8(0x1000)            /*                   */
    ldi r24, hi8(0x1000)            /*                   */
    rjmp t6963c_fill_mem            /*                   */

Autor: T.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg

Danke für die ausführliche Erläuterung. :)
Auf die Idee die C-Kommentare auch in einer .S Datei anzuwenden bin ich 
gar nicht gekommen.

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.