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