Forum: Mikrocontroller und Digitale Elektronik STM32: Flash OFF? Codeausführung von RAM?


von Jens (Gast)


Lesenswert?

Hallo,
ich beschäftige mich gerade mit der Minimierung der Stromaufnahme eines 
STM32L0 Prozessors. Die Sromaufnahme zwischen Codeausführung von RAM und 
Flash unterscheidet sich doch noch einmal merklich.

Frage 1: Wie bringt man den Porozessor zur Code-Ausführung per RAM. Wird 
der Prgrammspeicher beim Start zuerst in den RAM kopiert und dann von 
dort ausgeführt? Code für RAM und Flash sind ja nicht kompatibel und 
müssen für jeden Speicherbereich individuell kopiert werden.

Frage2: Im Datenblatt ist eine Option Flash OFF angegeben. Geht dies 
automatisch mit der Ausführung vom RAM einher oder kann man auch den 
Flash, zB für eine Sleep-Phase aussschalten?

Danke :)

von Gretel (Gast)


Lesenswert?

> Wird der Prgrammspeicher beim Start zuerst in den RAM kopiert

Richtig.

> Geht dies automatisch mit der Ausführung vom RAM einher

Automatisch geht gar nichts.

Solange du solche Fragen nicht selber beantworten kannst,
nimm einen kleinen 8 Bitter.

von Bulimie-code (Gast)


Lesenswert?

- Startcode anpassen
- Linkerfile anpassen

von Jürgen S. (starblue) Benutzerseite


Lesenswert?

Jens schrieb:
>
> Frage 1: Wie bringt man den Prozessor zur Code-Ausführung per RAM. Wird
> der Prgrammspeicher beim Start zuerst in den RAM kopiert und dann von
> dort ausgeführt?

Normalerweise nicht (bei kleinen Mikrocontrollern mit internem Flash).

> Frage2: Im Datenblatt ist eine Option Flash OFF angegeben. Geht dies
> automatisch mit der Ausführung vom RAM einher oder kann man auch den
> Flash, zB für eine Sleep-Phase aussschalten?

Bevor du den Flash-Speicher abschaltest, musst du dafür sorgen, dass er 
nicht gebraucht wird.  D.h. der ausgeführte Code und ggf. die 
Vektortabelle müssen vorher ins RAM verlegt werden.

Automatisch geht das nicht.

von Christopher J. (christopher_j23)


Lesenswert?

Gretel schrieb:
> Solange du solche Fragen nicht selber beantworten kannst,
> nimm einen kleinen 8 Bitter.

Am besten einen AVR. Der kann überhaupt keinen Code aus dem RAM 
ausführen. Problem gelöst.

Spaß beiseite.

Bulimie-code schrieb:
> - Startcode anpassen
> - Linkerfile anpassen

Das sind die richtigen Hinweise.

von foobar (Gast)


Lesenswert?

> Am besten einen AVR. Der kann überhaupt keinen Code aus dem RAM
> ausführen. Problem gelöst.

Oder einen GD32, der führt es immer aus dem RAM aus[1] ;-)



[1] 
https://zeptobars.com/en/read/GD32F103CBT6-mcm-serial-flash-Giga-Devices

von Jim M. (turboj)


Lesenswert?

Jens schrieb:
> ich beschäftige mich gerade mit der Minimierung der Stromaufnahme eines
> STM32L0 Prozessors. Die Sromaufnahme zwischen Codeausführung von RAM und
> Flash unterscheidet sich doch noch einmal merklich.

Falsche Baustelle.

Diese Sorte Prozessoren schickt man mit __WFI() in den Schlafmodus. Es 
is ziemlich egal wo die Codeausführung statt findet wenn der Prozessor 
>90% der Zeit schläft.

von avr (Gast)


Lesenswert?

Jim M. schrieb:
> Falsche Baustelle.
>
> Diese Sorte Prozessoren schickt man mit __WFI() in den Schlafmodus. Es
> is ziemlich egal wo die Codeausführung statt findet wenn der Prozessor
>>90% der Zeit schläft.

Das musst du ja wissen. Es gibt durchaus Anwendungen, in denen der 
Prozessor nicht die ganze Zeit schlafen darf. Z.B. weil die 
Interruptlatenz eine Rolle spielt. Der normale Sleep bringt übrigens 
fast gar nichts. Da kann man auch die Taktfrequenz reduzieren.

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.