Forum: Mikrocontroller und Digitale Elektronik Variablen im xdata-Bereich werden überschrieben


von Marko (Gast)


Lesenswert?

Hallo zusammen,

ich bin Neuling, was Speicherverwaltung in µControllern angeht.

Equipment:
            Controller: AT89C51ED2
            Compiler: µVision 3, Keil


Folgende Lage:

Ich deklariere Globale Variablen als static xdata unsigned char in C.
Meine Datenmenge ist so groß, dass ich den internen Datenspeicher nicht 
mehr verwenden kann. Deshalb xdata...

Ich merke jedoch, dass eine bestimmte Variable sich verändert, obwohl 
ich es nicht programmiert habe. Ich beschreibe sie über die RS-232 vom 
PC aus und schicke sie mir umgehend zurück. Die RS-232-Verbindung läuft 
tadellos. Muss also an der Variable liegen.

Declariere ich diese Variable mit idata, ist das Problem beseitigt. 
Schreibe ich jedoch mehr Programmcode, so wird entsteht das Problem mit 
anderen Variablen. Ich kann aber nicht alle mit idata declarieren, da 
sonst der interne Datenspeicher zu voll wird.

Ich vermute, dass Programmcodespeicher meine Variablen versauen. Also 
irgendeine Überschneidung im Speicher. Vielleicht eine Adresse für zwei 
Speicherbereiche?

Es wird vorgeschlagen eine Startup.a51-Datei zu verwenden, um 
Speicherbereiche und den Stack zu konfigurieren.
Leider hab ich keinen Plan, was ich dort eintragen soll und welche 
Einstellungen ich unter Target-Optionen im Reiter Target in µVision 
vornehmen soll.
Ich habe schon das ein oder andere ausprobiert, welches dazuführte, dass 
mein Programm überhaupt nichts mehr tat.

Wer sich mit dem 8051 und Keil schon intensiv auseinandergesetzt hat, 
weiß bestimmt die Antworten auf meine Fragen.

Also Danke schon im Voraus...

Marko

von Peter D. (peda)


Lesenswert?

Marko wrote:

> Declariere ich diese Variable mit idata, ist das Problem beseitigt.


Nö.
Das Problem ist nur im Moment für Dich nicht mehr sichtbar.

In der Regel sind solche Sachen ein Zeichen für falsche 
Pointerverwendung.

Z.B. cast eines char-pointers auf int oder Zugriff auf Element n eines 
Feldes der Länge n.


Peter

von Marko (Gast)


Lesenswert?

Danke Peter,

für Deine Antwort.
Es lag an einen externen Bustreiber, der ebenfalls auf die 
UART-Schnittstelle zugreift. Der war fehlerbehaftet. Also doch kein 
Speicherproblem.

Gruß Marko

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.