Wie richtig: avrgcc inline assemler

Gast #3027974
Lesenswert?
• ▲
▼
Hallo zusammen,

ich bin ziemlich ratlos. Nach langem hin und her probieren
weiß ich leider nicht wie das gehen soll
1
int main(void) {
2
  uint8_t tmp;
3
  uint16_t addr = 0;
4
  while(1) {
5
    //__asm volatile("ldi r31, %B0" : : "0" ((addr >> 8) 0xFF));
6
    //__asm volatile("ldi r30, %1" : : "I" (addr & 0xFF));
7
    __asm volatile("lpm");
8
    __asm volatile ("ld %0, r0" : "=l" (tmp));
9
    addr += 1;
10
    PORTD = ~tmp;
11
    _delay_ms(100);
12
  }
13
}

Ich will Z pointer (r31:r30) mit addr laden, um danach mit lpm Befehl
den Flash auszulesen und das Ergebnis in r0 in tmp zu schieben und
am Port auszugeben.

Wie zum Teuf** lautet die richtige Syntax dafür?
Ich verstehe wohl nicht ganz was die "constraints" bewirken.
Mir scheint das gcc inline assembly "kind of" vermurkst ist.
Das was aktuell in den kommentierten Zeilen steht, ist mein letzter 
Versuch gewesen.

Mein Dank im Voraus.
Daniel
Gast #3028024
Lesenswert?
• ▲
▼
A. K. schrieb:
> daniel schrieb:
>> Wie zum Teuf** lautet die richtige Syntax dafür?
>
> #include <pgmspace.h>
> ... = pgm_read_byte(addr);

Der Vorschlag hilft sicher vorübergehend.

>Also ich würd dir glatt anraten das als Funktion in eine Assemblerdatei
>auszulagern.
>GCC Registerkonventionen kennste?

Nicht wirklich. Ich müsste mir das anlesen.

Ich halte gcc inline asm insofern für bessere Lösung, weil ich dieses
Wissen auch bei ARM einsetzen gedenke.

Kennt jemand vielleicht die "inline" Lösung?

Gruß,
Daniel

Antwort schreiben

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.

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.