Forum: Compiler & IDEs controller dem Wahnsinn verfallen?


von cerberus (Gast)


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?

von Josef Zimmermann (Gast)


Lesenswert?

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?

von cerberus (Gast)


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

von Josef Zimmermann (Gast)


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.

von cerberus (Gast)


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

von Florian Pfanner (Gast)


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

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
Noch kein Account? Hier anmelden.