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 :

Fonction de pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Par défaut Fonction de pointeurs
    Bonsoir à tous,

    Je pense que beaucoup de questions sur les pointeurs ont du vous être posé, cependant celle-ci est relative à une fonction particulière d'un programme.

    J'ai une ligne de code comme celle là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *((UINT32 *) ((UINT32)(&CAN0TXIDR0)))= u32ID;
    Et je ne comprend pas bien comment les pointeurs interagisse là dedans.

    Je tiens à préciser que "CAN0TXIDR0" est simplement un registre de 8 bits.

    Donc ma question est de savoir quel sont le rôle des pointeurs et de la ligne de code en question.

    En vous remerciant d'avance,

    Cordialement,

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CAN0TXIDR0 //ton registre
     
    (&CAN0TXIDR0) //adresse de ton registre
     
    (UINT32)valeur//change le type de la valeur en UINT32, c'est un cast.
     
    (UINT32)(&CAN0TXIDR0)) // UINT32
     
    (UINT32 *) // change le type de la valeur en une adresse pointant vers un objet UINT32
     
    (UINT32 *) ((UINT32)(&CAN0TXIDR0))); //UINT32 *
    par contre le (IUNT32) semble inutile, puisque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (UINT32 *)&CAN0TXIDR0;
    Donne le même résultat.

    Donc pour l'instant, tu as une adresse qui pointe vers un objet de type IUNT32 situé à l'adresse de CAN0TXIDR0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    *((UINT32 *) ((UINT32)(&CAN0TXIDR0)))= u32ID;
    *a permet d'agir sur l'objet à l'adresse a
    Ici l'adresse est une adresse d'objet UINT32 (grâce au cast avec (IUNT32 *))
    Et cet objet prend la valeur de u32ID

    Donc au final, tu met u32ID dans un UINT32 qui se trouve à l'adresse de ton registre.

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Je me demande quand même pourquoi on fait tout ça pour affecter une valeur 32 bits dans un registre 8 bits. Caster u32ID, si nécessaire, aurait été plus simple.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Si il cast u32ID, il n'écrira que sur 8 bits (comme le registre fait 8 bits)
    Là, il écrit sur 32 bits en partant de l'adresse de son registre.

    Donc théoriquement, ici il écrit sur 4 registre (8*4).

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Si il cast u32ID, il n'écrira que sur 8 bits (comme le registre fait 8 bits)
    C'est ce que je croyais qu'on voulait faire, vu qu'on n'avait pas le code au complet, mais ça serait évidemment trop de code pour rien. Comme tu l'as dit, on veut sûrement écrire sur 4 registres en une seule instruction.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Par défaut
    Bonjour,

    J'ai analysé le code aujourd'hui. Et effectivement le cast permet de prendre 8 registre de 8 bits qui se suivent et de pouvoir y stocker la valeur souhaiter en une seule fois.

    Cependant, j'aurais une question encore. Je ne suis pas encore très à l'aise avec les pointeurs et je souhaiterais faire une nouvelle manipulation.

    En faite, je voudrais à présent faire la manipulation inverse :

    Prendre la valeur de mes 4 registres (le registre en question casté en 32 bits) et stocké le resultat du registre dans une variable de 32 bits.

    Auriez-vous une idée?

    En vous remerciant d'avance,

    Bien Cordialement,

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Par défaut
    Tout d'abord, merci beaucoup pour votre réponse. Cela ma éclaircie sur le sujet.
    Effectivement je ne savais pas à quoi servait le UINT32, donc maintenant je comprend mieux.

    Merci encore et bonne soirée.

    Cordialement,

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 140
    Par défaut
    Melem :

    Effectivement je ne sais pas non plus pourquoi. Cet ligne vient d'un exemple de code de chez Freescale et j'essaye de décoder certaines partie du programme qui me pose des difficultés.
    D'où la question.

    Voila, merci encore.

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

Discussions similaires

  1. Passage de tableau à une fonction par pointeur
    Par progfou dans le forum C++
    Réponses: 15
    Dernier message: 23/02/2007, 11h45
  2. Fonction et pointeur
    Par Flophx dans le forum C
    Réponses: 14
    Dernier message: 22/02/2007, 17h29
  3. Réponses: 8
    Dernier message: 10/03/2006, 17h28
  4. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  5. Réponses: 10
    Dernier message: 03/02/2005, 13h09

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