Folgendes Problem: Ich möchte Daten, die ich in einem Programmablauf aufgenommen habe, nach einem Reset des Controllers (78K0, µPD78F0503) verwenden, dazu habe ich mir einen Speicherbereich im RAM reserviert. Beim auslesen des Speichers ist dieser aber leer, d.h. die Daten werden nicht gespeichert. Folgendermaßen gehe ich vor: im Linkerfile: -Z(CODE)VAR=0290-0293 in c: #pragma constseg = VAR __root unsigned int unMess[2]; void main () { . . unMess[0] = Messung1; ... } Was mach ich Falsch??? Danke.
Hallo Ich kenne deinen Controller nicht, aber in aller Regel verlieren RAMs ihren Speicherinhalt bei einem Reset. Gruss Michael
Hi, In der Tat das tun sie! Es handelt sich allerdings um ein ROM (mein Fehler!) Gruss
Hallo, dieser Meinung bin ich auch, ich denke nicht das dir NEC garantiert, dass nach einem Reset die Daten noch vorhanden sind. Ein RAM ist auch nicht dafür gedacht Daten zu speichern. Dafür solltest du dir eher ein EEProm in deiner Applikation zulegen. Gruß Michael
Mist zu spät, es ist nicht möglich mit dieser Zuweisung Daten in den ROM zu schreiben, dafür ist er nicht ausgelegt. Gruß Michael
Schon mal versucht, die Daten per Debugger nach nem Reset auszulesen? Vielleicht ist ja irgendie deine Adressierung durcheinander gekommen (was nicht sein sollte )
@sch_michael Wie kann ich dann Daten in den ROM schreiben (während der Programmausführung) ??? Mit der oben beschriebenen Methode wird das Option Byte und die ID eingestellt (funktioniert), wobei diese bei der deklaration definiert werden. @Si02 Ja, die Daten liegen nicht auf der gewünschten Adresse, sondern werden wie "normale" Variablen im (schätzungsweise) RAM gespeichert.
Der Inhalt von RAMs geht nicht mit einem Reset verloren, sondern nur bei Stromausfall. Hier wird das RAM vermutlich vom C-Startupcode gelöscht, ob und wie man das dem abgewöhnen kann, ist vom verwendeten Compiler abhängig. Ob und wie Daten vom Controller in das (Flash-)ROM des Controllers geschrieben werden können, ist vom verwendeten Controller abhängig und müsste im Datenblatt beschrieben sein, eventuell unter dem Stichwort "bootloader". Eventuell hat der Controller für diesen Zweck ja auch ein EEPROM, aber auch hier ist dies dem Datenblatt zu entnehmen.
Mit diesem Derivat können Daten nur über das Selfprogramming permanent gespeichert werden, dazu muss der FLMD0 auf High gezogen werden, und eine bestimmte Routine (vordefiniert von NEC) speichert die Daten Blockweise. Andere Möglichkeit: Eine eeprom Emulation ebenfalls von NEC erhältlich tut das was der Name schon sagt. Nachteil 2K Speicher werden benötigt Danke für eure Hilfe. Gruss Tim
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.