Variablen ins ROM speichern C18

OP #805009
Lesenswert?

Hallo!!
Verwende den Compiler C18 von Microchip und einen PIC18F97J60.

Habe struct-Variablen die folgendermaßen deklariert werden:

rom APP_CONFIG ROMConfig;
APP_CONFIG AppConfig;

ROMConfig wird in das interne Rom vom Microcontroller geschrieben.

Ich möchte einfach nur AppConfig in ROMConfig speichern, damit die Daten 
auch nach einem RESET gespeichert sind. Habe es mit memcpy(...) bzw. 
memcpyram2pgm probiert, leider erfolglos.
 Kann mir jemand helfen?? DANKE
Gast #805024
Lesenswert?

Hmm, das sollte mit memcpyram2pgm eigentlich gehen. Ich habe jedenfalls 
schon oft folgendes genutzt, um Strings aus dem Flash ins Data Memory zu 
kopieren:

1
unsigned char   data_text[25];                    // data memory
2
rom unsigned char rom_text[] = "meintext";
3

4
strcpypgm2ram ((char*)&data_text, (const far rom char*) rom_text);

Gruss,
Dirk
Gast #805029
Lesenswert?

@winne: Ok, überredet ;-) Das Flash kann man allerdings trotzdem zur 
Laufzeit beschreiben, aber nur pageweise (wie Rufus schon schrieb). 
Kapitel 6.5 des Datasheets sagt, wie es geht.

Gruss, Dirk
Gast #805037
Lesenswert?

>*************
>The Flash program memory is readable, writable and
>erasable during normal operation over the entire VDD
>range.
>************


das FLash memory Ist lesbar, programmier und löschbar unter benutzung 
der normalen Operationen über den gesamten Betriebsspannungsbereich.


Das bedeutet das man von der unteren bis zur oberen Spannungsgrenze 
sicher programmieren kann. das und nur das steht dort.
Gast #805043
Lesenswert?

<o.T.>
Oh Herr lass es Hirn Regnen, oder mal jemanden vor dem Proggen die 
verschiedenen Speichertypen richtig nutzen zu lernen.
</o.T.>


wenn es der chip bleiben soll muss externes EEprom (oder ne MMC/SD) 
drann
Gast #805049
Lesenswert?

>@winne: Ok, überredet ;-) Das Flash kann man allerdings trotzdem zur
>Laufzeit beschreiben, aber nur pageweise (wie Rufus schon schrieb).
>Kapitel 6.5 des Datasheets sagt, wie es geht.

Ja das ist wahrscheinlich, ist jedoch nicht als Variablenspeicher 
sondern für Bootloader gedacht, was einen Missbrauch allerdings nicht 
ausschließt. Doch sollte vor den dirty tricks das Beherrschen der Regeln 
stehen.
Gast #805074
Lesenswert?

@ dirk

Glaubst du wirklich, jemandem der obige Frage stellt, sollte man auf 
diesen Trip bringen.

Na klar sind mir Bootlaoderoptionen bekannt. Aber beachte auch die 
möglichen Blockaufteilungen. Der geschützte Flash ist zumeist nur wenige 
KB gross. Und nur dieser stände dann dem eigentlichen Code dann zur 
Verfügung, während der größere Teil des Programmspeichers auf einen 
Schlag gelöscht würde.

Ich wette, so hat unser Freund sich das nicht gedacht und erwürde sicher 
vom Regen in die Traufe kommen.
Gast #805080
Lesenswert?

@winne: Die Blockgröße ist ja nur 64 Byte, und sein PIC hat 128kB Flash. 
Der Verlust sollte sich also in Grenzen halten. Was den Trip angeht, da 
gebe ich Dir recht ;-)

@Michael: Ja, Du kannst den internen Flash verwenden. Lies Dir doch 
einfach den Abschnitt 6 im Datasheet mal durch und danach den Link, den 
ich oben gepostet habe. Ein bisschen Eigeninitiative musst Du hier schon 
zeigen...

Gruss, Dirk
Gast #805081
Lesenswert?

@ Michael

>Kann ich jetzt Daten im Flash speichern?
Ja nur mit einem wirklich schnutzigen Trick.
wenn du das hinbekommst lernt dein Prof von dir,
oder er steinigt dich dafür.
>wenn ja, wie
lies alles was du über Bootloaderprogrammierung finden kanst.


ansonsten Nein.
Wenn du es richtig schulmäßig machen willst nimm nen I²C-EEPROM
wenn du auch größere Datenmengen speichern magst (Loggerfunktion oder 
PC-Formate)empfiehlt sich MM/SD

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