Zitat von
Dunkle Macht
... C++ Compiler ... in Sachen Befehlen recht sparsam ... zum Beispiel die microsekunden selber ... schreiben ...
Das scheint mir aber schon üblich zu sein. Ich verwende für Mikrosekunden auch eine selbst abgeschriebene/modifizierte/manchmalgeeichte Routine:
Code:
// =================================================================================
// ### Programm pausieren lassen !! Der Pausenwert ist nur experimentell !
void waitms(uint16_t ms)
{
for(; ms>0; ms--)
{
uint16_t __c = 4000;
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__c)
: "0" (__c)
);
}
}
// =================================================================================
Vorteil: diese Routine läuft, auch wenn (noch) kein Interrupt zugelassen ist.
Nachteil: diese Routine läuft NICHT als ISR - daher wartet der Controller tatsächlich - und tut sonst nix, ausser Strom verbraten. Weiterer Nachteil ist, dass jeder ISR dreinmeckern kann - und jeden noch so gut angepassten Zeitwert verfälscht.
Abhilfe: eine ähnliche Routine, die interruptgetrieben läuft.
Lesezeichen