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.