Stichwort volatile:
dataRX[] riecht danach, also ob es im Interrupt "gefüllt" wird, oder?
falls das so ist, schlägt der Optimierer zu:
dataRX ist eine Globale Variable, und damit mit 0 initalisiert.
Da der Compiler keine Ahnung haben kann, wann ein Interrupt aufgerufen
wird, geht er davon aus, dass er nicht statt findet, und folglich
dadurch keine globalen Variablen geändert werden. Das nimmt sich der
Optimierer zu Herzen und meint im Vorraus zu wissen, dass alle
Lesevorgänge auf das Array 0 liefern, und man sie deshalb einsparen
kann.
-> durch ein gezieltes "volatile" sagst du dem Compiler, dass er bei
dieser Variable keine solchen Annahmen treffen darf.