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 :

Concatener deux mots en hexadecimal


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 171
    Points : 55
    Points
    55
    Par défaut Concatener deux mots en hexadecimal
    Bonjour,

    Dans une datasheet le constructeur indique qu'il faut concatener les mots suivants:

    Conversion start for pressure measurement (D1): 0Fh & 40h
    Conversion start for temperature measurement (D2): 0Fh & 20h
    Read calibration word 1 (W1): 1Dh & 50h
    Read calibration word 2 (W2): 1Dh & 60h
    Read calibration word 3 (W3): 1Dh & 90h
    Read calibration word 4 (W4): 1Dh & A0h
    Reset sequence command: 15h & 55h & 40h
    Cependant lorsque j'utilise l'operateur &, cela ne semble pas fonctionner.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define CAL_READ_W1	(0x1D & 0x50)
    #define CAL_READ_W2	(0x1D & 0x60)
    #define CAL_READ_W3	(0x1D & 0x90)
    #define CAL_READ_W4	(0x1D & 0xA0)
    #define READ_PRESS	(0x0F & 0x40)
    #define	READ_TEMP	(0x0F & 0x20)

    J'aimerais savoir comment concatener deux octets en hexadecimal, merci!

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Là, tu fais une fusion. Concaténer ça serait plutôt ça pour moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdint.h>
    #include <stdio.h>
     
    int main() {
        uint8_t MSB = 0xBE;
        uint8_t LSB = 0xEF;
        uint16_t concat = MSB << 8 | LSB;
        printf("0x%X\n", concat);
    }
    Affiche :
    0xBEEF

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 171
    Points : 55
    Points
    55
    Par défaut
    Salut, merci pour ta reponse.
    Du coup j'ai cree une fonction:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    uint16_t num3;
    uint8_t num1,num2;
     
    uint16_t concatenate(uint8_t num1, uint8_t num2)
    {
    	num3=(num1<<8)|(num2);
    	return num3;
    }

    Mais quand j'ecris cela:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    uint16_t CAL_READ_W1 = concatenate(0x1D,0x50);

    J'obtiens cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ../Src/pressure_sensor.c:57:24: error: initializer element is not constant
     uint16_t CAL_READ_W1 = concatenate(0x1D,0x50);
                            ^~~~~~~~~~~
    Et quand j'ecris cela:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    #define CAL_READ_W1 = concatenate(0x1D,0x50);

    J'obtiens cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ../Src/pressure_sensor.c:57:21: error: expected expression before '=' token
     #define CAL_READ_W1 = concatenate(0x1D,0x50);
                         ^
    Comment faire pour "stocker" la variable contenant la concatenation?

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    En C, tu ne peux pas appeler une fonction pour initialiser une variable globale. En C++, tu peux.

    La solution dans ton cas serait sans doute de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdint.h>
    #include <stdio.h>
     
    #define CONCAT(msb,lsb)    (uint16_t)((msb) << 8 | (lsb))
     
    // ou 
    // #define CAL_READ_W1     CONCAT(0x1D, 0x50)
     
    const uint16_t CAL_READ_W1 = CONCAT(0x1D, 0x50);
     
    int main() {
        printf("0x%X\n", CAL_READ_W1);
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 171
    Points : 55
    Points
    55
    Par défaut
    Salut, super merci!

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    #define CAL_READ_W1     CONCAT(0x1D, 0x50)

    Ca fonctionne, merci encore!

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

Discussions similaires

  1. Concaténer deux fichiers Ligne/Ligne avec SH
    Par guiltouf dans le forum Linux
    Réponses: 7
    Dernier message: 22/05/2007, 14h35
  2. Suppression d'un espace (=blanc) entre deux mots
    Par Echizen1 dans le forum Access
    Réponses: 18
    Dernier message: 10/04/2006, 17h51
  3. concatener deux listes
    Par adel25 dans le forum C++
    Réponses: 1
    Dernier message: 22/09/2005, 12h56
  4. Concatener deux champs
    Par Neo41 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/07/2005, 16h15
  5. concatener deux champs ?
    Par Nadaa dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 03/08/2004, 11h57

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