Mathias hat geschrieben:Ich habe gerade mit avr_sleep; rumprobiert.
Dies macht etwa das gleiche wie avr_nop;
Ähm, um den AVR schlafenzulegen, muss man vorher einige Register einstellen. Und auch sicherstellen, dass er wieder aufwacht. Das heisst, einen Timer- oder externen Interrupt scharfschalten.
Mit dem Sleep-Befehl kann man den Controller dann an dieser Programmstelle anhalten. Das heisst, das Programm bleibt hier stehen und der Stromverbrauch sinkt auf ein Minimum. Timer-Zähler, ADC-Wandlung usw. laufen aber weiter. Wird dann ein Timer ausgelöst, wird dessen Interrupt-Routine ausgeführt und danach macht das Programm an der Stelle nach dem Sleep-Befehl weiter.
Ein Sleep ohne Registereinstellung bringt genau das Gleiche wie ein Nop: Nichts, ausser einen Taktzyklus zu verbraten.
Bei Wdt = Watchdog-Reset das Gleiche. Der Watchdog muss vorher eingerichtet werden, und dann muss in regelmäßigen Abständen Wdt aufgerufen werden, um ein Reset zu verhindern.
Die Befehle in der intrinsics sind Kurzschreibweisen für asm cli end;...