wie bekommt man einen delay in ein c Programm?

... komplette Frage anzeigen

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 

Antwort bewerten Vielen Dank für Deine Bewertung

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--){}

}

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von 3v1lH4x0R
04.05.2016, 16:12

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

0

Die Funktion die du suchst heisst delay. Parameter: Zeit in Millisekunden.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von hibas123
04.05.2016, 16:16

Er benutzt ja nicht Arduino sondern C. Da gibt es von haus aus keine Delay funktion

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);

}

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von hibas123
04.05.2016, 16:19

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
Kommentar von pasfabio
04.05.2016, 16:22

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

0
Kommentar von pasfabio
04.05.2016, 16:27

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

Was möchtest Du wissen?