Hallo, ich verwende einen Atmega 128 und AVR-GCC. Nun muss ich in meinem Programm gut 400 Bytes zwischenpuffern und habe dazu global eine array of char mit 400 Elementen deklariert. Laut dem Make-Skript ist "Data" zu 36% voll. Seit dieser Änderung, die natürlich Funktionen zum Lesen und Schreiben in das Array beinhaltet, funktioniert das Programm nicht mehr richtig: - Displayausgaben einer bestimmten Funktion zeigen am Anfang jeder der 4 Displayzeilen Sonderzeichen. Zunächst funktioniert es, dann gibt es immer mehr fehlerhafte Zeichen - Meine Sensor-Zuordnungen (im eeprom gespeichert) sowie andere Einstellungen scheinen verändert zu werden. Ich verwende EEMEM mit eeprom_read_byte /update_byte für den Zugriff und habe nichts an den EEMEM-Deklarationen geändert, so dass sich das eeprom-Layout ja nicht verändern dürfte? - Das Programm stürzt ab, wobei Interrupts weiter laufen - Das Programm startet plötzlich neu. Ich habe die eemem-Zugriffe überprüft und geschaut, ob ich irgendwo zu weit in einem array lese / schreibe, aber nichts gefunden. Wie könnte ich weiter vorgehen? Anscheinend schreibt ja irgend etwas in den falschen Speicherbereich. Was passiert eigentlich, wenn der Ram voll ist? Gruß, Chris
1 | char array[400]; |
2 | ...
|
3 | for(int i = 0; i <= 400; i++) |
4 | {
|
5 | array[i] = 1; |
6 | }
|
In diesem Codestück greifst du über Arraygrenzen hinaus zu!
Hallo, mach dir bitte diesen Zusammenhang klar *RAM*: <unten>(User)Ram <-->(Function)Stack<oben> Dann wäre auch ein komplettes Programm für uns wichtig.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.