Arduino, et le C...
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Arduino, et le C...



  1. #1
    invite26afd144

    Arduino, et le C...


    ------

    bonjour, la communauté,

    pourquoi ça ne marche pas, comment faire ?

    byte dat3= SpiRam1.read_byte(adresse);
    adresse++;
    byte dat2= SpiRam1.read_byte(adresse);
    adresse++;
    byte dat1= SpiRam1.read_byte(adresse);
    adresse++;
    byte dat0= SpiRam1.read_byte(adresse);
    uint32_t resultat = (dat3<<24) + (dat2<<16) + (dat1<<8) + dat0;
    return resultat;

    message du compilateur : "warning: left shift count >= width of type"

    en assembleur, ça ne me poserait aucun probleme...

    -----

  2. #2
    Jack
    Modérateur

    Re : Arduino, et le C...

    byte dat3
    (dat3<<24)
    A mon avis le compilateur tique lorsqu'on lui demande de décaler un octet 24 fois à gauche.

    Le message d'erreur est d'ailleurs assez explicite.

    en assembleur, ça ne me poserait aucun probleme...
    En C non plus, vu qu'il ne s'agit que d'un warning.
    Que ce soit en C ou en assembleur, le résultat sera irrémédiablement le même: 0

    A+

  3. #3
    invite26afd144

    Re : Arduino, et le C...

    bonjour,
    en fait ça n'est pas un warning mais bien une erreur qui bloque la compilation.
    ce que je veux faire dans ce code, c'est affecter les valeurs des byte dat3..0 respectivement au 4 bytes de la variable resultat (32bits).
    pourtant cette ecriture fonctionne pour 16bits:
    uint16_t resultat = (dat1<<8) + dat0;
    donc comment faire ?
    merci.

  4. #4
    Jack
    Modérateur

    Re : Arduino, et le C...

    EN C pur, il faudrait caster les variables dat1, dat2 et dat3. Je ne sais pas si on peut faire ça avec le langage pour arduino.
    Le problème vient du fait que le compilateur évalue le membre droit de l'expession ( (dat3<<24) + (dat2<<16) + (dat1<<8) + dat0) avant de l'affecter au membre gauche (résultat). L'expression est donc calculée dans un format 8 bits puisque constituée uniquement de variables 8 bits.

    Il te reste la solution de déclarer dat1, dat2 et dat3 comme des entiers de 32 bits, uint32_t d'après ton code.

  5. A voir en vidéo sur Futura
  6. #5
    invite830075ec

    Re : Arduino, et le C...

    uint32_t resultat = ((uint32_t)dat3<<24) + ((uint32_t)dat2<<16) + ((uint16_t)dat1<<8) + dat0

Discussions similaires

  1. Arduino anti rebond avec arduino
    Par invited0bffa74 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/10/2014, 18h04
  2. PWM et Arduino
    Par Dr_H2O2 dans le forum Électronique
    Réponses: 6
    Dernier message: 29/04/2014, 15h34
  3. Communication arduino-arduino avec module Xbee
    Par inviteda9a8a4b dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 18h24
  4. Arduino CNC
    Par invite8e25f015 dans le forum Électronique
    Réponses: 6
    Dernier message: 22/12/2013, 09h55
  5. Arduino
    Par invite85ff08e6 dans le forum Électronique
    Réponses: 8
    Dernier message: 17/03/2010, 12h49