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 :

champ de bits adressés sur port


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut champ de bits adressés sur port
    Tout d'abord bonjour!
    Voila, j'aimerais pouvoir créer une structure de type champ de bits dont chaque bit serait adressé a une adresse particuliére. Cela est il possible (c'est de la prog. sur microcontroleur)

    ex:


    typedef union
    {
    unsigned char Octets[MAX_SORTIES];
    struct
    {
    // Sorties Port 0 .

    // Sorties Port 1.


    // Sorties Port 2 .
    unsigned char NonUtil1 :4; //
    unsigned char CLAV_COL_1 :1; //
    unsigned char CLAV_COL_2 :1; //
    unsigned char NonUtil2 :2; //

    // Sorties Port 3.

    // Sorties Port 4 .

    // Sorties Port 6 octet 6
    unsigned char NonUtil3 :4; // a mettre a l'adresse X
    unsigned char V_B1 :1; // a mettre a l'adresse Y
    unsigned char V_B2 :1; // a mettre a l'adresse Z
    unsigned char V_B3 :1; // etc...
    unsigned char V_B4 :1; //

    }Bits;
    }SORTIES_CPU; /* Définition pour l'écriture des sorties */

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 308
    Points : 373
    Points
    373
    Par défaut
    Je doute fortement que tu puisses adresser bit par bit, en revanche tu peux addresser par octet et gérer les bits un par un via des masques comme ceux-ci :

    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
    #define BIT0 0x01
    #define BIT1 0x02
    #define BIT2 0x04
    #define BIT3 0x08
    #define BIT4 0x10
    #define BIT5 0x20
    #define BIT6 0x40
    #define BIT7 0x80
     
    // le masque s'utilise comme ça :
     
    if(octet & BIT2) // permet de tester la valeur du bit 2
    // ou
    octet |= BIT5; // permet de mettre la valeur du bit 5 à 1
    octet &= ~BIT4; // permet de mettre la valeur du bit 4 à 0
    // etc.

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pouypouy47
    Voila, j'aimerais pouvoir créer une structure de type champ de bits dont chaque bit serait adressé a une adresse particuliére.
    C'est pas possible. L'adressage en C se fait en bytes, pas en bits.
    typedef union
    {
    unsigned char Octets[MAX_SORTIES];
    struct
    {
    // Sorties Port 0 .

    // Sorties Port 1.


    // Sorties Port 2 .
    unsigned char NonUtil1 :4; //
    unsigned char CLAV_COL_1 :1; //
    unsigned char CLAV_COL_2 :1; //
    unsigned char NonUtil2 :2; //

    // Sorties Port 3.

    // Sorties Port 4 .

    // Sorties Port 6 octet 6
    unsigned char NonUtil3 :4; // a mettre a l'adresse X
    unsigned char V_B1 :1; // a mettre a l'adresse Y
    unsigned char V_B2 :1; // a mettre a l'adresse Z
    unsigned char V_B3 :1; // etc...
    unsigned char V_B4 :1; //

    }Bits;
    }SORTIES_CPU; /* Définition pour l'écriture des sorties */
    Ce que tu veux faire là est techniquement possible, mais absolument pas portable. Le moindre changement de compilateur ou de réglage du compilateur peut rendre le code incompatible.

    La solution proposée avec les opérateurs bits est portable.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/02/2009, 17h17
  2. Compatibilité clé usb 2.0 sur port usb 1.0 de mon portable?
    Par coubi64 dans le forum Périphériques
    Réponses: 2
    Dernier message: 22/10/2003, 18h57
  3. [TP]Impression sur port USB
    Par haypo dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 18/07/2003, 11h09
  4. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum Développement
    Réponses: 6
    Dernier message: 02/01/2003, 12h13

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