Assembler Label WinAVR

Gast #1685837
Lesenswert?
• ▲
▼
Moin,

und schon gehts los:
Kann ich beim WinAVR Assembler ein "relatives" Label setzen.
Zur erklärung der folgende Code:
[avrasm]
.macro SaveContext
  push 30
  push 31
  ldi 30, lo8(SaveContext_Exit)
  ldi 31, hi8(SaveContext_Exit)
  rjmp _SaveContext
  SaveContext_Exit:
.endm
.macro RestoreContext
  ldi 30, lo8(RestoreContext_Exit)
  ldi 31, hi8(RestoreContext_Exit)
  rjmp _RestoreContext
  RestoreContext_Exit:
  pop 31
  pop 30
.endm
_SaveContext:
  push 0
        ...... usw.
  push 28
  push 29
  in work0,_SFR_IO_ADDR(SREG)
  push work0
  ijmp

_RestoreContext:
  pop work0
  out _SFR_IO_ADDR(SREG),work0
  pop 29
  pop 28
        ........ usw.
        pop 0
  ijmp
[\avrasm]

Die beiden Makros werden jeweils in verschiedenen Funktionen zum 
sichern/ und wiederherstellen der Register aufgerufen. Um den Flash 
etwas zu schonen wird in den Beiden Makros zur passenden _Funktion 
gesprungen.
Die Rücksprungadresse liegt im Z-Register.
Wenn ich jetzt aber die Makros in belibige Fuktionen schreibe wird 
sicherlich Fehler beim Compelieren geben da das Label nun mehrmals 
definiert ist.
Kann man die Label irgendwie relativ zum Makro definieren??

Danke für Antworten
#1685876
Lesenswert?
• ▲
▼
Du kannst auch in mehrfach verwendeten Makros Labels verwenden.

Der Assembler nummeriert diese einfach durch, so dass bei jeder 
Verwendung des Makros ein individuelles Label entsteht.

Sieh dir mal die beim Assemblieren entstehende MAP-Datei an, da wird das 
deutlich.

Ich vermute, dass in lo8(RestoreContext_Exit) das Label 
RestoreContext_Exit korrekt (mit Nummerierung) übersetzt wird, bin aber 
nicht ganz sicher.

Grüße, Peter
Gast #1685883
Lesenswert?
• ▲
▼
So gehts:
1
.macro RestoreContext
2
  ldi 30, lo8(1f)
3
  ldi 31, hi8(1f)
4
  rjmp _RestoreContext
5
  1:
6
  pop 31
7
  pop 30
8
.endm

Danke für den link.

Das vorherige hat nicht funktioniert.
Fehler: Label mehrfach definiert.
Wird also nicht automatisch nummeriert.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.