Que fait #if 0

8

Aujourd'hui, j'ai commencé à utiliser MPLAB X pour programmer mes PIC et j'ai trouvé un modèle de code, avec plusieurs fichiers et emplacements pour remplir le code. Avant, j'avais un seul fichier avec mon code dedans. Dans ce modèle, où je suis censé mettre mes bits de configuration, il y a le texte suivant:

/* TODO Fill in your config bits here.  Remove #if 0 to embed config words.   */

#if 0

/* General syntax for configuration word 1 - Check your device .h file
for an up to date listing of available macros.*/
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_OFF);

/* If the device has multiple configuration words, the second macro defines
the second configuration word.  Again check your device .h file
for an up to date listing of available macros. */
__CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_19 & LVP_OFF);

#endif

Je ne comprends pas vraiment ce que "Supprimer # si 0 pour incorporer des mots de configuration". signifie ... C'est probablement quelque chose de vraiment simple. J'ai essayé de googler et de rechercher le manuel du compilateur, mais je n'ai pas obtenu de bons résultats. D'après ce que je peux comprendre, le code entre #if 0 et #endif n'est jamais compilé. Que signifie cette intégration? At-il quelque chose à voir avec la définition des bits de configuration dans le code par rapport à la suite?

varesa
la source

Réponses:

17

Pour développer un peu sur #if 0:
C'est essentiellement un hack pour permettre des commentaires sur plusieurs lignes. Le préprocesseur, qui s'exécute avant le compilateur, supprimera tout entre #if 0 et #endif correspondant.

Une des raisons pour lesquelles il est utilisé à la place des commentaires de style / * * / est que vous pouvez activer le bloc entier simplement en le changeant en "#if 1".

exscape
la source
9
En particulier, /* */ne s'imbrique pas, donc si vous entourez un gros bloc de code avec /* */déjà un /* */commentaire à l'intérieur, le tout ne sera pas correctement commenté. Une approche plus propre cependant, pour cette bibliothèque, aurait été d'utiliser à la #if defined EMBED_CONFIG_WORDSplace de #if 0(puis dans un fichier de configuration séparé ou quelque chose comme ça) une ligne comme //#define EMBED_CONFIG_WORDSavec un commentaire disant "décommentez cette ligne pour permettre l'incorporation de mots de configuration".
BlueRaja - Danny Pflughoeft
5

D'après ce que je peux comprendre, le code entre #if 0 et #endif n'est jamais compilé.

Oui.

Que signifie cette intégration? At-il quelque chose à voir avec la définition des bits de configuration dans le code par rapport à la suite?

Les bits de configuration sont un registre programmé spécial dans le PIC qui détermine le fonctionnement de l'oscillateur, la détection de brunissement, etc. Depuis l' un des manuels de référence : (la macro __CONFIG en C est mappée à la directive correspondante dans l'assembly)

Directive CONFIG du MPASM

L'assembleur de Microchip, MPASM, a une fonctionnalité intéressante qui vous permet de spécifier, dans le fichier de code source, les états sélectionnés des bits de configuration pour ce programme. Cela garantit que lors de la programmation d'un appareil pour une application, la configuration requise est également programmée. Cela minimise le risque de programmer une mauvaise configuration de périphérique et de se demander pourquoi cela ne fonctionne plus dans l'application.

Jason S
la source
3

Vous avez parfaitement raison, le code entre #if 0 / # endif n'est jamais compilé. C'est une autre façon de commenter un bloc de code.

La suppression de #if 0 / # endif inclura les macros __CONFIG qui activeront ces bits dans les bits de configuration du PIC.

Jim A
la source