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

OP #3153338
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
Gast #3176002
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.
OP #3176271
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.