wie verhält sich der Controller (ATMega8, Watchdog aktviert), wenn ich ein Array definiert habe und sporadisch (!) über die Bereichsgrenze das Array schreibe oder lese?
Das kommt darauf an, was Du mit den gelesenen Daten anstellst.
Grundsätzlich ist der Speicher linear - strenggenommen kennt die Hardware ja gar keine Datenstrukturen. Sind (im SRAM) alles Bytes. Die Hochsprache könnte ggf prüfen, ob ein Zugriff innerhalb der definierten Grenzen stattfinden würde oder nicht, und dann bereits beim kompilieren meckern - aber das nicht immer.
Der SRAM ist also linear - irgendwo wird durch die IDE also der Bereich des Arrays festgelegt.
Die Adressen drumrum können entweder durch andere Variablen verwendet werden, oder eben ungenutzt sein. In jedem Falle kann also irgendwas von dort gelesen werden - inwiefern die jetzt allerdings weiterverarbeitet werden, und ob das Sinn macht, und was sich daraus für Folgen ergeben, bestimmt Dein Programm...
Noch komplizierter wird's, wenn Du irgendwas irgendwohin schreiben läßt - die dort eventuell liegenden Variablen erhalten so plötzlich neue (unerwartete) Daten...
Und noch einen Schritt weitergedacht kannst Du möglicherweise auch im Speicherbereich der I/O- (oder gar der Rechenregister) landen (i.A. sind die 32 Rechenregister auf SRAM-Adresse 0x0000..0x001F, danach folgen 64 I/O-Register (0x002F..0x005F), je nach Controller dann noch Extended I/O-Register, und erst danach der eigentliche SRAM.
Schreibzugriffe in den I/O-Bereich manipulieren direkt die periphäre Hardware, klar - aber bei einigen Registern löst bereits das lesen irgendwas aus (beim ADC blockiert das Lesen von ADCL updates des Result-Registers, bis auch ADCH ausgelesen wurde (die beiden Register werden quasi solange eingefroren); bei 16Bit-Registern der Timer gibt's einen ähnlichen Effekt.