www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik xc866 indirekt adressierbaren speicher in C beschreiben


Autor: xc866 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallöchen zusammen.

Weiss jemand von euch wie man bei einem u kontroller (XC866 VON 
INFINEON) den indirekt adressierbaren bereich in der programmiersprache 
c anspricht?
in assembler benötigt man MOVC oder@ aber in C?????


ich wollte daten in einem array speichern nun habe ich zu viel im 
dataflash und der compiler motzt. aber das xram wäre noch leer.

kann man das auch mit dem dave initialisieren?

hat jemand eine Idee?

gruss erol

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das dürfte ziemlich stark vom Compiler abhängen - um welchen geht es 
denn??
xdata oder far könnten Möglichkeiten bei der Deklaration sein. Kenne 
aber den Prozessor nicht.

Autor: xc866 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite mit dem u Vision compiler...

wie könnte man das deklarieren?

gruss erol

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was willst du jetzt machen?
Eine Variable im Codespeicher ablegen um mit "movc" zuzugreifen
(z.B. code int test[5] = {1,2,3,4,5};)
oder eine Variable im externen RAM ablegen um mit movx zugreifen
(z.B. xdata int test2[5] = {6,7,8,9,0};)

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit externen RAM meinte ich internes XRAM - sorry

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne zwar nicht genau den XC866, vermute aber das das XRAM zwar 
intern im µC liegt, physikalisch jedoch genau so angesprochen wird, wie 
externer Speicher.

mit:
  #include <absacc.h>
  ...
  x = XBYTE[0x1000];
kannst Du z.B. direkt auf XRAM zugreifen.

Eleganter geht es mit der Methode von Carsten, wobei Du dem Linker 
mitteilen musst, wo der XRAM-Bereich liegt. Der XRAM Zugriff ist 
wesentlich langsamer.

Ein deutlich schneller Zugriff auf XRAM-Bereiche ist über PDATA möglich 
(max. 256 Byte Bereich = 1 Page). Auch hier muss unbedingt der Linker 
wissen, wo die PDATA-Page liegt.

z.B. int pdata test2[5] = {6,7,8,9,0};

Gruß
Matthias

Autor: xc866 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich will ein array ins xram schreiben.

also mit der dekleration:

z.B. xdata int test2[5] = {6,7,8,9,0};)

scheint es mir am einfachsten.
Geschwindigkeit spielt keine rolle...

wie teile ich dem linker den bereich mit? Befehle?

im datei anhang ist die memory map für xram F000H bis F200H iost etwas 
verwirrend....

gruss erol

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setzte in den Projektoptionen unter Target den Haken bei "Use On-chip 
XRAM (0xF000-0xF1FF)"

Autor: xc866 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cool funktioniert!! so einfach! aber wird nirgens beschrieben... weiss 
man anscheinend einfach ;-)

für was ist das das on chip Rom 0x0-0x2fff , 0xa000 - 0xafff ?

der memory map nach müssen ja noch einige Kb Dataspeicher verfügbar 
sein. ist dieser auch so einfach zu beschreiben wie das xram?

gruss erol

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0x0000-0x2FFF sind die 3 Code-Flash-Bereiche 
(0x0000-0x0FFF,0x1000-0x1FFF,0x2000-0x2FFF).

Der Bereich 0xA000 - 0xAFFF ist das Datenflash. Dieses kann als 
Programmspeicher oder zur EEPROM-Emulation genutzt werden.

Autor: xc866 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das heist die 4 Kb der D-Flash bank könnten auch noch genutz werden um 
variablen zu speichern?

0xA000 - 0xAFFF

ist dieser Speicher bereich in c auch mit einer deklaration 
anzusprechen?

da es sich um einen nicht flüchtigen speicher handelt müsste man die 
daten ja auch wider explizit löschen können...

