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 :

Pic et C


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut Pic et C
    Bonjour,

    J'utilise le c pour programmer un Pic avec htpic en version gratuite et mplab 7.3.

    J'ai un programme Machin.c qui utilise des fonctions, des constantes et des variables qui se trouvent dans l'header bidule.h.

    Je souhaite que tout ce qui se trouve dans bidule.h soit invisible (sans avoir à le réécrire en asm).

    Comment puis-je faire ?

    Est-il possible de le compiler et de le réutiliser dans le machin.c sans que le bidule.h soit accessible ?

    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    T'entends quoi par invisible et innaccesible ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Compilé.

    En assembleur ou en binaire.

    Que le source en language c ne soit plus lisible tel quel.

  4. #4
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Si j'ai bien compris, tu peux faire comme ça:
    Alors tu code ton programme en C et alors tu utilises un désassembleur et ça te donne un code en assembleur correspondant à ton code C...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Oui mais je ne sais tjs pas comment faire.

    Je préférerais créer un fichier compilé et déclarer son utilisation dans le .c.

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Tu as deux choix:
    1. Tu compiles le fichier .c en un fichier objet .o/.obj que tu fournis à l'utilisateur qui devra l'ajouter à son édition de lien.
    2. Tu crées une bibliothèque.

    Dans les deux cas, tu dois fournir le fichier entête donnant le prototype des fonctions contenus dans le fichier objet ou la bibliotheque (avec également tout ce qui peut etre utile à l'utilisateur de la fonction, typedefs, enums, etc.).

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Pic et C
    Citation Envoyé par vincevg
    J'utilise le c pour programmer un Pic avec htpic en version gratuite et mplab 7.3.
    Non. Tu utilises le C pour écrire un programme.
    J'ai un programme Machin.c qui utilise des fonctions, des constantes et des variables qui se trouvent dans l'header bidule.h.
    Beark. Organisation à la gomme. Il faut cesser le bricolage. A lire d'urgence :

    http://www.developpez.net/forums/vie...558796#2558796

    Je souhaite que tout ce qui se trouve dans bidule.h soit invisible (sans avoir à le réécrire en asm).

    Comment puis-je faire ?

    Est-il possible de le compiler et de le réutiliser dans le machin.c sans que le bidule.h soit accessible ?
    Une fois que le programme est correctement organisé en modules clairs, tu crées une bibliothèque et tu la livres avec le header correspondant (et un manuel utilisateur sérieux (interfaces, exemples...). Ca s'appelle un "Kit de Développement" (SDK etc.).

    Les détails sont dans le mode d'emploi de ton environnement de développement.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Le programme est correctement organisé en modules clairs.

    Ce que je cherche c'est comment faire. Le compilateur HTPIC (du moins la version gratuite) a une aide un peu courte.

    Quelqu'un qui le connait peut-il me donner des commandes directement.

    Si j'ai bien compris :

    1. Je crée un A.c (ou.h) qui contient mes fonctions que je veux cacher et je le compile (en .o ou . obj).
    2. Je crée un autre B.h, visible celui là qui contient les en-tête de mes fonctions.
    3. Ensuite j'écris mon programme principal (main.c) qui déclare inclure B.h.


    Ce que je ne sais pas faire c'est dans l'étape 2, créer la liaison entre B et A.

    Merci pour vos réponses

  9. #9
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Il n'y a pas d'etape 2. Prennons un exemple stupide:
    J'ai mon hello.c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include <stdio.h>
     
    void hello(void)
    {
       printf("Hello.\n");
    }
    Evidemment, j'ai ecrit le fichier entete qui correspond:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef H_HELLO
    #define H_HELLO
     
    void hello(void);
     
    #endif
    Pour une raison obscure, je ne veux pas que quelqu'un sache comment j'ai ecrit la fonction hello(). Je compile donc mon hello.c pour produire le fichier objet hello.o (ou je le mets dans une bibliotheque, libhello.a).

    Je n'ai qu'a proposer le fichier hello.o et son interface hello.h pour que n'importe qui (utilisant le meme format de fichier objet) puisse construire son executable.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Merci DaZumba. Et je peux mettre autant de procédure que je veux dedans ?

  11. #11
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il convient alors de donner des noms plus explicite que hello.c et hello.h

    Par exemple tu pourrais avoir un fichier nommée console.c et un autre nommée console.h dans lesquels tu mettras respectivement les définitions et les prototypes de ce qui permet de gérer l'ecran ( position de curseur, couleur,paramètrage de la console,....)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  12. #12
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par vincevg
    Merci DaZumba. Et je peux mettre autant de procédure que je veux dedans ?
    Oui. Dans ton fichier entete par contre, tu ne presentes que les fonctions "publiques" dont l'utilisateur a besoin. Pour ne pas finir avec un code source de 15 pieds de long, une bibliotheque (un assemblage de fichiers objet, en fin de compte) est une bonne solution.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Et j'ai aussi plein de define que, pour la même raison obscure, je ne souhaite pas rendre visible. Je peux les mettre dans le Hello.c ?

    Sur le µC la place est un facteur important.

    Donc si je pars dans l'idée de faire plein de .o, comment puis-je faire pour les assembler dans une librairie ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par vincevg
    Et j'ai aussi plein de define que, pour la même raison obscure, je ne souhaite pas rendre visible. Je peux les mettre dans le Hello.c ?
    Ca dépend de ce que c'est, des dépendances... Si tu cheches un anonymat poussé, je te conseille de t'intéresser à la technique des TAD,

    http://emmanuel-delahaye.developpez.com/tad.htm

    qui ne laissent que très peu de traces dans les headers publics (une structure incomplète et des points d'entrés).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef H_XXX
    #define H_XXX
    /* xxx.h */
     
    struct xxx;
     
    struct xxx *xxx_create ();
    void xxx_delete (struct xxx *self);
     
    int xxx_function (struct xxx *self);
    /* ... */
    #endif
    Sur le µC la place est un facteur important.

    Donc si je pars dans l'idée de faire plein de .o, comment puis-je faire pour les assembler dans une librairie ?
    Quels sont les mots que tu ne comprends pas dans
    Les détails sont dans le mode d'emploi de ton environnement de développement.
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par vincevg
    Je peux les mettre dans le Hello.c ?
    Plutot dans un hello_secret.h, qui est inclus dans hello.c. Evidemment, aucun des #define ne doit etre important pour l'utilisateur.

    Donc si je pars dans l'idée de faire plein de .o, comment puis-je faire pour les assembler dans une librairie ?
    Voir la documentation de ton editeur de lien, compilateur, archiveur prefere...

    Si tu vas sur le site d'Emmanuel Delahaye, il y a un article sur les Abstract Data Types, qui suivent typiquement une conception "bibliotheque opaque" dont tu peux t'inspirer.

    Edit: Bon, Emmanuel est passe avant moi...

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Quels sont les mots que tu ne comprends pas dans
    Citation:

    Les détails sont dans le mode d'emploi de ton environnement de développement.
    Je pense que c'est toi qui ne comprend pas tout. Je ne travaille pas sur un PC (ou plus exactement pour un PC) mais pour un micro contrôleur. Je n'ai pas d'environnement de développement mais simplement un compilateur en ligne de commande que j'ai moi même intégré dans un EDI gratuit et trés ouvert. Donc toute l'aide que j'ai est celle du compilateur qui n'est pas trés étoffé (ou que je ne comprend pas bien). J'ai lu les différentes pages que tu proposais ici ou là elles sont super-intéressantes mais ne corresponde jamais pile poil à mon cas précis. D'où mes questions qui te semble naïves voires stupides.

    Si tu cheches un anonymat poussé.
    Non pas poussé du tout juste du language objet voire de l'assembleur.

    Non. Tu utilises le C pour écrire un programme.
    Un clavier pour être encore plus précis.

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Ca ne veut tjs pas marcher :

    1 - Il refuse de compiler s'il ne trouve pas de fonction main (le hello.c),
    2 - Il ne fait pas le lien avec les define qui sont dans le hello.c,
    3 - Une fois que ça marche (j'ai mis les define dans tous les fichiers) il ne trouve pas les fonctions.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 92
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par vincevg
    Ca ne veut tjs pas marcher :

    1 - Il refuse de compiler s'il ne trouve pas de fonction main (le hello.c)

    ben parce que tu ne fais pas que complier, or si tu linke c'est normal qu'il râle.

    L'idée c'est de faire un objet .o et pas un exécutable .exe
    Essaye l'option -o de gcc

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 7
    Points
    7
    Par défaut
    Essaye l'option -o de gcc
    Ce n'est pas GCC mais htpic mon compilateur. Mais je vais essayer de linker ou de voir pourquoi ça ne linke pas.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par vincevg
    Essaye l'option -o de gcc
    Ce n'est pas GCC mais htpic mon compilateur. Mais je vais essayer de linker ou de voir pourquoi ça ne linke pas.
    Tu as peut être besoin de l'aide de spécialistes....

    http://jmandon.free.fr/
    http://www.htsoft.com/support/faqs.php
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. [PIC 16C84] Ajouter une eeprom externe i2c à un programme
    Par jacques8 dans le forum Autres architectures
    Réponses: 2
    Dernier message: 30/09/2005, 17h11
  2. [PIC] Pause avec les timers
    Par Ekinoks dans le forum Assembleur
    Réponses: 1
    Dernier message: 07/05/2005, 23h04
  3. Communication RS232 avec un PIC via delphi
    Par JeanPh dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 09/08/2004, 22h56
  4. [TComport] communiquer avec un PIC
    Par tracks dans le forum C++Builder
    Réponses: 5
    Dernier message: 09/06/2004, 13h11
  5. [PIC] Enregistrement de données permanentes
    Par Grulou dans le forum Autres architectures
    Réponses: 6
    Dernier message: 15/03/2004, 19h31

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