Forum: Mikrocontroller und Digitale Elektronik Overflow bei Berechnung - wie finden?


von Karel M. (marsalek)


Lesenswert?

Liebe Kollegen,

ich vermute, dass ich in meinem C-Programm für ATMEGA1284P einen 
Overflow bei einer Berechnung habe. Ich habe nämlich in dem Programm 
drei lange int16 Arrays erstellt (3 * 1024) und mit 0 gefüllt. An einer 
anderen Stelle des Programms werden die Nullen testweise aufs Terminal 
ausgegeben und and drei hintereinander liegenden Stellen sind in einem 
der Arrays irgendwelche Zahlen drinn. Auf diese Arrays wird bis auf die 
Initialisierung sonst nirgendwo schreibend zugegriffen.

Vermute ich es richtig, dass ich irgendwo im Programm einen Fehler habe, 
z.B. bei einer Berechnung, wo eine Variable überläuft, und es werden mir 
die Inhalte des Arrays überschrieben?

Wie sucht man den Fehler :-)?

Nutze Eclipse mit WinAVR (gcc).

Vielen Dank
Karel
von Chris (Gast)


Lesenswert?

Erstens mal das Programm posten und zweitens, kann man jede berechnung 
die man im Code hat mal von Hand durchführen und zwar genau so wie es 
der Controller auch macht. Dann sieht man auch schnell was für zahlen 
dabei raus kommt und ob sie über den Datentyp drüber hinaus gehen
von Daniel H. (Firma: keine) (commander)


Lesenswert?

Also ausgehend von deinem angehängten Quellcode würde ich sagen: 
vielleicht.

Allerdings hört sich die Beschreibung etwas spanisch an, denn wenn auf 
die Variablen nur lesend zugegriffen wird, wie soll dann etwas 
überlaufen? Eher würde ich dann noch vermuten dass du irgendwo 
fehlerhaft mit Pointern o.ä. arbeitest und aus Versehen einen 
Speicherbereich manipulierst der eigentlich nicht angefasst werden soll.

Ansonsten:
Quellcode schrittweise durchdebuggen.
von Anja (Gast)


Lesenswert?

Karel Marsalek schrieb:
> Wie sucht man den Fehler :-)?

Man setzt im Debugger einen Breakpoint beim Schreibzugriff auf die 
entsprechende Variable oder den Variablenbereich.

Ich würde erst mal schauen ob der richtige Prozessor beim Compiler 
eingestellt ist und schauen ob der Stackpointer entsprechend 
initialisiert ist.

Gruß Anja
von marsalek karel (Gast)


Lesenswert?

Danke! Problem gelöst. Es lag am (doofen) Zugriff auf das Array mittels 
Pointer.

Karel
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.