Hallo,
ich habe einen einfachen Parser für eine Schrittmotorsteuerung mit ATmega168 geschrieben, der etwa auf den Befehl "POS=1000" über serInp den Schrittmotor per StepDestCW etc. anlaufen lässt. Das funktioniert gut.
Jetzt habe ich aber das seltsame Phänomen, dass eine LongToStr- oder Int2Str-Wandlung zur Klartext-Ausgabe der aktuellen Position über serOut nicht mehr funktioniert (liefert nichts oder wilde Zeichenketten), sobald der Motor auch nur einen Schritt gelaufen ist - unabhängig, ob der Motor überhaupt dranhängt (dachte erst an Spikes oder dgl.), ob er läuft oder wieder steht.
Konnte den Fehler soweit lokalisieren:
Im Assemblerfile gibt es bspw. die Routine
Macht man testweise daraus:
läuft der Motor zwar nicht, aber der Fehler ist weg. Bei
läuft der Motor zwar auch nicht (klar!), aber der Int2Str-Fehler ist da! Scheint also nur mit FLAGS2 zu tun zu haben.
Kann es daran liegen, dass der Compiler das Register FLAGS2 auf der gleichen Stelle mit den Flags _F64StrInt und _STEPCW belegt?
Gruß, cm
ich habe einen einfachen Parser für eine Schrittmotorsteuerung mit ATmega168 geschrieben, der etwa auf den Befehl "POS=1000" über serInp den Schrittmotor per StepDestCW etc. anlaufen lässt. Das funktioniert gut.
Jetzt habe ich aber das seltsame Phänomen, dass eine LongToStr- oder Int2Str-Wandlung zur Klartext-Ausgabe der aktuellen Position über serOut nicht mehr funktioniert (liefert nichts oder wilde Zeichenketten), sobald der Motor auch nur einen Schritt gelaufen ist - unabhängig, ob der Motor überhaupt dranhängt (dachte erst an Spikes oder dgl.), ob er läuft oder wieder steht.
Konnte den Fehler soweit lokalisieren:
Im Assemblerfile gibt es bspw. die Routine
Code
SYSTEM.StepDestCW_X:
SET
BLD Flags2, _STEPDEST
BLD Flags2, _STEPCW
RJMP SYSTEM.StepAutoStart
SET
BLD Flags2, _STEPDEST
BLD Flags2, _STEPCW
RJMP SYSTEM.StepAutoStart
Macht man testweise daraus:
Code
SYSTEM.StepDestCW_X:
SET
RET ; testweise eingefügt
BLD Flags2, _STEPDEST
BLD Flags2, _STEPCW
RJMP SYSTEM.StepAutoStart
SET
RET ; testweise eingefügt
BLD Flags2, _STEPDEST
BLD Flags2, _STEPCW
RJMP SYSTEM.StepAutoStart
läuft der Motor zwar nicht, aber der Fehler ist weg. Bei
Code
SYSTEM.StepDestCW_X:
SET
BLD Flags2, _STEPDEST
BLD Flags2, _STEPCW
RET ; testweise eingefügt
RJMP SYSTEM.StepAutoStart
SET
BLD Flags2, _STEPDEST
BLD Flags2, _STEPCW
RET ; testweise eingefügt
RJMP SYSTEM.StepAutoStart
läuft der Motor zwar auch nicht (klar!), aber der Int2Str-Fehler ist da! Scheint also nur mit FLAGS2 zu tun zu haben.
Kann es daran liegen, dass der Compiler das Register FLAGS2 auf der gleichen Stelle mit den Flags _F64StrInt und _STEPCW belegt?
Gruß, cm