Offenbar verwendest du eine nicht sonderlich aktuelle Version von WinAVR
bzw. avr-libc. Wäre nett, darauf hinzuweisen...
Das Problem ist, daß das asm-Schnippel in einer Inline-Funktion steht
und der Fehler ohne Kontext nicht reproduzierbar ist.
Vermutlich tritt er nur zusammen mit hoher Registerlast auf, da der
Schnippel viele obere Register verwendet.
Du kannst versuchen die Registerlast auf die obereg GPRs etwas zu
reduzieren, indem du folgendes inline Asm verwendest:
1 | asm volatile (
|
2 | ".%=_start:" CR_TAB
|
3 | "subi %A2,1" CR_TAB
|
4 | "sbci %B2,0" CR_TAB
|
5 | "brlt .%=_finished" CR_TAB
|
6 | "%~call __eeprom_read_byte_" _REG_LOCATION_SUFFIX CR_TAB
|
7 | "st z+,__tmp_reg__" CR_TAB
|
8 | "rjmp .%=_start" CR_TAB
|
9 | ".%=_finished:"
|
10 | : "+x" (pointer_eeprom),
|
11 | "+z" (pointer_ram),
|
12 | "+d" (size)
|
13 | :: "memory");
|