Forum: Compiler & IDEs initialer Wert von Variablen in Registern


von weisnix (Gast)


Lesenswert?

Hallo Forum,

werden Variable in Registern ala "asm R12" etc, eigentlich auch mit 0 
initialisiert ?
(scheint mir nicht so...)

2. Frage: ein "sleep" in Assembler ohne vorherige Aktion führt doch zum 
IDLE-Mode (ATTINY 2313) (ohne wesentliche Strom-Ersparnis oder ?

Vielen Dank,

weisnix

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Der Inhalt duerfte zufaellig sein, das hat SRAM so an sich... ein 
Register zu lesen ohne es vorher initialisiert zu haben duerfte generell 
eine schlechte Idee sein -- es sei denn man will Zufall lesen ;)

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Weisnix,

WinAVR hat eine Power-Up-Routine, die alle Hardware-Register loescht, 
bevor sie main() aufruft.



Ciao
Wolfgang Horn

von weisnix (Gast)


Lesenswert?

Wat denn nu ??? ;-)


(Trotzdem vielen Dank für die Antworten !)

von Simon K. (simon) Benutzerseite


Lesenswert?

Register hat nichts mit RAM zu tun. Und ich würde auch nicht darauf 
wetten, dass das Startup Script Register löscht.

von weisnix (Gast)


Lesenswert?

das Ganze mal nach oben bring

1. Frage:Initilaer Wert von Variablen in Registern: Weiß es keiner genau 
??

2. Frage
Hat jemand eine Ahnung von meinem Problem mit dem Sleep-Mode

Danke schon mal für die Antworten

von anonymous (Gast)


Lesenswert?

Probier es doch einfach aus...

Einfach den Wert des Registers auf ein LCD ausgeben, dann siehst du die 
Werte!

von weisnix (Gast)


Lesenswert?

Es geht mir auch um die Zuverlässigkeit unter verschiedenen 
Startbedingungen (z.B. uC nur kurz aus usw.) - Falls die Register nicht 
0 gesetzt werden, könnte das Verhalten z.B. auch von verschiedenen 
Chargen abhängen.

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


Lesenswert?

Die Register werden nicht verändert.  Ich bin mir nicht ganz sicher,
ob sie beim power-up reset von der Hardware auf 0 gesetzt werden.

Ja, ein sleep_mode() geht by default in den idle mode.  Nein, auch
der spart schon einiges an Strom, nur eben nicht so viel wie die
Modi, die auch den Hauptoszillator ausschalten können.  Wie viel
genau, steht in den typischen Werten des Datenblatts deines AVRs.

von weisnix (Gast)


Lesenswert?

Ok, dann muß ich halt noch etwas Platz einsparen und die Variablen 
ordentlich initialisieren.

Lt. Datenbalatt spart man ca 2..3 mA im Idle (bei 5V 8Mhz internem Takt 
(ATTINY 2313)) - hängt natürlich von der Idle-Zeit ab; hier war schon 
die Meinung zu hören, es würde in der Praxis keinen relevanten 
Unterschied machen.

Vielen Dank,

das hilft mir jetzt erst mal weiter.

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


Lesenswert?

Naja, ich finde einen Verbrauch von 1,5 mA statt 5 mA schon eine ganz
nette Einsparung, wenn man in der Zeit ohnehin nichts tun kann.  Bei
mir hat die main loop standardmäßig mittlerweile eigentlich ein
sleep_mode() am Ende.  Ob man damit nun wirklich in der Praxis was
einspart, hängt wohl wesentlich davon ab, welchen Anteil das Schlafen
am Ende hat.  Im Höchstfalle kann man offenbar etwas mehr als 2/3 der
Energie damit sparen oder anders gesagt, die dreifache Batterie-
lebensdauer erreichen.

von Falk B. (falk)


Lesenswert?

@ weisnix (Gast)

>Lt. Datenbalatt spart man ca 2..3 mA im Idle (bei 5V 8Mhz internem Takt
>(ATTINY 2313)) - hängt natürlich von der Idle-Zeit ab; hier war schon
>die Meinung zu hören, es würde in der Praxis keinen relevanten
>Unterschied machen.

Sleep Mode

MFG
Falk

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.