Programm mit Inline-Assembler: Fehler beim kompilieren

OP #5722802
Lesenswert?

Hallo,
ich bin gerade dabei ein Programm zu schreiben mit dem sich der AtTiny85 
selbst programmieren können soll. Um u.a. den Z-Pointer richtig zu 
setzen brauche ich (Inline-)Assembler. An diesem Punkt scheitere ich 
derzeit jedoch noch. Genauer: Die Z-Pointerregister(r30/r31) richtig zu 
setzen, und die Programmdaten in den Registern r00 und r01 
bereitzustellen. Ich bin, für den Inline-ASM bisher nach folgendem 
"Kochrezept" vorgegangen: 
https://rn-wissen.de/wiki/index.php?title=Inline-Assembler_in_avr-gcc#Zugriff_aufs_SRAM

Mit dem Code:
1
  asm volatile(
2
    
3
    "ld r30,Adr_MSB \n\t" 
4
    : "=r" (...)
5
  );

 kompilieren will zeigt(e) er mir entweder den Fehler "expected 
primary-expression before '...' token" oder
"undefined reference to 'Adr_MSB' " (wenn ich statt '...' 'Adr_MSB' 
geschrieben hatte).

So wirklich kann ich mir die Fehler nicht erklären, es ist allerdings 
auch schon etwas länger her wo ich Assembler benutzt habe.

Mit dem Code
1
  asm volatile(
2
    
3
    "ld r30,Adr_MSB \n\t" 
4
    : "=r" (Adr_MSB)
5
    "ld r31,Adr_LSB \n\t"
6
    : "=r" (Adr_LSB)
7

8
    "ld r00,DataLOW \n\t"
9
    : "=r" (DataLow)
10
    "ld r01,DataHIGH \n\t"
11
    : "=r" (DataHigh)
12

13
  );
bekomme ich derzeit den Fehler: " expected ')' before string constant " 
und Zeile "ld r31,Adr_LSB \n\t"  ist rot markiert. Die Variablen 
Adr_MSB, Adr_LSB, DataLow und DataHigh sind global bekannt und vom Typ 
char.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren