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 :

A propos d'une "type enum"


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut A propos d'une "type enum"
    Bonjour à tous,
    Pour un TPE au lycée cette année je me suis lancé dans la programmation d'un robot en C.
    Je peux communiquer avec ce robot via une interface branchée sur le port série COM1, et un code source récupéré sur le net avec la fonction main vide.
    J'ai une erreur lors de la communication avec cette interface, mais je ne parviens pas à savoir laquelle.
    Dans le code source ci dessous, voyez que dans ma fonction main j'aimerai ouvrir la communication, puis contrôler les erreurs, puis émettre un caractère, puis contrôler les erreurs etc.
    La variable g_ErrCom récupère apparament les erreurs, mais je ne sais pas comment l'interroger, puisqu'elle fonctionne apparement avec e_ErrCom qui est une "type enum" et que je ne connais pas le fonctionnement de ce type.
    Si vous pouviez m'aider à voir comment je pourrais récupérer les erreurs, ce serait sympa. Merci beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Définition du code d'erreurs 
    typedef enum 
    { 
        e_ErrCom_None,        // Pas d'erreur 
        e_ErrCom_Creation,    // Erreur lors de la création du flux 
        e_ErrCom_Utilise,        // Le port com est déjà utilisé 
        e_ErrCom_Inexistant,    // Le port com n'existe pas 
        e_ErrCom_Timeout,    // Timeout lors d'une émission-réception 
        e_ErrCom_Emission,        // Erreur lors de l'émission 
        e_ErrCom_Reception,        // Erreur lors de la réception 
        e_ErrCom_Definition_Trame,    // Erreur de définition de la trame 
        e_ErrCom_Nack,    // Demande non prise en compte 
        e_ErrCom_Checksum        // Erreur de checksum 
    } e_ErrCom;
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    int main (void) 
    { 
        /* Variable qui va contenir les caractères reçus */
        unsigned int je_recois=0;
     
        /* Variable qui rapporte le nombre de caractères lus */
        unsigned int ai_lu=0;  
     
        /* Configuration du port serie :
         * Communication sur le port COM1
         * Débit de 9600 bits/s
         * 8 bits de données
         * Pas de bit de parité
         * 2 bits d'arrêt         */   
        g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PAS_DE_PARITE,BIT_DE_STOP_2);
     
        /* On contrôle si l'ouverture du port ne retourne pas d'erreur */
        /* DEFINIR UN CODE ICI */
     
     
        /* Envoi du caractère L qui interroge
         * le robot sur la position de ses axes */
        g_ErrCom=EmissionCom("L",sizeof("L"));  
     
        /* On contrôle si l'émission au port ne retourne pas d'erreur */
        /* DEFINIR UN CODE ICI */
     
        /* Réception des coordonées des axes 
         * C'est une série de 20 chiffres */
         g_ErrCom=ReceptionCom(&je_recois ,20, &ai_lu);
     
         /* On contrôle si la réception ne retourne pas d'erreur */
        /* DEFINIR UN CODE ICI */ 
     
        /* Affiche :
         * Le nombre de caractères reçus
         * Les caractères reçus */
         printf("Nombre de caracteres recus : %d \nCaracteres recus : %d",ai_lu,je_recois);
     
     
        /* Attente de l'appui d'une touche */
        getch();
     
        /* Le programme renvoie 0 
         * pour signaler qu'il s'est terminé de manière correcte */
        return 0;
     
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le enum, c'est un peu comme si tu avais fait plein de #define à la suite avec des nombres croissants (il y a des différences, bien sûr, mais je ne les connais pas en détails)

    En fait, dans le cas présent, tous les composants de l'enum sont des constantes. Si une fonction te renvoie un enum e_ErrCom, alors sa valeur est forcément l'une des valeurs de l'enum.

    Alors, tu peux comparer la valeur retournée avec chaque valeur de l'enum, faire un switch, etc: tout ce que tu peux faire avec des constantes.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    La première chose est de déclarer la variable g_ErrCom (je n'ai pas vu sa déclaration dans ton code)
    A chaque appel d'une fonction ---com, il faut donc tester la valeur de retour placée dans g_ErrCom.
    Si g_ErrCom==e_ErrCom_None, tout s'est correctement passé. sinon, il faut tester g_ErrCom pour les autres valeurs possibles , sans doute afficher un message d'erreur un peu explicite pour l'utilisateur ou retenter l'exécution de la fonction ---como ou ... ca dépend de ce qu'on veut faire en cas d'erreurs
    A noter que toutes les erreurs ne peuvent sans doute pas se produire pour une fonction ---com donnée ce qui limite le nombre de tests en cas d'erreurs.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_ErrCom=OuvreCom(PORT1,V9600,BITS_8,PAS_DE_PARITE,BIT_DE_STOP_2);
    peut renvoyer
    e_ErrCom_None pas d'erreur , c'est parfait, on continue
    ou e_ErrCom_Utilise,
    ou e_ErrCom_Inexistant,
    peut être e_ErrCom_Creation ou e_ErrCom_Nack
    mais pas
    e_ErrCom_Checksum ,e_ErrCom_Timeout,e_ErrCom_Emission,e_ErrCom_Reception, e_ErrCom_Definition_Trame
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup à tous les deux.
    A noter que si g_ErrCom n'était pas déclaré dans mes deux codes,
    c'est que je n'ai pas mis dans mon post le code source complet, trop volumineux.

    Je pense que je devrais pouvoir me débrouiller, merci encore.
    @+

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/08/2011, 10h36
  2. UPDATE en ajoutant un 0 sur un champ de type "char"
    Par doum2 dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/03/2006, 14h22
  3. Modification d'un texte dans une fenetre "d'erreur"
    Par PAUL87 dans le forum Access
    Réponses: 8
    Dernier message: 21/10/2005, 13h12

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