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 :

Probleme de lecture d'une structure sur platform ARM.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 23
    Par défaut Probleme de lecture d'une structure sur platform ARM.
    Bonjour,

    la lecture des éléménts d'une structure me donne des fausses valeurs !!
    Voici le code:
    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
     
     char buf[]={0x1A,0x1B,0x1C,0x33,0x51,0x12,0x34,0x56,0x78,0x01,0xA5,0xBC,0xEF};
     //===================================================
    typedef struct {char a[3]; short b;	int c; char d; } MyStruct;
    //==================
    int main(){
       MyStruct *x=buf;
        uart_init();
    	// 
    	hexstring(x->a[0]);
    	hexstring(x->a[1]);
    	hexstring(x->a[2]);
    	hexstring(x->b);
    	hexstring(x->c);
    	hexstring(x->d);
     
    	hexstring(buf[0]);
    	hexstring(buf[1]);
    	hexstring(buf[2]);
    	hexstring(buf[3]);
    	hexstring(buf[4]);
    	hexstring(buf[5]);
    	hexstring(buf[6]);
    	hexstring(buf[7]);
    	hexstring(buf[8]);
    	hexstring(buf[9]);
    	hexstring(buf[10]);
    	hexstring(buf[11]);
        return(0);}
    J'obtiens ceci:
    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
     
    0000001A     -> bon                                                           
    0000001B     ->  bon                                                                   
    0000001C     ->  bon                                                                          
    00001251      ->  ?? en principe    33 51  ou  51 33                                                           
    BCA50178     ->  ?? en principe    12 34 56 78   ou  78 56 34 21 
    000000EF      -> ?? en principe  01
     
    0000001A   -> tout OK
    0000001B                                                                        
    0000001C                                                                        
    00000033                                                                        
    00000051                                                                        
    00000012                                                                        
    00000034                                                                        
    00000056                                                                        
    00000078                                                                        
    00000001                                                                        
    000000A5                                                                        
    000000BC
    il me semble que l' element de type "short" est representé en memoire sur 4 octets et non pas 2 !!
    Comment rémedier à ça? svp.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 23
    Par défaut
    RESOLU:

    il suffit d'ajouter "__attribute((packed)) " pour dire au compilateur de ne pas alligner les elements sur 32bits !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct {
    	char a[3];
    	short b;
    	int c;
    	char d;
    } __attribute((packed)) MyStruct;

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

Discussions similaires

  1. Initialiser des données d'une structure sur une form
    Par soso78 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/12/2007, 15h41
  2. [fichier]probleme de lecture d une clé
    Par sneb5757 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 07/08/2007, 14h10
  3. Probleme de lecture d'une table
    Par Slaash0 dans le forum Access
    Réponses: 4
    Dernier message: 02/04/2007, 14h00
  4. probleme de debug d'une dll sur pc 64bits
    Par giova_fr dans le forum MFC
    Réponses: 2
    Dernier message: 12/12/2005, 16h40
  5. probleme d'acces a une machine sur un réseau
    Par zorian dans le forum Développement
    Réponses: 3
    Dernier message: 09/06/2004, 13h04

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