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
Ich möchte es in das Flash speichern. (Program Memory) Habe nochmal im Datasheet nachgesehen - > im Programmemory (Flash) ist lesen und schreiben möglich
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
Dann hast Du das Datenblatt mit einer gewissen Freizügigkeit interpretiert. Zwar ist Flash-ROM in der Tat beschreibbar, aber dazu muss es vorher gelöscht werden, und das geht nicht mit einzelnen Speicherzellen, sondern nur mit recht großen Blöcken. Du willst das EEPROM verwenden. Wirklich.
aber nicht zur laufzeit Das Flash ist dem Code vorbehalten Daten gehören dort nur rein wenn sie Konstanten sind. Das Flash wird außerdem beim programmieren sequentiell pageweise beschrieben.
@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
************* The Flash program memory is readable, writable and erasable during normal operation over the entire VDD range. ************ -->so stehts im datasheet. Wieso sollt ich nichts hineinspeichern können
>************* >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.
Ich habe mir aber gedacht, dass mir der Befehl memcpypgm2ram bzw. memcpyram2pgm die arbeit abnimmt??? Wie soll ich jetzt am besten vorgehen???
<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
>@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.
Winne, das stimmt so definitiv nicht. Schaut mal hier: http://forum.microchip.com/printable.aspx?m=55318 Und schaut Euch mal den Beitrag von "chsekhar" (Sep. 13, 2005 10:00:02 PM) an. Der hat praktisch das, was im Kapitel 6 des Datasheets steht, in C-Funktionen gegossen. Geht doch ;-) Gruss, Dirk
Mist, immer diese Überschneidungen... Das mit dem "stimmt so nicht" bezog sich auf "wenn es der chip bleiben soll muss externes EEprom (oder ne MMC/SD) drann"...
@ 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.
Ich kenn mich jetzt gar nicht mehr aus: :-( Bin leider noch Anfänger auf diesem Gebiet. Ich muss den PIC18F97J60 verwenden. Kann ich jetzt Daten im Flash speichern(wenn ja, wie) odre brauche ich ein externen EEPROM???
@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
@ 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
@ all Danke für die vielen Antworten. Brauche das für meine Diplomarbeit (HTL). Werde es gemeinsam mit meinen Betreuern versuchen.
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.