mikrocontroller.net

Forum: Compiler & IDEs controller dem Wahnsinn verfallen?


Autor: cerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: cerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: cerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.