Gast
#434136
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