Forum: Compiler & IDEs Was maccht Volatille asm("sleep"::)


von cerberus (Gast)


Lesenswert?

Hallo liebe Forengemeinde,
gestern hatte ich wieder mal ein Schlüsselerlebnis.

Was passiert eigentlich bei volatile asm ("sleep"::) zzw etwas genauer, 
was tut das Volatile darin und was haben die Doppelpunkte am Ende zu 
bedeuten?

Ach ja, und wie weckt man den Kollegen aus diesem Dornröschenschlaf dann 
wieder auf?

Da es hier nicht gerne gesehen wird, wenn mehrere Fragen in einem Fred 
gestellt werden, nerve ich Euch mit Fragen wie
"warum frisst das Aas im Sleep-Modus immer noch 3 mA?
"wie kann man das weiter reduzieren?"
später.

von Rolf Magnus (Gast)


Lesenswert?

> Was passiert eigentlich bei volatile asm ("sleep"::) zzw etwas genauer,
> was tut das Volatile darin und was haben die Doppelpunkte am Ende zu
> bedeuten?

Das volatile stellt sicher, daß der Compiler nicht auf die Idee kommt, 
es wegzuoptimieren. Die Doppelpunkte trennen die (in diesem Fall eben 
leeren) Operandenlisten vom Assemblercode ab. Die könnte man aber auch 
weglassen.

> Ach ja, und wie weckt man den Kollegen aus diesem Dornröschenschlaf
> dann wieder auf?

Kommt auf die Prozessorarchitektur an.

> Da es hier nicht gerne gesehen wird, wenn mehrere Fragen in einem Fred
> gestellt werden, nerve ich Euch mit Fragen wie
> "warum frisst das Aas im Sleep-Modus immer noch 3 mA?
> "wie kann man das weiter reduzieren?"
> später.

Auch die Antworten darauf hängen stark von der Zielarchitektur ab.

von Wolfram (Gast)


Lesenswert?

Lies das Tutorial (AVR-GCC-Tutorial) vielleicht noch etwas der gcc 
Dokumentation und anschließend das Datenblatt des AVR (welche Typ 
solltest du wissen) das gibt heute garantiert noch ein paar 
Schlüsselerlebnisse.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus wrote:

> Das volatile stellt sicher, daß der Compiler nicht auf die Idee kommt,
> es wegzuoptimieren.

Wegoptimieren wird er inline-asm-Code sowieso nicht, aber der Optimizer
darf es ohne volatile wohl noch hin und her schieben.  Habe ich aber
(zumindest bei AVR) noch nie wirklich erlebt.

Für den OP: lies dir die Doku zu <avr/sleep.h> einfach mal durch
(zusätzlich zum Datenblatt natürlich).

von cerberus (Gast)


Lesenswert?

@Wolfram
Welch hilfreicher Beitrag. Möge ein ADAC-Mitarbeiter Dir nachts um 10 
auf einer einsamen Landstrasse eine genau so grosse Hilfe sein. ;-)

@alle anderen
Danke erst mal. Mein Prozessor will aber aus dem Schlaf nicht mehr 
erwachen. Ich habe aber inzwischen einen Stacküberlauf in Verdacht. Ich 
prüfe das mal dieser Tage.

von Rolf Magnus (Gast)


Lesenswert?

> @Wolfram
> Welch hilfreicher Beitrag.

Wie hilfreich er ist, kommt darauf an, ob du es beherzigst. Es ist 
nämlich durchaus ein guter Rat. Es ist eigentlich immer sinnvoll, 
erstmal zu versuchen, sich selbst kundig zu machen, statt immer gleich 
nachzufragen, vor allem, wenn es um eher grundlegende Dinge geht.
Letztendlich ist aber die Frage, wie man den Prozessor wieder aufweckt, 
auch zu unpräzise, um eine konkrete Antwort geben zu können.

> Möge ein ADAC-Mitarbeiter Dir nachts um 10 auf einer einsamen
> Landstrasse eine genau so grosse Hilfe sein. ;-)

Naja, wenn er diesen sowas fragt wie "Wenn ich den Blinker einschalte, 
geht im Armaturenbrett immer so ein kleines grünes Licht dauernd an und 
wieder aus, was bedeutet das?", dann wäre eine ähnliche Antwort durchaus 
gerechtfertigt. ;-)

> @alle anderen
> Danke erst mal. Mein Prozessor will aber aus dem Schlaf nicht mehr
> erwachen.

Du hast immer noch nicht erwähnt, was für ein Prozessor. Die anderen 
nehmen an, daß es irgendein AVR ist. Da du das bisher nicht dementiert 
hast, wird's wohl auch einer sein. Die Informationen reichen dann aber 
immer noch nicht für eine Antwort. Bei den AVRs gibt's nämlich mehrere 
Sleepmodi (welche und wieviele hängt vom Typ ab). Je nach Modus gibt es 
unterschiedliche Methoden, mit denen man ihn aufwecken kann. Darüber, 
welchen Modus du verwendest und wie du ihn wieder aufwecken willst, hast 
du aber auch nichts geschrieben.

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.