¿Qué hace #if 0?

8

Hoy comencé a usar MPLAB X para programar mis PIC y encontré una plantilla de código, con varios archivos y puntos para completar el código. Antes he tenido un solo archivo con mi código en él. En esta plantilla, donde se supone que debo colocar mis bits de configuración, hay el siguiente texto:

/* 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

Realmente no entiendo lo que "Eliminar #if 0 para insertar palabras de configuración". significa ... Esto es probablemente algo realmente simple. Intenté buscar en Google y buscar el manual de los compiladores, pero no obtuve ningún buen resultado. Por lo que puedo entender, el código entre #if 0 y #endif nunca se compila. ¿Qué significa esta inserción? ¿Tiene algo que ver con establecer los bits de configuración en el código y después?

    
pregunta varesa

3 respuestas

16

Para expandir un poco en #if 0:
Es esencialmente un truco para permitir comentarios de varias líneas. El preprocesador, que se ejecuta antes de que lo haga el compilador, eliminará todo entre #if 0 y el #endif correspondiente.

Una razón por la que se usa en lugar de / * * / comentarios de estilo es que puedes habilitar todo el bloque simplemente cambiándolo a "#if 1".

    
respondido por el exscape
5
  

Por lo que puedo entender, el código entre #if 0 y #endif nunca se compila.

Sí.

  

¿Qué significa esta inserción? ¿Tiene algo que ver con establecer los bits de configuración en el código y después?

Los bits de configuración son un registro programado especial en el PIC que determina el funcionamiento del oscilador, la detección de caída de tensión y otras cosas. De uno de los manuales de referencia : (la macro __CONFIG en C corresponde a la directiva correspondiente en ensamblaje )

  

Directiva CONFIG MPASM

     

El ensamblador de Microchip, MPASM, tiene una buena característica que le permite especificar, en el archivo de código fuente, los estados seleccionados de los bits de configuración para este programa. Esto garantiza que al programar un dispositivo para una aplicación también se programe la configuración requerida. Esto minimiza el riesgo de programar la configuración incorrecta del dispositivo y se pregunta por qué ya no funciona en la aplicación.

    
respondido por el Jason S
3

Tienes toda la razón, el código entre el #if 0 / # endif nunca se compila. Es otra forma de comentar un bloque de código.

La eliminación de #if 0 / # endif incluirá las macros __CONFIG que habilitarán esos bits en los bits de configuración del PIC.

    
respondido por el Jim A

Lea otras preguntas en las etiquetas