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

Embarqué Discussion :

Ecriture/Lecture d'une adresse memoire


Sujet :

Embarqué

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Ecriture/Lecture d'une adresse memoire
    Bonjour,

    Question basique pour la plupart d'entre vous mais j'aimerais votre confirmation.
    J'ai besoin de lire la valeur d'un port et d'ecrire a l'adresse d'un autre sur un microcontroller ARM.
    Voici mon 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
    /* Port address */
    #define INPUT_PORT_ADDR      0x40    //Input Port Address - to be defined
    #define OUTPUT_PORT_ADDR   0x80  //Output Port Address  - to be defined
    
    void Output_to_keypad(unsigned char output)
    {
         unsigned char * KeypadRowPort = (unsigned char *)OUTPUT_PORT_ADDR;
         // Set output to keypad row
        *KeypadRowPort = output;
    }
    
    bit_8_e Input_from_keypad(void)
    {
        bit_8_e InputKey;
    
        // Get input from keypad column
        InputKey = * ((bit_8_e *) INPUT_PORT_ADDR);
    
        return (InputKey);
    }
    N.B: "bit_8_e" est un typedef enum


    Pouvez-vous me confirmer que cela est correct?

  2. #2
    Membre régulier
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 98
    Points : 99
    Points
    99
    Par défaut
    Salut Daddy,

    Tes fonctions sont correctes.

    A+

  3. #3
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour,
    l’absence de l'utilisation du mot clé volatile pourrait te jouer de sales coups, de manière aléatoire.

    Code C : 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
    /* Port address */
    #define INPUT_PORT_ADDR      0x40    //Input Port Address - to be defined
    #define OUTPUT_PORT_ADDR   0x80  //Output Port Address  - to be defined
     
    void Output_to_keypad(unsigned char output)
    {
         volatile unsigned char * KeypadRowPort = (volatile unsigned char *)OUTPUT_PORT_ADDR;
         // Set output to keypad row
        *KeypadRowPort = output;
    }
     
    bit_8_e Input_from_keypad(void)
    {
        volatile bit_8_e InputKey;
     
        // Get input from keypad column
        InputKey = * ((volatile bit_8_e *) INPUT_PORT_ADDR);
     
        return (InputKey);
    }

    Cdlt,
    -- Yankel Scialom

  4. #4
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 431
    Points
    1 431
    Par défaut
    Salut,

    Je pense que tu peux aussi déclarer ces méthodes inline.

  5. #5
    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
    Je pense qu'on ne met inline à une fonction que si on a montré que cela était nécessaire avec profiler.

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 98
    Points : 99
    Points
    99
    Par défaut
    @Bktero -> tu peux m'en dire plus sur profiler? Ca semble intéressant comme programme.
    Sinon pour rebondir sur le inline, je suis de l'avis de mith06. En effet, ces fonctions comportent très peu d'instructions, donc elles s'exécuteront plus vite en inline (càd que l'appel de la fonction est remplacé par le compilateur par son contenu) que par un appel de fonction "classique", qui va en plus nécessiter une sauvegarde/restauration de la pile et des registres non volatiles, et des instructions de branchement.

  7. #7
    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
    Pour ce qui est du profiling (qu'on réalise avec un profiler) : http://en.wikipedia.org/wiki/Profili...er_programming)

    Inline est un mot-clé que le compilateur n'est pas obligé de respecté, s'il juge que cela ne sert à rien de la rendre inline. Il est communément admis qu'on me mettra ce qualificatif à une fonction que si on se rend compte que cette fonction occupe un temps important (avec un profiler justement) et qu'on souhaite l'optimiser. On vérifiera que l'effet est vraiment positif. Le résultat pourrait être contre productif ! Voir la FAQ C++ à ce sujet : http://cpp.developpez.com/faq/cpp/?page=inline

  8. #8
    Membre du Club
    Avatar de daniel06600
    Homme Profil pro
    Ingénieur Temps Réel et Android
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Temps Réel et Android
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Points : 46
    Points
    46
    Billets dans le blog
    1
    Par défaut
    Bonjour. Ton code semble correcte dans la théorie. Dans la pratique il peut y avoir un petit soucis avec le compilateur qui va chercher à optimiser ton code et il ne comprendra pas (bien sur) que tu travaille sur des valeurs qui sont des adresses physiques et non pas de simples valeurs qu'il peut traiter dans des registres internes au processeur. Slt.
    Président du Club Insitec.fr

  9. #9
    Membre habitué Avatar de monnoliv
    Homme Profil pro
    Opticien-ébéniste: lunettes de WC
    Inscrit en
    Août 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Opticien-ébéniste: lunettes de WC

    Informations forums :
    Inscription : Août 2003
    Messages : 139
    Points : 195
    Points
    195
    Par défaut
    Si tu programmes en ARM (je suppose que c'est un Cortex-M puisque tu parles de Microcontrôleur), je te conseille vivement d'utiliser les librairies CMIS. Ton code sera plus portable et ce genre d'écriture directe de port n'est plus nécessaire:
    Ex code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define mainLED_BIT       ( 7 )      //LED sur bit7
    LPC_GPIO0->DIR |= ( 0x1 << mainLED_BIT );  //Port0.7 en sortie
    LPC_GPIO0->MASKED_ACCESS[ ( 1 << mainLED_BIT) ] = ( ulLEDState << mainLED_BIT );  //affecter ulLEDState à LED
    IoT CC3200, ESP8266
    8051, ARM Cortex-M (forever)/Cortex A (TI, Silabs, NXP), FPGA, Bare Metal Raspberry-PI programming
    VHDL-ALTERA-XILINX

Discussions similaires

  1. Ecriture/ Lecture d'une array dans un fichier
    Par Seth77 dans le forum C#
    Réponses: 4
    Dernier message: 19/03/2012, 21h39
  2. Probleme de memoire lors de la lecture d'une socket
    Par arover dans le forum Réseau
    Réponses: 4
    Dernier message: 02/04/2008, 20h02
  3. Adresse memoire d'une fonction
    Par Hitchigo dans le forum Delphi
    Réponses: 5
    Dernier message: 30/07/2006, 12h37
  4. ecriture et lecture d'une memoire partagee en C++
    Par jlassiramzy dans le forum C++
    Réponses: 17
    Dernier message: 30/06/2006, 11h47
  5. [LG]Lecture de fichier avec une adresse internet
    Par forbin dans le forum Langage
    Réponses: 8
    Dernier message: 09/02/2005, 19h00

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