Du könntest die Daten in eine Section legen, die nicht vom StartUp-Code initialisiert wird und diese Daten dann von Hand initialisieren abhängig vom RESET-Typ (PowerDown, ExternalReset, BrownOut, WatchDog, ...)

Das ist nur dann sinnvoll, wenn du sicherstellen kannst, daß sich durch die Programmänderung die Datenablage nicht ändert!

Wenn die Daten ab Adresse 90 liegen und nach der Änderung ab Adresse 91 weil du irgendwo neue Daten eingeführt hast, wird es nicht mehr funktionieren.

Den Reset-Status siehst du in MCUSR bzw. MSUCSR.

Wie Daten in einen Speicherbereich gelegt werden, der nicht vom Startup-Code gesetzt wird, ist abhängig von deinem Compiler. Bei avr-gcc ist es die Section ".noinit".