brauche Timeout
-
Hallo Welt,
ich muss gerade einen ziemlich ekligen Standard durcharbeiten.
Das ganze ist ein Hardware Design.Naja, ich bin jetzt in einem Zustand/Funktion, wo ich immer die Fifo abfragen muss, ob Daten anliegen. Liegen nach 500ms immer noch keine an, soll ich den Zustand/Funktion wechseln.
Hat jmd 'ne Idee, wie ich das machen könnte?
Hilft mir timer.h weiter?
Oder vielleicht die hat_fifo_Daten() Funktion als Thread und den dann nach 500ms killen, wenn's bis dahin keine Rückmeldung gab?Wäre echt super wenn mir jmd Denkanstöße geben könnte.
-
Wenn du deinen Inputkanal als Filedeskriptor formulieren und POSIX verwenden kannst, bietet sich
#include <unistd.h> int select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
an.
Den Timeout kannst du überstruct timeval
aus <sys/time.h> mikrosekundengenau einstellen.
Hat alles nichts mit Standard C zu tun, gehört nicht hierher.
-
Mit time.h kannst du zB sowas machen:
void busy_wait(int msec) { clock_t until; until = clock() + (msec * (CLOCKS_PER_SEC / 1000)); while (clock() < until) ; }
Aber das is nich schön
-
gary1195 schrieb:
Mit time.h kannst du zB sowas machen:
void busy_wait(int msec) { clock_t until; until = clock() + (msec * (CLOCKS_PER_SEC / 1000)); while (clock() < until) ; }
-
also, es handelt sich um ein Xilinx Microblaze-Design.
Die Fifo lese ich so aus:
do{ getFSLx(var, PORT, NONBLOCKING); fsl_isinvalid(invalid); }while(invalid);
Ich hänge also in einer while-Schleife, bis der Lesevorgang geklappt hat.
Wo könnte ich hier einen Timeout setzen? Es müsste wohl so in der Richtung sein, oder?
// set timer // while ( timer nicht abgelaufen) do{ do{ getFSLx(var, PORT, NONBLOCKING); fsl_isinvalid(invalid); }while(invalid); // }
Welche Libs und Aufrufe könnte ich dafür verwenden?
-
kennt sich jmd mit poll() aus?
Kann man damit vielleicht was machen?
-
olpo schrieb:
also, es handelt sich um ein Xilinx Microblaze-Design.
Die Fifo lese ich so aus:
do{ getFSLx(var, PORT, NONBLOCKING); fsl_isinvalid(invalid); }while(invalid);
Ich hänge also in einer while-Schleife, bis der Lesevorgang geklappt hat.
Wo könnte ich hier einen Timeout setzen? Es müsste wohl so in der Richtung sein, oder?
// set timer // while ( timer nicht abgelaufen) do{ do{ getFSLx(var, PORT, NONBLOCKING); fsl_isinvalid(invalid); }while(invalid); // }
Welche Libs und Aufrufe könnte ich dafür verwenden?
Wenn du ein komplettes MicroBlaze Controller System hast, dann hast du auch Timer (PIT) zur Verfügung. Schau hier: http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_4/ds865_microblaze_mcs.pdf
(Seite 6)