Hallo alle, ich benutze Keil um ein 8051 Derivat mit 16k on chip Flash-Memory zu programmieren. Mein Programm lief wunderbar bis zu dem Zeitpunkt als ich versucht habe einige Variablen in den XDATA Bereich zu schreiben. Ich hab noch nicht so viel Erfahrung mit µC's und wollte jetzt mal wissen, was ich falsch mache. Deklarieren tu ich sie z.B so: xdata unsigned char cLength[16]; Der Compiler zeigt auch an, dass in xdata nun Platz verwendet wird, allerdings läuft das Programm nicht mehr richtig. Weitere Einstellungen: Memory Model: small Code Rom Size: large Ich frage mich allerdings, wie und wo der xdata-Bereich überhaupt festgelegt wird. Danke schonmal für eure Hilfe. Gruß Ingo
hallo ingo. ich benutze auch keil und hatte einmal ein ähnliches problem. ich hatte damals auf daten im xdata mit einem pointer gezeigt, welcher nicht im xdata lag! als ich das ganze an eine funktion übergeben habe, zeigte der pointer auf die falschen daten! vielleicht hilft dir dass ja!? mfg, Mathias
Muss ich die Daten in xdata mit einem pointer auslesen? Wenn ja würde mir ein Codebeispiel für a) schreiben nach xdata b) lesen aus xdata viel helfen. ich steh grad irgendwie aufm schlauch
Hallo Ingo: Hier ein Beispiel zur Deklaration: Daten ins RAM: data unsigned char cLength[16]; Daten ins XDATA: xdata unsigned char cLength[16]; DATEN in den Code: code unsigned char cLength[16]; beim small memory model werden alle Daten standartmäßig ins Ram gespeichert, also erübrigt sich das data! daten im xdata kannst du komplett gleich behandeln wie daten im data! (ist ja c nicht assembler :-) ) nur wenn du daten im xdata hast und mit einem pointer drauf zeigen willst, dann schau dass der pointer auch im xdata liegt! welchen controller verwendest du denn? hast du die xdata startadresse und länge richtig gewählt? im datenblatt müsste der speicheraufbau beschrieben sein! du sagst dein programm lief wunderbar!? bringt es jetzt fehlermeldungen oder läuft es nur nicht mehr richtig? was hast du genau gemacht (eine variable im xdata erstellt, bestehende variable vom data ins xdata gelegt...) ?? mfg, Mathias
Also, mein µC ist ein t89c51cc02. Ich habe mein Programm um einige Diagnosefunktionen via UART erweitert. Dabei benötige ich einen Puffer für die eingegangenen Daten. Dieser Puffer umfasst 14 Byte. Zusammen mit den Variablen, die ich für das restliche Programm benötige sprengt das den Rahmen des RAM. Deshalb wollte ich nur die Variablen für die Diagnose ins xdata verschieben. Sobald ich jedoch die Variable während meiner globalen Variablendeklaration wie oben beschrieben erstelle, funktioniert mein Programm nicht mehr richtig. Wenn ich es richtig verstanden habe muss ich folgendes tun: - im StartUp-Code den xdata-Bereich festlegen: ->StartUp.a51 editieren ->für XDATASTART irgendeine Adresse im User Bereich wo kein Code steht (habe 0x1000 eingetragen) ->for XDATALENGTH Länge = 0xFF (reicht ja völlig) - Variable global deklarieren xdata .... Ich habe im Programm die xdata Variable wie jede andere behandelt, aber schon kurz nach dem Reset fängt das Programm an zu spinnen. In den Einstellungen des Linkers wird der XDATA-Bereich korrekt angezeigt. Ich versuch nochmal mit ner anderen Variable und dem "code" typ. Danke schonmal für den Hinweis mit dem Pointer. Das ist auch schon Gold wert:)) Gruß Ingo
Problem gelöst, war nicht die Deklaration sondern ein kleiner Fehler im Programm. Danke trotzdem für die Tips. Gruß Ingo
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.