La configuration d'un C projet avec plusieurs fichiers source dans MPLAB

Je suis en utilisant le MPLAB IDE et le compilateur XC8 pour un projet C pour les PIC18 appareils. Je suis en train de construire un projet avec plusieurs fichiers source et vous ne savez pas comment faire de la structure.

Dans le projet, j'ai les choses suivantes:

  • Un fichier principal.c où le code principal est situé. De là, plusieurs fichiers sont inclus:
    • xc.h: pour définir la puce de variables spécifiques et donc
    • stdlib.h, stdio.h, plib.h, des retards.h: pour le compilateur de fonctions
    • enc28j60.h: un homebrew fichier avec des définitions et des prototypes
  • Un fichier enc28j60.c, où les fonctions de prototypes dans enc28j60.h aller

Je ne peut pas compiler enc28j60.c en tant que fichier autonome, car elle repose sur les définitions en main.c.

J'ai quelques questions sur la façon de mettre ce projet en place:

  1. Dois-je ajouter enc28j60.c à la source des fichiers de mon projet MPLAB? Si je fais cela, MPLAB essaie de compiler le fichier, qui échoue. Si je ne fais pas cela, le linker ne trouve pas les symboles qui sont définis dans enc28j60.c et prototypée en enc28j60.h.
  2. Dois-je #include enc28j60.c à partir de quelque part? Si non, en quoi MPLAB de savoir où obtenir le fichier?
  3. Dois-je ajouter enc28j60.h pour les fichiers d'en-tête de mon projet MPLAB?
  4. Dois-je #include enc28j60.h à partir de quelque part? Maintenant, je fais cela en main.c, après les définitions enc28j60.h a besoin pour fonctionner (et ne pas jeter #errors).
  • Jamais, jamais inclure C fichiers. Y compris est pour les en-têtes. Vous devez vous lien les fichiers objets générés à partir de l'individu source des fichiers. I. e., <C_COMPILER> -c foo.c -o foo.o puis <C_COMPILER> -c bar.c -o bar.o, enfin <LINKER> foo.o bar.o -o binary_name
  • merci, mais comment puis-je créer des fichiers d'objet à partir d'un fichier qui ne peut pas être compilé sous forme d'un fichier autonome? "Je ne peut pas compiler enc28j60.c en tant que fichier autonome, car elle repose sur les définitions en main.c."
  • Définitions? Tu veux dire déclarations, droit? Dans ce cas, votre conception est mauvaise et vous devez déplacer les déclarations en question à un autre, accessible partout dans le monde d'en-tête.
  • donc il n'est pas possible, ce que je veux? Dans ce cas, vous pouvez écrire que comme une réponse 🙂
  • Il est. Citer moi-même: "vous devez déplacer les déclarations en question à un autre, accessible partout dans le monde d'en-tête"
  • oui, mais pas avec cette configuration, j'ai voulu dire. Donc, pourriez-vous écrire une réponse avec celle de devis et de configuration d'un projet avec un design correct?
  • Ajout d'une réponse.

InformationsquelleAutor Keelan | 2013-04-30