Tricore; Variablen zur Laufzeit im nvram ablegen(wie?)

OP #3153338
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
OP #3176271
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
Gast #3178220
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...
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren