www.mikrocontroller.net

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


Autor: cerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: cerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.