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 über

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


Anmelden zum Antworten