Hi
Naja - ich schreibe das neue Byte irgend wo in den Speicher - zumindest sollte das Byte genau dahin kommen, wo zuvor das Quell-Byte gelesen wurde.
Nur wird Das NUR ausgeführt, wenn ich dieses Serial.print(); im Code drin habe - darin gebe ich die Variable NICHT aus bzw. muß Diese nicht ausgeben, damit Sie überlebt.
Sobald keine serielle Ausgabe in der Funktion steht, bekomme ich das Byte nicht umgedreht.
Da der Assembler-Quelltext als volatile definiert ist, sollte Dieser erhalten bleiben.
Da das ausgelesene Byte im Assembler-Quelltext verarbeitet wird, sollte auch Das bleiben.
Zum Schluß wird das Byte wieder im SRam abgelegt - kA, ob auch Teile des ASM-Code optimiert werden können - aber Da haben wir wohl verschiedene Ansichten vom Optimum - also der Compiler und ich.
Da ist Assembler 'gerechter' - da wird ALLES so gemacht, wie ICH Das geschrieben habe - dafür bin ich aber auch zu 100% immer selber schuld.
Vll. hat ja noch Wer eine Idee, wodurch diese Besonderheit ausgelöst wird, welche Interner Da rein spielen.
Die Funktion bekomme ich hin - so oder so (zur Not auch mit dem Serial.print() ... dem µC muß ja Keiner zuhören).
Äääh - vll. kommt mir gerade ein Gedanke:
Bei ISRs declariert man innerhalb manipulierte Variablen auch als volatile - vll. ist dem Compiler der ASM-Quellcode 'so was von egal', daß Er hinter dem ASM-Bereich nur sieht 'aha, jetzt soll das Byte wieder zurück' und entfernt sowohl das Lesen wie das Schreiben, da - für Ihn - sich Nichts ändert?
... dann muß ich den Arduino-Pointer direkt im Assembler bearbeiten
...
Erklärt zwar immer noch nicht, was Serial.print() dabei 'besser' macht, aber immerhin ein Lichtblick.
MfG