Apa yang dilakukan # jika 0 lakukan

8

Hari ini saya mulai menggunakan MPLAB X untuk memprogram PICs saya, dan menemukan templat kode, dengan banyak file dan tempat untuk mengisi kode. Sebelumnya saya punya satu file dengan kode saya di dalamnya. Dalam templat ini, tempat saya seharusnya meletakkan bit Konfigurasi saya, ada teks berikut:

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

Saya benar-benar tidak mengerti apa yang "Hapus # jika 0 untuk menanamkan kata-kata konfigurasi." berarti ... Ini mungkin sesuatu yang sangat sederhana. Saya mencoba googling, dan mencari manual kompiler, tetapi tidak mendapatkan hasil yang baik. Dari apa yang saya mengerti, kode di antara # jika 0 dan # end tidak pernah dikompilasi. Apa arti embed ini? Apakah ada hubungannya dengan pengaturan config-bit dalam kode vs sesudahnya?

varesa
sumber

Jawaban:

17

Untuk memperluas sedikit pada #jika 0:
Ini pada dasarnya hack untuk memungkinkan komentar multi-line. Preprocessor, yang berjalan sebelum kompiler melakukannya, akan menghapus semuanya antara # jika 0 dan #endif yang cocok.

Salah satu alasan digunakan alih-alih / * * / style komentar adalah bahwa Anda dapat mengaktifkan seluruh blok hanya dengan mengubahnya ke "#jika 1".

exscape
sumber
9
Secara khusus, /* */jangan bersarang, jadi jika Anda mengelilingi blok besar kode dengan /* */yang sudah memiliki /* */komentar di dalamnya, semuanya tidak akan berkomentar dengan benar. Pendekatan yang lebih bersih, untuk pustaka ini, akan menggunakan #if defined EMBED_CONFIG_WORDSdaripada #if 0dan kemudian (mungkin dalam file konfigurasi terpisah atau sesuatu) memiliki baris seperti //#define EMBED_CONFIG_WORDSdengan komentar yang mengatakan "batalkan komentar pada baris ini untuk memungkinkan embedding kata-kata konfigurasi."
BlueRaja - Danny Pflughoeft
5

Dari apa yang saya mengerti, kode di antara # jika 0 dan # end tidak pernah dikompilasi.

Iya.

Apa arti embed ini? Apakah ada hubungannya dengan pengaturan config-bit dalam kode vs sesudahnya?

Bit config adalah register terprogram khusus dalam PIC yang menentukan operasi osilator, deteksi brown-out, + hal-hal lain. Dari salah satu manual referensi : (makro __CONFIG dalam peta C untuk arahan terkait dalam perakitan)

Arahan KONFIG MPASM

Assembler Microchip, MPASM, memiliki fitur yang bagus yang memungkinkan Anda menentukan, dalam file kode sumber, status terpilih dari bit konfigurasi untuk program ini. Ini memastikan bahwa ketika memprogram perangkat untuk suatu aplikasi, konfigurasi yang diperlukan juga diprogram. Ini meminimalkan risiko pemrograman konfigurasi perangkat yang salah, dan bertanya-tanya mengapa itu tidak lagi berfungsi dalam aplikasi.

Jason S
sumber
3

Anda benar sekali, kode di antara # jika 0 / # endif tidak pernah dikompilasi. Ini cara lain untuk mengomentari blok kode.

Menghapus # jika 0 / # endif akan menyertakan makro __CONFIG yang akan mengaktifkan bit-bit tersebut dalam bit konfigurasi PIC.

Jim A
sumber