Hallo,
im
Beitrag "Re: Compilerbug bei AVR-GCC ?: Stack Pointer und Interrupts"
wurde das Problem diskutiert, daß der VMLAB Simulator in der vom
Compiler oft erzeugten Sequenz
cli
out SP_H, r?
out SREG, r?
out SP_L, r?
die Interrupts schon direkt nach dem "out SREG" wieder freigibt, und
nicht erst einen Befehl später, wie es sein sollte.
Dadurch kann es passieren, daß bei der Simulation (und nur dort) der
Stackpointer einen falschen Wert hat.
Als Workaround habe ich mir ein kleines Programm geschrieben, daß im
.hex File die Reihenfolge vertauscht:
cli
out SP_H, r?
out SP_L, r?
out SREG, r?
Die Simulation läuft jetzt ohne Stackpointerprobleme durch.
Für die Realität bedeutet es, daß die Interruptfreigabe einen Takt
später kommt, bzw. daß Simulation und Realität einen Takt auseinander
liegen.
Das Workaround-Programm habe ich angehängt, der Sourcecode enthält noch
Hinweise, wie man es in den Build-Prozess von VMLAB einbinden kann.
Viele Grüße,
Peter H.