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 :

[PIC] Compilateur CCS C - initialiser struct bit à bit ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut [PIC] Compilateur CCS C - initialiser struct bit à bit ?
    Bonjour,

    j'utilise le compilteur c de ccs.

    je veux recuperer des infos en serie d'un périphérique.
    J'ai une structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct ps2
    {
    	int1 depart;
    	int8 info;
    	int1 parite;
    	int1 arret;
    	int1 acquis;
    };
    je dispose d'une fonction qui "ecoute" le peripherique bit par bit.

    il y a 12 bits au total, ca commence par un bit de depart et ensuite 8 bits d'info etc etc...


    et je voudrais initialiser la structure ps2
    en effectuant une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i=0;i<=11;++i)
    {
    		ps2 = souris.data;
     
    }
    bien sur cela est faux car à chaque boucle j'initalise le premier bit, c'est à dire depart.

    Comment faut il faire pour qu'a chaque boucle, je passe au bit suivant ?

    c'est à dire premier bit depart,
    deuxieme bit, 8 bit d'info
    troisieme bit, 7 bit d'info
    etc etc...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Oula attention aux mots utilisé, ne confonds-tu pas byte et bit ?
    bit c'est un 0 ou 1 et byte c'est un octet c'est-à-dire 8 bits.
    Les type int1 et int8 n'existe pas par défaut, donc soit tu les as créer plus tôt soit tu as des erreurs.
    Pour déclarer un champ de byte il faut procéder comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct PS2
    {
        unsigned depart:1;
        unsigned info:8;
        unsigned parite:1;
        unsigned arret:1;
        unsigned acquis:1;
    }
    Cependant dans ton cas je pense qu'il vaut mieux utiliser des masques et des décalages de bits.
    Il faut que tu utilises un entier de type short qui fait 16 bits et tu peux définir ces constantes de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #define DEPART_MASK 0x1
    #define INFO_MASK 0x1FE
    #define PARITE_MASK 0x200
    #define ARRET_MASK 0x400
    #define ACQUIS_MASK 0x800

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Mui,
    Citation Envoyé par PsychoH13 Voir le message
    bit c'est un 0 ou 1 et byte c'est un octet c'est-à-dire 8 bits.
    Attention !

    Même si c'est un cas très courant, byte et octet ne sont pas synonymes !!


  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 141
    Par défaut
    Merci pour toutes vos réponses.

    Je vais essayer de répondre à toutes les questions :

    Oula attention aux mots utilisé, ne confonds-tu pas byte et bit ?
    bit c'est un 0 ou 1 et byte c'est un octet c'est-à-dire 8 bits.
    Je parle bien de bit , 0 et 1. Je veux récuperer les infos d'une souris ps/2 avec un pic, donc j'ai l'horloge et les données.

    Les type int1 et int8 n'existe pas par défaut, donc soit tu les as créer plus tôt soit tu as des erreurs.
    avec mon compilateur il reconnait int1 et int8, donc je n'ai pas d'erreurs.

    Voila les types basiques qu'il reconnait
    Basic Types
    Type-Specifier
    int1 Defines a 1 bit number
    int8 Defines an 8 bit number
    int16 Defines a 16 bit number
    int32 Defines a 32 bit number
    char Defines a 8 bit character
    float Defines a 32 bit floating point number
    short By default the same as int1
    Int By default the same as int8
    long By default the same as int16
    void Indicates no specific type
    en ce qui concerne les masques, je vais regarder comment cela fonctionne, je n'ai jamais utilisé

    et merci encore beaucoup ;=)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    salut,
    je programme aussi un peu sur ccs et je veux faire la mm chose que toi: récuperer les infos d'une souris ps/2

    pour lire et enregistrer bit à bit, tu peux utiliser bit_clear(variable,bit) et bit_set(variable,bit) qui mettent respectivement à 0 ou à 1 le bit "bit" de "variable", comme ça c'est plus facile à gerer

    par contre moi je n'arrive pas à initialiser la souris: elle m'envoit AA puis 00, et j'essais de lui envoyer F4 pour lancer la transmission auto des données mais apparemment ça ne fonctionne pas, si tu sais comment envoyer les ordres, je suis preuneur

    dis nous aussi ou tu en es et si tu as une sorte de driver pour souris, en réalité c'est ce que je cherche et en attendant c'est ce que j'essaye d'ecrire

    spliz

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par spilz Voir le message
    par contre moi je n'arrive pas à initialiser la souris: elle m'envoit AA puis 00, et j'essais de lui envoyer F4 pour lancer la transmission auto des données mais apparemment ça ne fonctionne pas, si tu sais comment envoyer les ordres, je suis preuneur

    dis nous aussi ou tu en es et si tu as une sorte de driver pour souris, en réalité c'est ce que je cherche et en attendant c'est ce que j'essaye d'ecrire
    Une souris, c'est un bête UART. Il suffit d'être correctement connecté (attention à ne pas inverser émission et réception), que la masse soit branchée, que les interfaces électriques soient compatibles (O/5V, V.24 ?) et que la souris soit alimentée.

    Ensuite, il suffit de configurer sa liaison correctement (débit, format...) et d'émettre les données correctement. Ton émission est correcte ? Tu as pu la visualiser sur un oscilloscope ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par branqueira Voir le message
    en ce qui concerne les masques, je vais regarder comment cela fonctionne, je n'ai jamais utilisé
    C'est effectivement la solution portable. Il se peut néanmoins que ton compilateur dispose d'extensions permettant d'accéder directement aux bits (int1), rendant l'opération avec les masques inutile et couteuse en temps et en taille de code.

    S'agissant de code très spécialisé pour une plateforme donnée, je pense que la recherche de portabilité n'est pas essentielle pour cette partie du code (qui doit être bien séparée des parties plus 'standards' de l'application, comme il se doit).

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/02/2014, 08h08
  2. [Turbo Pascal] Compilateur Turbo Pascal pour Vista 64 bits
    Par issss dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 07/06/2009, 23h48
  3. Réponses: 2
    Dernier message: 07/01/2007, 10h06
  4. Entier : accès bit à bit
    Par slylafone dans le forum C++Builder
    Réponses: 16
    Dernier message: 14/06/2005, 20h34
  5. Réponses: 5
    Dernier message: 03/06/2005, 14h06

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