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

Réseau C Discussion :

Tester si processeur de type x86 ?


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut Tester si processeur de type x86 ?
    Bonjour,

    J'ai développé un programme daemon. Il tourne donc en permanence.
    Ce programme est déstiné à l'embarqué et tourne sur proc ARM. Hors je le développe sous x86.

    Je voudrais donc insérer un mode débug dans mon programme.
    Je m'explique si le programme est lancé sous x86 donc en debug je veux pouvoir le quitter proprement en appuyant sur une touche du style "echap" ou "ctrl^C". Par contre si il tourne sur le module embarqué et donc sous ARM je ne veux plus avoir cette possibilité de debug et donc touche de sortie.

    Je pense donc qu'il faut ajouter en début de programme un truc du style:

    #if def x86
    |
    | Traitement touche de sortie
    |
    #end if

    Quelqu'un a une idée comment faire çà ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Tester si processeur de type x86 ?
    Citation Envoyé par olivier857
    J'ai développé un programme daemon. Il tourne donc en permanence.
    Ce programme est déstiné à l'embarqué et tourne sur proc ARM. Hors je le développe sous x86.
    Donc tu es obligé de recompiler le code. Tu peux donc définir une macro externe (Makefile) qui permet d'identifier la cible, genre
    ou
    Je pense donc qu'il faut ajouter en début de programme un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifdef TARGET_I86
       /* Traitement touche de sortie */
    #end if
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #if defined (TARGET_I86)
       /* Traitement touche de sortie */
    #end if

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Ok merci !

    Alors pour ce qui est de la compilation ARM, y a pas de souci je sais comment faire.

    Par contre mon pb viens de la detection du type de proc.

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef TARGET_I86
    #   printf("test réussi");   //  affichage provisoire pour essayer le test
    #end if
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #if defined (TARGET_I86)
    #   printf("test réussi");
    #end if
    Mais ca ne marche pas, cela me fait une erreur de compilation.
    dans le 1er cas ifdef non terminé et le 2ème if non terminé

    Précision je développe sur Kdevelop 3.3.2 sur une debian.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par olivier857
    Par contre mon pb viens de la detection du type de proc.

    J'ai essayé :
    Gné ? C'est quoi ce # ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef TARGET_I86
       printf("test reussi\n");   //  affichage provisoire pour essayer le test
    #end if
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #if defined (TARGET_I86)
       printf("test reussi\n");
    #end if

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Oups !

    j'essaye de suite.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Bon alors ca compile, plus de pb !

    Mais ca ne m'affiche pas "test reussi" au lancement du prog et le prog s'éxecute normalement comme si je n'avais fait aucun changement.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Pas d'idée ?

    Au passage pourquoi I86 et non x86 ?

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par olivier857
    Mais ca ne m'affiche pas "test reussi" au lancement du prog et le prog s'éxecute normalement comme si je n'avais fait aucun changement.
    As-tu défini TARGET_I86 sur la ligne de commande avec
    ?

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par olivier857
    Au passage pourquoi I86 et non x86 ?
    "Intel x86"... Mais si tu veux mettre MARSUPILAMI ou NON_AU_CPE, ça ne me dérange pas...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par olivier857
    Au passage pourquoi I86 et non x86 ?
    "Intel x86"... Mais si tu veux mettre MARSUPILAMI ou NON_AU_CPE, ça ne me dérange pas...
    Ok mdr, je vois c'est juste un descriptif après faut que je le déclare dans les options de mon compilateur je suppose.

    Une idée pour gcc? Je ne trouve pas.

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par olivier857
    Ok mdr, je vois c'est juste un descriptif après faut que je le déclare dans les options de mon compilateur je suppose.

    Une idée pour gcc? Je ne trouve pas.
    Quels sont les mots que tu ne comprends pas dans
    As-tu défini TARGET_I86 sur la ligne de commande avec
    ?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Merde pardon, désolé j'ai vraiment du mal aujourd'hui.

    J'avais pas vu que tu avais poster 2 message, j'avais lu que le second, désolé. j'essayerai d'^tre plus attentif la prochaine fois.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    As-tu défini TARGET_I86 sur la ligne de commande avec
    ?
    Bon alors voilà je l'ai bien fait mais tjs rien.

    Je sais pas trop mais je m'y prend peut être mal.

    Pourrait tu me donner plus de détails, merci !

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par olivier857
    Pourrait tu me donner plus de détails, merci !
    Montre ta ligne de commande exacte et ton code exact.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Ok
    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
    #include <termios.h>     /*  port série  */
    #include <sys/types.h>   /*    socket    */
    #include <sys/socket.h>  /*    socket    */
    #include <netinet/in.h>  /*    socket    */
    #include <arpa/inet.h>   /*    socket    */
    #include <netdb.h>       /*    socket    */
    #include <sys/fcntl.h>   /*    open()    */
    #include <unistd.h>      /*    close()   */
    #include <stdio.h>       /* lib standard */ 
     
    #define IP_SERVEUR "***.***.***.***"
    #define PORT_SERVEUR 1500
    #define PORT "/dev/ttyS0"
    #define NUM_SITE "1"
    #define NUM_TERM "1"
     
    #ifdef TARGET_I86
     printf("test reussi\n");
    #endif
     
    int main (void) {
      int ...
      ...
      ...
    }

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par olivier857
    STOP !

    C'est sur la ligne de commande du compîlateur qu'il faut mettre cette option !

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    J'ai essayé aussi :

    Mais il fait des erreurs de compilation dans ce cas là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gcc lecture_envoie_socket2.c -DTARGET_I86
    lecture_envoie_socket2.c:18: error: erreur de syntaxe before string constant
    lecture_envoie_socket2.c:18: attention : conflicting types for built-in function `printf'
    lecture_envoie_socket2.c:18: attention : data definition has no type or storage class
    alors que avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc lecture_envoie_socket2.c
    Il n'en fait pas et le prog fonctionne normalement.

  18. #18
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    C'est normal. Une fois TARGET_I86 definit, tu te retrouves avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      printf("test reussi.\n");
     
      int main(void)
      {
         ...
      }
    Cela ne risque pas de compiler. Pour resumer ce qu'Emmanuel tente de te dire, tu dois encadrer le code specifique a ta cible entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #ifdef TARGET_I86
     
    #endif
    C'est aussi simple que cela. Mais il faut que le code reste du C valide.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Ok donc si j'ai bien compris il faut faire un truc dans le style :

    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
    #include <termios.h>     /*  port série  */
    #include <sys/types.h>   /*    socket    */
    #include <sys/socket.h>  /*    socket    */
    #include <netinet/in.h>  /*    socket    */
    #include <arpa/inet.h>   /*    socket    */
    #include <netdb.h>       /*    socket    */
    #include <sys/fcntl.h>   /*    open()    */
    #include <unistd.h>      /*    close()   */
    #include <stdio.h>       /* lib standard */ 
     
    #define IP_SERVEUR "**.***.***.***"
    #define PORT_SERVEUR 1500
    #define PORT "/dev/ttyS0"
    #define NUM_SITE "1"
    #define NUM_TERM "1"
     
    #ifdef TARGET_I86
     void test_proc () {
       printf("test reussi\n");
     }
    #endif
     
    int main (void) {
      ...
    }

  20. #20
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Je te propose de retourner a un exemple tout simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
     
    int main(void)
    {
    #ifdef HELLO_YOU
        printf("Hello you!\n");
    #endif
     
    #ifdef HELLO_ME
        printf("Hello me!\n");
    #endif
       return 0;
    }
    Appelons ce code hello.c
    D'abord, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc hello.c -DHELLO_YOU -o hello
    Cette ligne de commande implique un #define HELLO_YOU au debut du fichier hello.c. Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc hello.c -DHELLO_ME -o hello
    Ici, c'est un #define HELLO_ME qui a ete produit.
    La phrase qui va etre affichee ne sera donc pas la meme, et il est facile de prevoir la sortie. Remarque qu'en compilant ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc hello.c -o hello
    le code n'affichera rien.

    Maintenant, tu devrais pouvoir appliquer cela a ton exemple: encadrer le code pour les x86 par des balises adequates, le code pour les autres cibles par d'autres balises, et 'conditionner' la compilation en utilisant l'option -D de gcc.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Tester si une structure(type) n'est pas null
    Par draco951 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 20/10/2012, 15h38
  2. Réponses: 1
    Dernier message: 17/05/2008, 22h44
  3. Tester un type
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/05/2004, 15h44
  4. Réponses: 10
    Dernier message: 18/11/2003, 18h01
  5. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51

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