avr schrieb:
> teilweise die Ramp Register verwalten muss. Geht er davon aus, dass sie
> geändert worden sind oder dass sie wiederhergestellt werden?
Dabei geht es nur um das RAMPZ Register, ds evtl. zusammen mit LPM
verwendet wird.
1) Wenn RAMZ nur fur den Flash-Zugriff verwendet wird, ist der Wert
egal, d.h. muß weder in einer ISR noch in einer normalen Funktion
gesichert werden. Jedes mal, wenn ein LPM Zugriff ansteht, setzt avr-gcc
RAMPZ wie er es brauch. Beispiel ist ein ATmega128.
2) Wenn RAMPZ auch für den RAM-Zugriff verwendet wird (z.B. ATXmega mit
RAM > 64 KiB), dann muß RAMPZ nach der Verwendung auf 0 gesetzt werden,
denn RAMPZ wird auch in LD[D] und ST[D] Z verwendet, und davor wird
RAMPZ eben nicht gesetzt. Allerdings wird RAMPZ in ISRs gesichert /
restauriert wenn es möglicherweise verwendet wurde, d.g. wenn Z
verwendet wurde.
__memx ist übrigens mehr als ein Attribut, nämlich ein Qualifier und
kann damit auch Teil von Adresszielen sein wie
const __memx char *p;