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 :

Utilisation de macro


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut Utilisation de macro
    Bonjour à tous !

    J'aurais une petite question à vous poser ! Je suis actuellement en stage et je dois réaliser un programme pour une entreprise. Ce programme fonctionne grâce à une carte qui ne se trouve pas sur mon lieu de stage.

    Il faut donc que je créée différentes macros pour remplacer les fonctions utiliséés pour la carte (Mon programme inclut les fichiers servo.h et servo.c) pour pouvoir faire les tests avant de me rendre sur place pour tester le programme.

    Je ne sais pas si c'est clair pour vous... Mais j'aimerais savoir si il existe des fonctions toutes faites (grâce à différentes fonctions du logiciel Dev C++ ou encore d'Allegro (je doit l'utiliser comme librairie externe)) ou s'il faut que je fasse mes macros moi même.

    Par exemple j'ai cette fonction qui permet d'écrire un mot (elle se trouve dans le fichier servo.c):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void _OutputW(WORD wPortAdress, WORD wOutputVal)
    {
    _outpw(wPortAddr, wOutputVal)
    }
    Je dois la remplacer par une macro mais je ne sais pas trop comment m'y prendre car je ne maitrise pas bien le C et encore moins les macros... Je sais juste que je dois mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define nom_de_ma_macro ()
    Merci d'avance pour votre aide, en espérant avoir été claire ! Bonne journée !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    J'avais eu ce genre de problème a régler une fois et je l'avais résolu différemment.

    Le problème dans ton cas avec les macro, c'est que le code exécuté et surtout les appels de fonction ne sont pas le même en mode "avec carte" et en mode "sans carte".

    Ce que j'avais fait utilisait une variable d'environnement genre SANS_CARTE

    et mes fonction qui utilisaient le hard spécifique étaient toutes de ce genre (je reprends ton exemple avec outpw()) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void _OutputW(WORD wPortAdress, WORD wOutputVal)
    {
       if(getenv("SANS_CARTE") != NULL)
       {
          /* pas de carte, on emule */
          ...
       }
       else
       {
          /* utilise la carte */
          _outpw(wPortAddr, wOutputVal)
       }
    }
    Ensuite, tu compiles ton binaire et c'est le même binaire que tu peux utiliser, le comportement est modifié suivant la définition de la variable d'environnement SANS_CARTE
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Par défaut
    Merci pour ta réponse !

    J'ai bien compris comment tu avais implanter ton code. Les "variables d'environnement" étaient complétement inconnu pour moi et j'ai beau chercher sur le web, je ne comprend pas comment déclarer ces variables et où...

    De plus, je ne vois pas comment simuler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _outpw(wPortAddr, wOutputVal)
    ... Je me sens un peu pommée et nulle !

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Une variable d'environnement est une variable qui possède un nom et une valeur. Cette variable est positionnée par le système d'exploitation et interrogeable par le programme (justement par la fonction getenv).

    Pour voir les variables d'environnement de ton système, tu lances un shell et tu tapes la commande "set" sous Windows (sous Unix, la commande dépend de ton shell, cela peut être set ou sentenv)

    Pour positionner les variables d'environnement maintenant. Sous Windows, clic droit sur le poste de travail option propriétés, dans l'onglet avancé, il y a un bouton Variable d'environnement et tu fais tes modifications (il faut peut être rebooter pour que les modifications soient prises en compte). Sous Unix, il faut regarder dans tes scripts de lancement (~/.bashrc par exemple).

    Si les variable d'environnement ne te plaisent pas, tu peux baser ton test sur la présence ou non d'un fichier de debug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void _OutputW(WORD wPortAdress, WORD wOutputVal)
    {
       if(existfile("fichier_debug") == 0)
       {
          /* pas de carte, on emule */
          ...
       }
       else
       {
          /* utilise la carte */
          _outpw(wPortAddr, wOutputVal)
       }
    }
    Sinon pour revenir à ton problème, tu as 2 modes, 1 avec carte et 1 sans carte.

    sur cette carte, tu vas pouvoir envoyer des commandes :
    • restart_carte()
    • get_status()

    par exemple.

    dans ces fonctions, tu vas faire les vraies commandes ou bien les emuler (dans la limite du possible, il y a parfois des choses trop dures à émuler ou bien dont le coup de réalisation est trop élevé.

    En suivant l'exemple précédent :
    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
    void restart_carte(void)
    {
       if(getenv("SANS_CARTE") != NULL)
       {
          /* pas de carte, on emule */
          status_emule = restarted;
       }
       else
       {
          /* utilise la carte */
          _outpw(wPortAddr, wOutputVal)
       }
    }
     
    int get_status(void)
    {
       if(getenv("SANS_CARTE") != NULL)
       {
          /* pas de carte, on emule */
          return status_emule;
       }
       else
       {
          /* utilise la carte */
          return _inpw(wPortAddr)
       }
    }
    la variable status_emule est une variable globale définie dans un module à part dédié à l'emulation de ta carte.

    Après, tout dépend de ce que tu veux émuler exactement et des fonctions que tu veux émuler (fonctionnement en mode basique, fonctionnement qui ne marche pas), c'est à toi de voir et aussi de la finesse que tu veux apporter à ton émulation.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Pour voir les variables d'environnement de ton système, tu lances un shell et tu tapes la commande "set" sous Windows (sous Unix, la commande dépend de ton shell, cela peut être set ou sentenv)
    env fonctionne quelque soit le shell.

    Pour positionner les variables d'environnement maintenant. Sous Windows, clic droit sur le poste de travail option propriétés, dans l'onglet avancé, il y a un bouton Variable d'environnement et tu fais tes modifications (il faut peut être rebooter pour que les modifications soient prises en compte).


    Sous Unix, il faut regarder dans tes scripts de lancement (~/.bashrc par exemple).
    Ca, c'est pour avoir une variable mise en permanence. Normalement, on utilise
    setenv/ = + export suivant le shell dans le shell ou on lance le programme. Et les debuggeurs permettent de placer les variables a ce qu'on veut. Les EDI devraient etre capables de faire la meme chose.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Les EDI devraient etre capables de faire la meme chose.
    Je viens de ragarder, effectivement Visual Studio sait le faire, tu me l'apprends et je me coucherai moins bête ce soir.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. Utiliser des macros Excel sous open office
    Par Memes dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/11/2007, 21h46
  2. comment faire pour que plusieurs user utilise mem macro?
    Par megapacman dans le forum Access
    Réponses: 4
    Dernier message: 27/03/2006, 16h55
  3. [VBA] utiliser une macro contenue dans un autre classeur
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 01/02/2006, 18h46
  4. Comment utiliser la macro TRACE()?
    Par Crisanar dans le forum MFC
    Réponses: 6
    Dernier message: 16/09/2005, 10h48
  5. Macro utilisant une macro...
    Par Gogoye dans le forum C
    Réponses: 2
    Dernier message: 29/10/2003, 14h22

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