wie bekommt man einen delay in ein c Programm?

4 Antworten

Es gibt 4 grobe Wege, um zeitgesteuert Code abzuarbeiten:

a) Schleife mit festen Befehlen (siehe Vorschlag hibas123) mit 2 großen Nachteilen: 1. muss die Zeitmessung der Hardware angepasst werden und 2. zieht dieses "Warten auf CPU-Abarbeitung" genau 100% CPU-Last für 1 Kern

Vorteil: Abbruch-Stelle kann eingebaut werden

b) delay & sleep-Wege: http://ubuntuforums.org/showthread.php?t=1357606

https://msdn.microsoft.com/de-de/library/windows/desktop/ms686298(v=vs.85).aspx

Vorteil: während des Wartens 0% CPU-Last für diesen Thread; Hardware-unabhängig; kurzer Code

Nachteil: während des Wartens kein Abbruch möglich!! (höchstens wenn ein 2. Thread diesen ersten Thread hart beendet; oder 2 Schleifen mit mehreren kurzen sleep)

c) Timer: statt in einer Codezeile zu warten, definiert man einen Timer, der zu bestimmten Zeiten Ereignisse auslöst und die Zustände (Deine LED) definiert ändert -> auch 0% CPU-Last -> dafür erlaubt der Code jedoch während des Wartens andere Dinge (weitere Timer) oder einen vorzeitigen Abbruch!

d) Multitasking: noch mehr Freiheiten und noch genauer (bis zu µs), aber auch noch komplizierter 

Fu brauchst nicht direkt eine delay funktion. Du musst deinem Prozessor in der zeit einfach irgendetwas zu machen geben. Ich würde ne einfache for funktion schreiben:

Funkt(int ticks){

For(;ticks <=0;ticks--){}

}

In die Bedingung gehört >=... Sonst muss man die Tick anzahl negativ angeben. Dies ist verwirrend

0

Die Library wäre:

util/delay.h

und die zugehörigen Funktionen:

_delay_ms() für Millisekunden
_delay_us() für Mikrosekunden

Also in etwa:

#include <util/delay.h>

while(1){

_delay_ms(1000);

}

Kommt drauf an welches C er verwendet. Meine lösung ist universell. Die benötigte Zeit kann man sich mithilfe der Tacktrate und der anzahl an befehlen ausrechnen

0

der compiler meckert bei lib rum "no such file or directory"

0

int led = 0;

while (led<3) {

led = led+1;

printf("%i\n, led);

delay(3000);

led = led -1;

printf("%i\n, led);

}


das ist das wichtigste...ich kann den code nicht rein kopieren aus irgendwelchen gründen..

0
@pasfabio

Benutz du Atmel-Studio dafür oder irgendeinen anderen C-Compiler mit eigenen Librarys?

0

Was möchtest Du wissen?