gruss erol

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Variablenspeicher ist der D-Flash nicht unbedingt gedacht, mehr zum 
sichern von erfassten Daten (Datalogger für z.B. Temperaturwerte, etc).

Man muss hierbei beachten, dass ein Flash nicht unedlich oft 
schreib-/löschbar ist und du nicht jede Speicherstelle einzeln 
schreiben/löschen kannst.
Du legst ja deine Variablen bei anderen µCs auch nicht ins EEPROM - 
dafür ist ja der RAM und wenn der nicht reicht, nimm die XC88x (die 
haben 1kB mehr RAM)

Autor: xc866 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es handelt sich streng genommen auch um messwerte welche ich erfasse. 
sie werden allerdings nach einer Stunde wider mit aktuellen 
überschrieben. und nur im fehlerfall zur analyse ausgelesen.
nun da ich da xram jetzt im griff habe kann ich alle 2min einen 
datensatz erfassen. mit den 4 kb des d-flashes würde das noch 
detailierter gehen.

wenn ich allerdings das manual von infineon bezüglich EEprom emulation 
lese sieht das ziemlich kompliziert aus (in assembler). wenn das in C 
auch so aufwändig ist werde ich es so belassen und mich mit einer 
aufzeichnung alle 2 min zufrieden geben...

ausser es ist relativ einach zu lösen mit c. aber da findet man nirgens 
die befehle für c nur für asm.
kann man das in c einfacher realisieren?

gruss erol


Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist kompliziert! Du greifst dabei auf Flashroutinen des Bootroms zu, 
etc.
Besser ist regelmäßig abfragen.

Wenn du die Messwerte irgendwo ohne PC (oder sonstige externe Anbindung) 
erfassen musst, und dein Gerät wird zwischendurch ausgeschaltet kommst 
du halt nicht um die E²-Emulation herum. Aber wenns nicht zwingend 
erforderlich ist, lass es sein.

Ein Alternative ist über die SSC im SPI-Modus ein serielles EEPROM 
anzusprechen (oder für sehr viele Daten eine SD-Karte)

Autor: xc866 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok. das habe ich eben vermutet. Ja die Möglichkeit mit dem externen 
eeprom über die ssc habe ich mir auch schon überlegt.

die Genauigkeit der Aufzeichnung alle 2 min ist grundsätzlich genügend, 
deshalb werd ich es so belassen. (ohne das xram hatte ich alle 14 min 
eine Aufzeichnung) Stromausfälle beuge ich mit einer Backup batterie 
vor.

Vielen Dank für deine Hilfe!!! (xram). Die Memory organisation des xc866 
und vorallem das ansprechen in C, ist nun einiges klarer geworden....

Gruss erol

Autor: Korny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Beitrag ist zwar schon etwas älter, aber bei mir gerade 
hochaktuell...

Wenn ich das aus dem Beitrag hier richtig verstehe ist der XRAM ein 
flüchtiger Speicher, also sind die Daten nach dem Neustart weg.

Ich benötige aber für den Infineon XC888 einen Speicher für 
Kalibrierwerte, welcher während des Programmablaufs beschrieben werden 
kann und nach dem Reset noch erhalten bleibt (oder wenn die Spannung 
fehlt).

Ich habe mir auch das EEPROM- Manual von Infineon angeschaut, dort gibt 
es ja bereits einen FlashHandler, mit welchem man in den D-Flash 
schreiben kann, alles auf C- Basis.

 Ich werde leider aus den Beispielen überhaupt nicht schlau - ich möchte 
einfach nur wissen, mit welcher Funktion ich einen Wert (8 oder 16 Bit) 
in den D-Flash speichern kann und wie ich diesen Wert wieder auslesen 
kann.

Hat hier schonmal jemand Erfahrung mit dem FlashHandler gemacht oder 
gibt es vllt. sogar einfachere Methoden, um eine Variable beim XC888 
nicht flüchtig abzuspeichern?

Danke vorab für Eure Hilfe!

Gruß

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.