Cosa fa #if 0


8

Oggi ho iniziato a utilizzare MPLAB X per programmare i miei PIC e ho trovato un modello di codice, con più file e spot per riempire il codice. Prima avevo un solo file con il mio codice. In questo modello, dove dovrei mettere i miei bit di configurazione, c'è il seguente testo:

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

Non capisco davvero cosa sia il "Rimuovi #if 0 per incorporare le parole di configurazione". significa ... Questo è probabilmente qualcosa di veramente semplice. Ho provato a cercare su Google e a cercare nel manuale dei compilatori, ma non ho ottenuto buoni risultati. Da quello che posso capire, il codice tra #if 0 e #endif non viene mai compilato. Che cosa significa questo incorporamento? Ha qualcosa a che fare con l'impostazione dei bit di configurazione in codice vs.

Risposte:


17

Espandere un po 'su #if 0:
è essenzialmente un trucco per consentire commenti su più righe. Il preprocessore, che viene eseguito prima del compilatore, rimuoverà tutto tra #if 0 e #endif corrispondente.

Uno dei motivi per cui viene utilizzato al posto dei commenti / * * / style è che puoi abilitare l'intero blocco semplicemente modificandolo in "#if 1".


9
In particolare, /* */non si annida, quindi se circondi un grande blocco di codice /* */che contiene già un /* */commento al suo interno, l'intera cosa non verrà commentata correttamente. Un approccio più pulito, tuttavia, per questa libreria sarebbe stato usare #if defined EMBED_CONFIG_WORDSinvece di #if 0e quindi (possibilmente in un file di configurazione separato o qualcosa del genere) avere una riga come //#define EMBED_CONFIG_WORDScon un commento che dice "decommenta questa riga per consentire l'incorporamento delle parole di configurazione".
BlueRaja - Danny Pflughoeft

5

Da quello che posso capire, il codice tra #if 0 e #endif non viene mai compilato.

Sì.

Che cosa significa questo incorporamento? Ha qualcosa a che fare con l'impostazione dei bit di configurazione in codice vs.

I bit di configurazione sono uno speciale registro programmato nel PIC che determina il funzionamento dell'oscillatore, il rilevamento del brown-out e altre cose. Da uno dei manuali di riferimento : (la macro __CONFIG in C è mappata alla direttiva corrispondente in assembly)

Direttiva CONFIG di MPASM

L'assemblatore di Microchip, MPASM, ha una bella funzionalità che consente di specificare, nel file del codice sorgente, gli stati selezionati dei bit di configurazione per questo programma. Ciò garantisce che quando si programma un dispositivo per un'applicazione sia programmata anche la configurazione richiesta. Questo riduce al minimo il rischio di programmare una configurazione errata del dispositivo e di chiedersi perché non funziona più nell'applicazione.


3

Esatto, il codice tra #if 0 / # endif non viene mai compilato. È un altro modo di commentare un blocco di codice.

La rimozione dell'endif #if 0 / # includerà le macro __CONFIG che abiliteranno quei bit nei bit di configurazione del PIC.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.