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
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.
Ich arbeite mit dem u Vision compiler... wie könnte man das deklarieren? gruss erol
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};)
mit externen RAM meinte ich internes XRAM - sorry
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
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
Setzte in den Projektoptionen unter Target den Haken bei "Use On-chip XRAM (0xF000-0xF1FF)"
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
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.
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
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)
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
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)
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
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ß
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.