Forum: Mikrocontroller und Digitale Elektronik dsPIC33 data memory löschen


von dieter (Gast)


Lesenswert?

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

von Der Rächer der Transistormorde (Gast)


Lesenswert?

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.

von Simon (Gast)


Lesenswert?

Hallo,
ich nutze den C30 Compiler von Microchip.

Grüße,
Simon

von Peter D. (peda)


Lesenswert?

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

von Ste N. (steno)


Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Simon (Gast)


Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

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
Noch kein Account? Hier anmelden.