controller dem Wahnsinn verfallen?

Gast #237151
Lesenswert?

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?
Gast #237153
Lesenswert?

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
Gast #237154
Lesenswert?

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.
Gast #237155
Lesenswert?

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
Gast #237156
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren