Inline-Assembler ändert Wert nur mit Serial.print

Hi

Das Dutzend ist es nur, weil der Compiler mir keine Schleife erlaubt - naja, dafür sinkt die Ausführungszeit, da keine unnötigen Sprünge nötig sind.
Mir ist schon klar, daß der Compiler brauchbaren Assembler generiert - dafür ist Er ja da - nur sind wir uns noch nicht einig, Wer hier das Sagen hat :slight_smile:
... oder bestimmen darf, was gemacht wird (ok, Das macht der Compiler)

Mir geht es hier schlicht darum, warum dieses (egal womit programmierte) Serial.print das Verhalten des Programm so beeinflusst.

Habe Es noch nicht geschafft, der Variable ein volatile mitzugeben.

'avr-objdump' werde ich Mal Google nach befragen, wäre mir in den Menüs nicht aufgefallen, denke also, daß Das ein separates Programm o.Ä. ist.

Bei meinen Programmen kommt Es ja nicht auf die ultimative Geschwindigkeit an - obwohl es mich z.B. ärgert, wenn in fremdem Code eine identische Ausgabe in zwei IF-Bereichen steht ... Da kann man den gemeinsamen Teil auch VOR (und auch NACH) der IF-Abfrage ausgeben und nur den unterschiedlichen Kram eben situationsbedingt.
Da ticke ich aber eben 'eigen'.

Mir sind die Vorteile einer Hochsprache ja nicht ganz unbekannt - der normale Arduino-Code läuft auf so ziemlich jedem Arduino (wenn die Beinchen halt passen) - sobald Da Assembler im Spiel ist, haben vll. noch die ganzen AVR ein Fuß in der Tür, da dort die Assembler-Befehle wohl identisch sind (vll. abgesehen, daß ein 'mul' beim ATtiny zu Schluckauf führt).
Die anderen verbauten µC sind mir bis dato völlig unbekannt und werden wohl, wenn, kein Assembler von mir sehen :wink:

So, jetzt 'Mal schnell' der Variable ein 'volatile' anheften und schauen, was passiert ...

EDIT
Wenn die globale Variable zusätzlich als volatile declariert wird, funktioniert der Assembler-Schnipsel, wie gewünscht, auch ohne das Serial.print.

Denke mir, daß beim Abarbeiten des Serial.print nicht genug Ressourcen vorhanden sind und der eingelesene Quellwert temporär nicht mehr behalten werden kann - und danach, wo der Wert zurück geschrieben werden soll, wird Dieser erst erneut vom SRam ausgelesen und dann in die 'Variable' (aka Register) geschrieben, Die der Compiler gerade in diesem Moment für gut befindet.

MfG