Hallo Zusammen, ich arbeite mit dem dsPIC33FJ32MC202 und möchte, dass nach einem MCLR alle Variablen gelöscht werden, sprich data memory löschen. Ein Bekannter hat gemeint, dass es hier eine Funktion über den Compiler geben könnte, leider habe ich nichts im user guid gefunden. Habt Ihr vielleicht eine Idee? Grüße, Simon
Welcher Compiler gemeint ist wäre schon ein wenig hilfreich. Meist macht das aber der Programmierer selber da es so oder so auf eine Schleife rausläuft.
Wenn man mitten im Programm alle globalen Variablen neu initialisieren will, dann springt man einfach zum Resetvector. Dadurch führt das C-Programm wieder den Startup-Code aus. Peter
Hallo Simon, das macht MPLAB automatisch für dich. Dein Programm spingt nach einem Reset in eine Initialisierungsroutine. Unter "Project/Build Options.../Project/MPLAB LINK30/Don't initialize data sections" kannst Du es aber auch ausschalten und mußt dann den RAM selbst initialisieren. Viele Grüße, Steffen
Zum Resetvektor zu springen ist eine schlechte Idee. Dann werden zwar die Variabeln neu initialisiert, aber die Register eben nicht. Die Ganze Hardware hat dann noch den alten Zustand. Besser ist gleich einen Reset auszuloesen. Dann werden alle Register auf den im Manual beschriebenen Zusatnd gesetzt.
Pico Oschi schrieb: > Zum Resetvektor zu springen ist eine schlechte Idee. Kommt drauf an. Wenn man alle Init-Funktionen sauber schreibt, setzen die dann die Hardware in den gewünschten Zustand unabhängig vom vorherigen Zustand. Vor dem Sprung zu Resetvector muß man noch die Interrupts global abschalten. Hat der MC einen Software-Resetbefehl, kann man natürlich diesen ausführen. Aber den hat nicht jeder MC. Peter
mein Problem ist, dass sich der dsPIC nach einem POR (Spannung kurz weg) anderst verhält als nach einem MCLR (z.B. nach dem programmieren). Grund hierfür ist denke ich die unsaubere Initiallisierung der Variablen. Da ich den Quellcode nicht selbst geschrieben habe, ist es wohl der schnellste Weg einfach nach jedem MCLR die Daten zu löschen. Gruß, Simon
Man kann auch einen externen Resetbaustein vewenden. Der macht dann bei einem Brownout einen zuverlaessigen Reset. Es gibt solche Controller Familien, da macht das durchaus Sinn.
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.