Eine Count-Down-Uhr

oldmax

Mitglied
Premium Benutzer
03. Nov. 2008
595
15
18
Landkreis Göttingen
Sprachen
  1. Assembler
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...
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
...
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
 
Hallo Oldmax,

in der zeiten Zeile kommt ein HIGH hin ;)

.. jaja, sowas ist sicherlich im Gesamtcode nicht so schnell zu finden :)

Gruß,
Dirk
 
Hi
Natürlich kommt da ein High hin und ich hab so ca. 30 bis 40 mal es richtig gemacht, aber einmal doch geschludert....:banghead:
und dann der Effekt, das nur an einer Stelle die Ausgabe verrutscht, als ob der Compiler die Adressen nicht neu berechnet. Nicht vergessen, das hat ja mal gepasst....:confused:
Ok, es sollte ja auch nur ein Hinweis sein das die Regel: "der Fehler sitzt vor dem PC" immer noch gültig ist.:eek:
Gruß oldmax
 
Sowas ähnliches hatte ich bei meinem Phasenanschnittsdimmer auch mal. Resultat war, daß nur eine Pumpe ging, die andere nicht so richtig. Ich hab die ansteuernden Signale dann mit'm DSO aufgezeichnet, und erkannt, daß der PWM nicht wie gefordert auf inverted lief. Also war klar, wo der Fehler zu suchen war. Letztendlich lag's daran, daß genau bei diesem einen bit das "1<<" gefehlt hat. Ich bin den Code zig mal vorher durchgegangen - da ist mir das nicht aufgefallen, waren ja die richtigen bits aufgeführt...
Das ist ja das schöne bei Assembler: es wird genau das gemacht, was Du sagst. Man muß halt nur eben auch sagen, was man meint...
(Sowas war doch vor kurzem auch der Fehler im UART-Fred: bit im falschen TimerControlRegister gesetzt - und erst Dirk hats gesehen...)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)