Forum: Mikrocontroller und Digitale Elektronik Tricore; Variablen zur Laufzeit im nvram ablegen(wie?)


von David N. (daven)


Lesenswert?

Hallo,

wie der Titel schon sagt, würde ich gerne Variablen zur Laufzeit im 
nvram ablegen, habe jedoch keine Ahnung wie das korrekte Vorgehen dazu 
ist.

Ich benutze Tasking mit Dave.

Mein Ansatz bisher war wie folgt:

-------------------------------------------
1
int Parameter __at(0x Adresse aus dem dflash block) = 500;
2
3
4
int main(){
5
6
   dosomething();
7
...
8
Parameter = 100;
9
...
10
   dosomethingelse();
11
12
return 0;
13
}

Sobald ich meine Variable zur Laufzeit ändern will, gibt mir der Linker 
folgenden fehler:

ltc E121: relocation error in "task1": relocation value 0xafe00000, type 
abs18 space, offset 0xa, section ".text.MAIN.main" at address 0x800029bc 
is not a valid address in R_TRICORE_18ABS. Hint: check the mapfile for a 
section that occupies this address.

Ich hab auch ein bisschen im *.lsl file rumgespielt mit reserved usw. 
führte allerdings leider zu nichts Nennenswertem.

Ich hab auch die Dokumentation zu Tasking durchforstet und finde leider 
nur memory alocation ala __near und __far allerdings nichts dazu, wie 
man auf den nvram schreibt.

Ich hoffe jemand kann mir hier weiterhelfen, oder einfach nur sagen, 
welche Dokumentation ich dazu lesen muss...
Vielen Dank im Voraus

von dudu (Gast)


Lesenswert?

dflash = rom-bereich. lesen ok, schreiben ueber eigene 
programmierroutine, die entsprechend zur laufzeit ausgefuehrt werden 
muss. auch das hat tücken, da z.b. nur pageweise geschrieben werden 
kann.

von David N. (daven)


Lesenswert?

Das ist kein Problem, im dflash sollen lediglich Parameter gespeichert 
werden  die nicht jede Sekunde geändert werden. Für die Routine gibt es 
beim Dave von Infineon ja dieses DMA(Direct Memory Access), allerdings 
bin ich noch nicht komplett durchgestiegen, wie das funktioniert. Dafür 
ein Tutorial oder auch nur ein beispiel-Code wäre schon eine große Hilfe

von dudu (Gast)


Angehängte Dateien:

Lesenswert?

anbei ein bsp., wie man auf ein flash schreibt. stichwort im user manual 
ist EEPROM Emulation. du kannst nur 128byte (also eine page) gemeinsam 
schreiben, darfst aber nicht zu oft schreiben (<60000 zyklen). man 
koennte einen 128b buffer im ram reservieren, die page dahin 
zuruecklesen, die folgenden (noch nicht programmierten) bytes 
modifizieren und dann wieder schreiben, naechste page usw. bis das flash 
voll ist (schreibst du nur eine stelle, kannst zugucken, wie dein flash 
vor deinen augen "verblüht", und das beste, die anderen zellen verlören 
gleich mit ihren wert). damit du weisst, wo zu zuletzt geschrieben hast, 
bieten sich marker an, die man bei jedem schreibvorgang als overhead 
benutzen koennte. viel spass...

von David N. (daven)


Lesenswert?

Vielen vielen Dank für die Hilfe :)

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