IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Buffer type FITO--source non compris


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Buffer type FITO--source non compris
    programmation d'un buffer du type fifo circulaire,ici c le fito circulaire.

    g un probleme avec ce source ecrit en c,je comprend pas comment les valeurs retourné par les fonctions son calculer avec l'operateur binnaire (&)
    voici le source:
    definition de la structure:
    commentaire de l'auteur------->
    A structure stores the data and its pointers (as index values into the data array). The first
    word indicates the buffer length, which allows for a variety of buffer sizes. For speed, the
    buffer size is constrained to be a power of two.
    *******************************************************---
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef _CBUFFLEN_
    #define _CBUFFLEN_ 0x800
    #endif
    /* Circular buffer structure */
    typedef struct
    {
    WORD len; /* Length of data (must be first) */
    LWORD in; /* Incoming data */
    LWORD out; /* Outgoing data */
    LWORD trial; /* Outgoing data 'on trial' */
    BYTE data[_CBUFFLEN_]; /* Buffer */
    } CBUFF;
    *******************************************************---
    Implementation des fonction ki von calculer les longueurs envoyer ou pas encore envoyer ou envoyer et attente de confirmation(trial data)
    explication de l'auteur:
    In creating the buffer-handling software, it is important to retain a clear idea of what is
    meant by untried data (not yet sent), and trial data (sent but not acknowledged).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /* Return total length of data in buffer */
    WORD buff_dlen(CBUFF *bp)
    {
    return((WORD)((bp->in - bp->out) & (bp->len - 1)));
    }
    /* Return length of untried (i.e. unsent) data in buffer */
    WORD buff_untriedlen(CBUFF *bp)
    {
    return((WORD)((bp->in - bp->trial) & (bp->len - 1)));
    }
    /* Return length of trial data in buffer (i.e. data sent but unacked) */
    WORD buff_trylen(CBUFF *bp)
    {
    return((WORD)((bp->trial - bp->out) & (bp->len - 1)));
    }
    /* Return length of free space in buffer */
    WORD buff_freelen(CBUFF *bp)
    {
    return(bp->len ? bp->len - 1 - buff_dlen(bp) : 0);
    }
    /* Set all the buffer pointers to a starting value */
    void buff_setall(CBUFF *bp, LWORD start)
    {
    bp->out = bp->in = bp->trial = start;
    }
    *******************************************************---
    explication de l'auteur :
    When loading data into the buffer, the simple but slow method is to copy it byte-by-byte.
    Instead, I’ll use either one or two calls to a fast block-copy function, depending on whether
    the new data wraps around the end of the buffer. If the data is too big for the buffer, it is truncated,
    because I’m assuming the programmer has checked the free space before calling this
    function. The free space is always reported as one byte less than the actual space, so there is
    no danger of the input pointer catching up with the output pointer.

    *****************************************************---
    Les types utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define BYTE unsigned char
    #define WORD unsigned short
    #define LWORD unsigned long
    *******************************************************---

    Merci de votre attention

  2. #2
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut

Discussions similaires

  1. Type collection non compris par VB .net 2008
    Par toutounesan dans le forum VB.NET
    Réponses: 1
    Dernier message: 13/06/2011, 11h57
  2. type pointer non compris
    Par clouder dans le forum Débuter
    Réponses: 5
    Dernier message: 06/08/2010, 23h38
  3. Réponses: 4
    Dernier message: 01/07/2005, 17h20
  4. Combinaisons de type signés et non signés
    Par Hell dans le forum Langage
    Réponses: 4
    Dernier message: 01/11/2004, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo