www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 Problem mit Initialisierung globaler Variablen


Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Programmiere gerade einen AT89C51RC2 mit Keil.

Beim Debuggen ist mir aufgefallen, dass die globalen Variablen, die ich 
schon vordefiniert habe, nicht immer richtig initialisiert werden.

Liegen die Variablen am Anfang des XDATA Bereichs, dann funktioniert die 
Initialisierung. Liegen sie weiter hinten, so stehen irgendwelche 
falschen Werte drin.

Habe aus dem Programmcode alle Schleifen etc. auskommentiert, damit ich 
sichergehen kann, dass der Fehler nicht von meinem Programm kommt.

Der XDATA Bereich ist auch bei weitem nicht voll und den XBPSTACK habe 
ich auch deaktiviert, da ich keine reentrant funktionen benötige.

Woher kann dieser Fehler kommen?

Kann da was am STARTUP.A1 oder am INIT.A51 file faul sein?

Vielleicht kann mir ja jemand einen Tip geben?

mfg Josef

Autor: Carsten Wille (eagle38106)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn das mit der Definition der RAM-Größe aus?
Ich meine die Datei START.A51.

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe die XRAM Größe am Beginn meines C Programms auf 1024 Byte gestellt,
also mittels Befehl:

AUXR = AUXR | 0xC0;

und das scheint irgendwie den Fehler auszulösen.

mfg Josef

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du in der Datei START.A51 in der Sektion "Power-On Initialization 
of Memory" die Startadresse sowie die Größe des Xdata Bereichs korrekt 
eingestellt?
Denn nur diese Einstellung führt dazu, dass zu Beginn des Programms der 
Bereich vollständig mit 0x00 Initialisiert wird. Andernfalls hast du 
nach dem Einschalten zufällige Werte drin. Ohne diese Initialisierung 
musst du eben nur sichergehen, dass du deine Variablen vor der ersten 
Verwendung immer vorbelegt hast.

Ciao,
     Rainer

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das Verändern der Konstante XDATALEN habe ich auch schon probiert, 
das hat aber keine Besserung gebracht, jetzt habe ich direkt im 
Assembler die XRAM Größe eingegeben

MOV 0x8E,#0x0C

So scheint es zu funktionieren, aber das sollte eigentlich doch auch 
irgendwie funktionieren, ohne dass man direkt in den Assembler Code 
eingreift, oder?

mfg Josef

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Josef schrieb:
> Habe die XRAM Größe am Beginn meines C Programms auf 1024 Byte gestellt,
> also mittels Befehl:
>
> AUXR = AUXR | 0xC0;
>
> und das scheint irgendwie den Fehler auszulösen.

Also falls das kein Schreibfehler war, dann funktioniert es so nicht. Es 
muss 0x0C lauten, wie bei deiner Assembler Variante. Wenn du wirklich 
0xC0 reinschreibst ist das Verhalten undefiniert, da du ein reserviertes 
Bit setzen würdest.

Ciao,
     Rainer

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> So scheint es zu funktionieren, aber das sollte eigentlich doch auch
> irgendwie funktionieren, ohne dass man direkt in den Assembler Code
> eingreift, oder?
Öffne die Startup.a51 im Editor. Unterhalb des Fensters sollte "config 
wizard" o.ä. stehen. DA STELLT MAN DANN DIE SACHEN EIN :)

Ralf

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, du hast natürlich recht: der wert war 0x0c
hab das auf die schnelle verwechselt ...

mfg josef

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.