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 :

Gestion d'un buffer circulaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut Gestion d'un buffer circulaire
    Bonjour,

    J'avais déjà traité cette question dans un post précédent mais cette fois les données sont différentes.

    J'ai un buffer circulaire qui doit recevoir des données venant d'un bus CAN avant de les utiliser pour la génération d'un signal en sortie (fonction ECT).

    J'utilise un µc MC9S12XDP512.


    J'ai donc un compteur qui s'incrémente lorsque je viens écrire une donnée dans le buffer et un deuxième compteur qui s'incrémente lorsque je viens lire une donnée.
    Pour mon projet je dois absolument éviter que la mémoire se retrouve pleine ou vide.

    Dans le cas d'une mémoire pleine je voudrais envoyer une trame via le bus can pour stopper la transmission des données. (mais ça c'est un autre problème)

    Pour gérer ces alertes j'ai pensé à utiliser un modulo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (taille_buffer + (cpt_write - cpt_read))%taille_buffer
    En gros quand je me retrouve situation d'alerte ce calcul = 0

    Mais je ne sais pas faire la différence entre la mémoire vide et pleine.

    Comment je pourrais faire cette différence ?

    Merci d'avance,

  2. #2
    Membre actif
    Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Avril 2013
    Messages : 77
    Par défaut
    En effet avec cette méthode tu ne peux pas différencier le fait que ton buffer soit plein ou vide.

    A première vue, je dirais que tu as besoin d'une variable supplémentaire, indiquant le nombre de données. Du coup, tu aurais un pointeur de lecture, un pointeur d'écriture et un compteur de données.

    Est ce qu'une fois que tu as lu une donnée, tu réaffectes une valeur (par exemple -1)? Si tel est le cas, cela pourrait être une autre solution pour savoir si ton buffer est plein ou vide (en testant l'une des cases quand tu es dans le cas où (taille_buffer + (cpt_write - cpt_read))%taille_buffer = 0)

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Par défaut
    Ah oui.

    En gros je commence par faire le test du modulo et si le résultat = 0 je test la valeur de la case où le compteur (quelqu'il soit) se trouve si elle est égale à 1 alors la mémoire est vide et dans le cas contraire elle est pleine.


    En code ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if ((taille_buffer + (cpt_write - cpt_read))%taille_buffer != 0){
     
    //utilisation des données
    }
    else {
          if (buffer [cpt_write] == 1) {
              //Mémoire vide
          }else{
              //Mémoire pleine
          }
    }
    Je ne me trompe pas ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Buffer Circulaire C#
    Par apelleti dans le forum C#
    Réponses: 2
    Dernier message: 19/05/2008, 15h19
  2. Réponses: 12
    Dernier message: 27/03/2008, 22h01
  3. Liaison série, Buffer Circulaire ?
    Par innosang dans le forum Ubuntu
    Réponses: 2
    Dernier message: 26/12/2007, 21h52
  4. Cree un buffer circulaire
    Par caesarvanou dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/06/2006, 10h59
  5. buffer circulaire
    Par fumble dans le forum C
    Réponses: 34
    Dernier message: 10/03/2005, 08h51

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