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