Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Schleife: Anstatt Sekunden doch lieber Millisekunden

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Marcel_F



Anmeldungsdatum: 13.12.2006
Beiträge: 35

BeitragVerfasst am: 21. Feb 2007 11:11   Titel: Schleife: Anstatt Sekunden doch lieber Millisekunden

Hallo,

ich möchte in einer Delay-Funktion eine bestimmte Zeit warten, um einen Strom einem bestimmten Wert rampenförmig anzunähern.

Eine Schleife die das in Sekunden macht hab ich. Das ist aber etwas zu lang. Daher brauche ich Millisekunden (+-100).

Geht das mit der time.h oder muss ich da andere Wege einschlagen? und wenn ja, welche?

Danke für die Hilfe


Code:

void secDelay(double x){
   time_t start, stop;
   long
   double diff;

   printf("Einen Augenblick bitte ...\n");
   start=time(NULL);
   while((diff=difftime(stop,start)) != x)
   stop=time(NULL);
   printf("%.1f sek. vorbei!!\n",diff);
}


in der time.h steht z.B. :
Zitat:

time_t tv_sec Seconds.
long tv_nsec Nanoseconds


ich kann aber nichts damit anfangen (nichtsblick?)
 
Benutzer-Profile anzeigen Private Nachricht senden

Marcel_F



Anmeldungsdatum: 13.12.2006
Beiträge: 35

BeitragVerfasst am: 21. Feb 2007 11:25   Titel:

ich sollte besser nicht von einer Schleife sprechen, sondern von einer Funktion ;-D
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 21. Feb 2007 19:41   Titel:

Bau keine Busyloops! Das ist ein ganz böses AUA!

Wenn du eine bestimmte Zeit warten musst, rufe dafür immer eine Funktion auf, die den Kernel anweist, zu warten. Dann kann der den Prozessor in der Wartezeit nämlich einem anderen Prozess zuteilen oder heruntertakten.

$ man usleep
$ man nanosleep
$man select

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Marcel_F



Anmeldungsdatum: 13.12.2006
Beiträge: 35

BeitragVerfasst am: 22. Feb 2007 8:34   Titel:

hi,

usleep() hab ich gestern schon gefunden. Die beiden anderen kannte ich noch nicht.
Danke!
Wobei ich select() nicht ganz blicke. Ist doch mehr für Dateizugriffe oder? Es müssen auch so viele Parameter mit gegeben werden ...

Mit usleep() scheint es vorerst zu funktionieren.

Wie kann ich es bewerkstelligen das ich in der Zeit etwas anderes abarbeiten kann? Bei Mikrocontrollern setze ich einen Timer, der mir einen Interrupt liefert wenn er abgelaufen ist. Bei einem OS ist das vermutlich komplizierter?

Gruß m
 
Benutzer-Profile anzeigen Private Nachricht senden

tom servo



Anmeldungsdatum: 01.06.2004
Beiträge: 225

BeitragVerfasst am: 22. Feb 2007 9:25   Titel:

Marcel_F hat folgendes geschrieben::
Wie kann ich es bewerkstelligen das ich in der Zeit etwas anderes abarbeiten kann?

In deinem Programm? Ich vermute du suchst Threads.Ansonsten laufen separate Programm eh "parallel".
Code:
man pthreads

Wobei ich noch nie mit pthreads gearbeitet habe. Vielleicht weiß Janka oder sonstwer mehr.
Wenn du mit Threads arbeiten willst, solltest du dich darüber erstmal informieren. Ich verweise mal einfach auf die Suchmaschine deiner Wahl. Wink
Marcel_F hat folgendes geschrieben::
Bei Mikrocontrollern setze ich einen Timer, der mir einen Interrupt liefert wenn er abgelaufen ist. Bei einem OS ist das vermutlich komplizierter?

Naja, Interrupts können auch auf z.B. High-Low-Wechsel reagieren, abgeschlossene ADC... aber wir schweifen ab. Very Happy

cu
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 22. Feb 2007 13:40   Titel:

Marcel_F hat folgendes geschrieben::
hi,

usleep() hab ich gestern schon gefunden. Die beiden anderen kannte ich noch nicht.
Danke!
Wobei ich select() nicht ganz blicke. Ist doch mehr für Dateizugriffe oder? Es müssen auch so viele Parameter mit gegeben werden ...

Code:

struct timeval wartezeit;
...
select(0,NULL,NULL,NULL,&wartezeit);

wartet einfach nur. Sehr portabel.


Zitat:

Wie kann ich es bewerkstelligen das ich in der Zeit etwas anderes abarbeiten kann? Bei Mikrocontrollern setze ich einen Timer, der mir einen Interrupt liefert wenn er abgelaufen ist. Bei einem OS ist das vermutlich komplizierter?

Ja. Entweder du benutzt mehrere Prozesse, die Daten austauschen, die laufen sowieso parallel. Oder du benutzt Pseudoprozess-Threads (z.B. pthread, wie der Vorposter schon empfahl). Oder du legst die zeitkritischen Teile deines Programms in den Kernelspace, indem du einen Gerätetreiber dafür schreibst -- dann kriegst du auch wieder Interrupts.

Janka
_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy