controller dem Wahnsinn verfallen?

Gast #237151
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
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?
Gast
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.