AVR-GCC Assembler, Programm- & Byteadresse

Gast #4850269
Der GCC-Assembler liefert mit hi8(status0_adr) die Byteadresse des 
Labels. Für meine Zwecke wird jedoch die Programmadresse benötigt.

Versucht habe ich:
1
.byte pm_hi8(status0_adr)

1
.byte pm(hi8(status0_adr))

Beide mit der Fehlermeldung:
junk at end of line, first unrecognized character is `('

Ebenso funktionieren arithmetische Operationen nicht:
1
.byte hi8(status0_adr / 2)

invalid operands (.text and ABS sections) for `/'



Was muss ich tun, um aus einem Label die Programmadresse zu erhalten?


1
...
2

3
status0_adr:
4

5

6
 RJMP StatusLoop  
7

8
...
9

10
.text
11
.align 8
12
atatus:
13
.byte hi8(status0_adr), lo8(status0_adr)
14
.byte hi8(status2_adr), lo8(status2_adr)
Gast #4850395
Hallo,

wenn es sich um eine Adresse im Flash handelt, dann sind diese, wie im 
Datenblatt eines Atmel AVR 8Bit zu lesen ist, an Wordadressen 
ausgerichtet.
Somit muss mal mit meinem Compiler/ Assembler schreiben:
1
; bei 24Bit Pointer im Flash!
2
ldi _R16,byte1(2*<label>)
3
ldi _R17,byte2(2*<label>)
4
ldi _R18,byte3(2*<label>)
Persönliche Seite #4850533
Falls es Linker Stubs braucht, Word-Adresse:
1
.word gs(symbol)
ansonsten, Word-Adresse:
1
.word pm(symbol)
Einzelne Bytes der Word-Adresse laden geht nur im Code, aber nicht für 
Daten:
1
    ldi r16, pm_lo8(symbol)
2
    ldi r17, pm_hi8(symbol)
3
    ldi r18, pm_hh8(symbol)
4

5
    ldi r20, lo8(gs(symbol))
6
    ldi r21, hi8(gs(symbol))
Und für die Byte-Adresse:
1
    .byte lo8(symbol)
2
    .byte hi8(symbol)
3
    .byte hh8(symbol)
4
    .balign 2

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.