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 :

[C18] parametre macros


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 37
    Points : 19
    Points
    19
    Par défaut [C18] parametre macros
    Bonjour,

    je vous écris suite à un problème que j'ai concernant un programme que j'ecris en C pour un microcontrolleur PIC.
    Le problème ne concerne pas forcement le programme en lui même pour lequel je pense être ok mais plutôt pour pouvoir accéder a une structure définie dans un header relatif au microcontrolleur.

    Sur ce microcontrolleur sont definis plusieurs ports (de sortie ou entree peu importe) par des champs de bits. On peut y accéder par un unsigned char (8bits) ou alors bit a bit par les noms associés.

    Mon probleme etait que je voulais pouvoir avoir un tableau de pointeurs vers ces bits (pas forcement du meme port, pas forcement tous les bits)... j'ai vite compris que c'etait impossible et je me suis tourné vers la solution du pointeur vers le port (le champ entier, unsigned) puis un chiffre qui designait le bit pour pouvoir faire mes decalages et comparaisons en consequence...

    Cette solution fonctionne mais coute cher en instructions et memoire.

    Quelqu'un d'autre sur un forum m'a proposé une solution a base de macros dans le style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define PWM_PIN0 LATCbits.LATC0
    #define PWM_PIN1 LATCbits.LATC1
    #define PWM_PIN2 LATBbits.LATB0
     
    #define PWM_PIN_VAL(x) PWM_PIN#x
    dans lesquels LATCbits et LATBbits representent les champs de bits (mes ports) et LATC0 LATC1 LATB0 representent les bits (un seul pin du port) qui m'interressent dans ces champs respectifs.

    Pour y acceder j'utiliserais la macro PWM_PIN_VAL(x) qui alors me redirigerait vers PWM_PIN0 1 ou 2 selon la valeur de x...

    La solution parait ideale mais j'avoue ne pas arriver a la mettre en place et surtout je doute qu'elle soit possible du point de vue de la conception et de comment le compilateur va gerer ca... J'avoue j'ai toujours néglige l'apprentissage des macros mais maintenant qu'elles pourraient m'etre utile je le regrette

    Je ne trouve pas non plus d'exemple (avec mon pote google) qui utilise une macro a parametre pour en appeler une autre...

    Si quelqu'un pouvait me venir en aide sur ce point je vous serait tres reconnaissant... merci de votre aide

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    d'ailleurs que se passerait-il si j'appelais la macro avec x=7...

    Je veux bien promettre a mon compilateur que ca ne sera pas le cas mais je doute qu'il veuille bien m'entendre

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    C'est ## qu'il te faut, pas # :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define PWM_PIN_VAL(x) PWM_PIN ## x

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    Ahhh ok desolé pour la confusion j'ai du mal lire les cours sur les macros...

    J'essaye ca ce soir en croisant les doigts...

    Me sera-t-il possible a ce moment de faire un appel dans mon programme de cette sorte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unsigned char compteur=3;
    PWM_PIN_VAL(compteur--)=0;
    Ou cela posera-t-il probleme ?

    Et quelles seraient les consequences d'un appel
    sachant que PWM_PIN5 n'est pas defini...


    merci en tout cas pour la reponse, je vous tiendrai de toute facon au courant du resultat

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Citation Envoyé par Bouteille Voir le message
    Ahhh ok desolé pour la confusion j'ai du mal lire les cours sur les macros...

    J'essaye ca ce soir en croisant les doigts...

    Me sera-t-il possible a ce moment de faire un appel dans mon programme de cette sorte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unsigned char compteur=3;
    PWM_PIN_VAL(compteur--)=0;
    Ou cela posera-t-il probleme ?
    Ca ne marchera pas, puisque le pré-compilateur génèrera le code suivant :
    Ce qui n'est évidemment pas valide.

    Citation Envoyé par Bouteille Voir le message
    Et quelles seraient les consequences d'un appel
    sachant que PWM_PIN5 n'est pas defini...
    Une erreur de compilation puisque le pré-compilateur aura généré du code utilisant un symbole non défini.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    C'est bien ce que je pensais...

    D'un coup la "macro" me paraissait un peu magique en permettant d'utiliser des variables qui changeraient au cours du programme... je ne comprenais pas comment cela pouvait fonctionner.
    Il y a donc bien cette frontiere (et c'est logique en fait) entre precompilateur (macros) et code... ouf, au moins je comprends un peu mieux comment ca fonctionne meme si je vais devoir me debrouiller autrement pour mon programme

    Pas de solution pour moi dans ce cas alors, tant pis

    merci bcp en tout cas pour les reponses...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 37
    Points : 19
    Points
    19
    Par défaut
    Le probleme complet et la solution :

    http://forums.futura-sciences.com/el...-pins-pwm.html

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

Discussions similaires

  1. Userform et macro plusieurs parametres
    Par obie78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/09/2010, 10h06
  2. Réponses: 2
    Dernier message: 17/11/2009, 10h17
  3. Macro pemettant de parametrer un lien hypertexte
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2009, 13h02
  4. parametres dans macro word
    Par tinoucri dans le forum VBA Word
    Réponses: 1
    Dernier message: 08/03/2008, 10h17
  5. Réponses: 3
    Dernier message: 20/07/2007, 09h58

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