Hi
Ich hatte es ja bereits schon mal angedeutet, das ich so kurz vor dem wohlverdienten Ruhestand meinen Kollegen und Vorgesetzten die Restzeit der Duldung meiner Person vor die Nase halten will. Dazu hab ich mit 12 7-Segmentanzeigen eine Count-Down-Uhr gebastelt, die zur Zeit die aktuelle Zeit mit Datum anzeigen kann sowie eben die Restzeit meiner (un)ativen Phase im Kreis meiner Kollegen. Und dabei hatte ich mir einen Fehler eingefangen, den ich euch gern einmal beschreiben möchte.
Also, wie ihr wißt, programmiere ich in Assembler und es war der erste Einsatz eines Atmega16. Die Variablen waren deklariert und eine Laufschrift mit "-FEIErAbEnd-" eingepflegt. Nun wollte ich noch so eine Art Schlange durchs Display laufen lassen und stellte plötzlich fest, das sich die Laufschrift schon beim Einfügen einer einzigen zusätzlichen Variablen verschoben hatte. Statt "-FeierAbEnd-" stand plötzlich "FEIErAbEnd- "
Dies wurde noch schlimmer, bei weiteren hinzufügen von Variablen. Man sollte glauben, der Compiler berechnet die Adressen für die Variablen nicht richtig und bei indiziertem Zugriff passt's dann nicht mehr.
Also dem Befehl LD Reg_A, X+ ...
Ich hab sämtliche Foren befragt hinsichtlich entsprechendem Bug unter Windows7 ohne Erfolg und wollte schon einen neuen Bug kundtun..... bis mir der Zufall den Fehler zeigte...
Ehrlich, ich hab im Programm, ist allerdings auch wesentlich größer den Fehler nicht entdeckt Seht ihr ihn auf Anhieb, oder auch erst nach dem zweiten Blick.....
Gruß oldmax
Ich hatte es ja bereits schon mal angedeutet, das ich so kurz vor dem wohlverdienten Ruhestand meinen Kollegen und Vorgesetzten die Restzeit der Duldung meiner Person vor die Nase halten will. Dazu hab ich mit 12 7-Segmentanzeigen eine Count-Down-Uhr gebastelt, die zur Zeit die aktuelle Zeit mit Datum anzeigen kann sowie eben die Restzeit meiner (un)ativen Phase im Kreis meiner Kollegen. Und dabei hatte ich mir einen Fehler eingefangen, den ich euch gern einmal beschreiben möchte.
Also, wie ihr wißt, programmiere ich in Assembler und es war der erste Einsatz eines Atmega16. Die Variablen waren deklariert und eine Laufschrift mit "-FEIErAbEnd-" eingepflegt. Nun wollte ich noch so eine Art Schlange durchs Display laufen lassen und stellte plötzlich fest, das sich die Laufschrift schon beim Einfügen einer einzigen zusätzlichen Variablen verschoben hatte. Statt "-FeierAbEnd-" stand plötzlich "FEIErAbEnd- "
Dies wurde noch schlimmer, bei weiteren hinzufügen von Variablen. Man sollte glauben, der Compiler berechnet die Adressen für die Variablen nicht richtig und bei indiziertem Zugriff passt's dann nicht mehr.
Also dem Befehl LD Reg_A, X+ ...
Ich hab sämtliche Foren befragt hinsichtlich entsprechendem Bug unter Windows7 ohne Erfolg und wollte schon einen neuen Bug kundtun..... bis mir der Zufall den Fehler zeigte...
Code:
LDI XL, LOW(Variable)
LDI XH, LOW(Variable)
ADD XL, Reg_A ; Offset zur Adresse
ADC XH, Zero ; Zero ist ein Register mit "0"
LD Reg_B, X
...
Gruß oldmax