Forum: Mikrocontroller und Digitale Elektronik Programm spinnt nach deklaration von char array [400]


von Chris (Gast)


Lesenswert?

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
von Krapao (Gast)


Lesenswert?

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!
von Uwe (de0508)


Lesenswert?

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