Auch in C gibt es delay(ms). Ist auf jeden Fall einfacher als void. Wenn ich void warte ... nichts reinschreibe wird es einfach gelesen ohne Funktion.
Druckbare Version
Auch in C gibt es delay(ms). Ist auf jeden Fall einfacher als void. Wenn ich void warte ... nichts reinschreibe wird es einfach gelesen ohne Funktion.
delay() ist kein ANSI C oder C++ Befehl nach C99 oder C11 ANSI Standard.
Aber es kann natürlich theoretisch und praktisch möglich sein, dass es Plattform-spezifische Zusatzlibs gibt, die diesen Befehl implementiert haben.
Ich gehe mal davon aus, dass Du AVRStudio zusammem mit WINAVR benutzt. Dann steht Dir die Bibliotheksfunktion
zur Verfügung. Erläuterungen z.B. hier (klick). Die Bibliothek befindent sich (abhängig von Betriebssystem und Installation) z.B. in: C:\WinAVR-20100110\avr\include\util\delay.h AUF DEINEM Computer.
Sieht schon etwas komplexer aus als Deine Funktion ;-) :Sie funktioniert eine begrenzte Anzahl Millisekunden. Einschränkungen sind in der Funktionsbeschreibung im oben genannten Link zu nongnu.org und im Quelltext der _delay_ms ausführlich genannt. Lies das mal durch und - vielleicht Probierst Du mal das ? !Code:void
_delay_ms(double __ms)
{
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
}
return;
}
else
__ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
}