Hallo Leute. Ein seltsames Problem tut sich bei meinem MEGA128 auf. Lautet die Initialisierung int stunde=18, minute=00, sekunde=00, tag=23, monat=07, jahr=05; stimmt alles, bis auf das Jahr. Das ist 19811 Ändere ich die Reihenfolge der Variablen, ist irgend ein anderer Wert 19811. Lösche ich das EEProm stimmen die Variablen, obschon ich das eeprom garnicht auslese. Könnte es sein, dass ich mich mit meinen Variablen (es kommen noch ein paar danach) über das verfügbare Volumen des Arbeitsspeichers hinaus bewege? Wie könnte man das prüfen? Kann man den Speicher erweitern?
Hallo gibt es vielleicht eine Kollision mit dem Stack oder dem Heap? Leg mal das ganze mal als "const int" an. 19811 = 0x4D63? Sagt die das was?
0x4D63? keine Ahnung. Ich werde aber das mit dem Const mal versuchen. Gibt es einen weg zu sehen, was im Speicher vor sich geht? Das irre ist das die Variablen, ja am Anfang der Initialisierung stehen
Mit einem JTAGICE und AVRStudio könnte man sich die Daten auf dem Chip ansehen und einzelne Programmteile ausführen lasse. An sonsten sehe ich keine direkte Möglichkeit. Wenn eine RS232 Schnittstelle vorhanden ist, könnte man einen Hexdump von dem interessanten Speicherbereich machen. Das benötigt aber zusätzlichen Code. Und man sieht vermutlich auch nur das sich etwas an den Daten geändert hat. Das EEPROM ist beim AVR nicht in den normalen Adressbereich gemappt. Daher kann ich im Moment auch keinen Zusammenhang mit zwischen dem Fehler und dem EEPROM erkennen. Hier noch ein paar Punkte, die Du vermutlich schon geprüft hast. Aber manchmal übersieht man die naheliegensten Dinge. - Einmal komplett neu compilieren. ( vorher "make clean" oder alle .o-Files per Hand löschen) - Geht vielleicht nur bei der Ausgabe der Daten etwas schief? - Laufen eventuell mehrere Interupts auf, so das der Stack überläuft? (Verwende mal versuchsweise SIGNAL() anstelle von INTERRUPT() ) - Verwendest Du rekursive Funktionen, die den Stack zum Überlaufen bringen könnten? Sorry, aber ich stocher hier auch nur im Nebel.
das mit dem stochern ist schon ok JTAG habe ich blöder Weise nicht. Signal ist es schon Rekursive Funktionen kann ich mir nicht vorstellen, nicht dass ich wüßte was es ist, aber der Fehler entsteht bei initialisieren. Später kann ich die Zahl ja mit dem korrekten Wert überschreiben. Interrupts gibt es zu dieser Zeit noch nicht. Ausgabe kann ich ausschließen, weil es ja von der Reihenfolge der Initalisierung abhängt
Hast du schon mal versucht die Deklarationen in mehrere Zeilen zu schreiben: int stunde=18; int minute=00; int sekunde=00; int tag=23; int monat=07; int jahr=05; Ich hatte mit solchen Initialisierungen noch nie Probleme. Gruß, Florian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.