#If 0 làm gì


8

Hôm nay tôi bắt đầu sử dụng MPLAB X để lập trình PIC của mình và tìm thấy một mẫu mã, với nhiều tệp và điểm để điền mã. Trước khi tôi có một tập tin duy nhất với mã của tôi trong đó. Trong mẫu này, nơi tôi phải đặt các bit Cấu hình của mình, có văn bản sau:

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

Tôi không thực sự hiểu "Loại bỏ #if 0 để nhúng các từ cấu hình." có nghĩa là ... Đây là một cái gì đó thực sự đơn giản. Tôi đã thử googling và tìm kiếm hướng dẫn trình biên dịch, nhưng không thu được kết quả tốt. Từ những gì tôi có thể hiểu, mã ở giữa #if 0 và #endif không bao giờ được biên dịch. Điều này có nghĩa là gì? Nó có liên quan gì đến việc thiết lập các bit cấu hình trong mã so với sau đó không?

Câu trả lời:


17

Để mở rộng một chút trên #if 0:
Về cơ bản, đây là một bản hack để cho phép nhận xét nhiều dòng. Bộ tiền xử lý, chạy trước trình biên dịch, sẽ loại bỏ mọi thứ giữa #if 0 và #endif phù hợp.

Một lý do nó được sử dụng thay vì / * * / nhận xét kiểu là bạn có thể kích hoạt toàn bộ khối chỉ bằng cách thay đổi thành "#if 1".


9
Cụ thể, /* */không lồng nhau, vì vậy nếu bạn bao quanh một khối lớn mã /* */đã có một /* */nhận xét bên trong nó, toàn bộ điều sẽ không nhận xét chính xác. Mặc dù vậy, một cách tiếp cận sạch hơn đối với thư viện này sẽ được sử dụng #if defined EMBED_CONFIG_WORDSthay vì #if 0và sau đó (có thể trong một tệp cấu hình riêng biệt hoặc một cái gì đó) có một dòng như //#define EMBED_CONFIG_WORDSvới một bình luận có nội dung "bỏ dòng này để cho phép nhúng các từ cấu hình."
BlueRaja - Daniel Pflughoeft

5

Từ những gì tôi có thể hiểu, mã ở giữa #if 0 và #endif không bao giờ được biên dịch.

Đúng.

Điều này có nghĩa là gì? Nó có liên quan gì đến việc thiết lập các bit cấu hình trong mã so với sau đó không?

Các bit cấu hình là một thanh ghi được lập trình đặc biệt trong PIC xác định hoạt động của bộ tạo dao động, phát hiện ra màu nâu, + những thứ khác. Từ một trong các hướng dẫn tham khảo : (macro __CONFIG trong bản đồ C đến chỉ thị tương ứng trong lắp ráp)

Chỉ thị CONFIG của MPASM

Trình biên dịch của Microchip, MPASM, có một tính năng hay cho phép bạn chỉ định, trong tệp mã nguồn, trạng thái được chọn của các bit cấu hình cho chương trình này. Điều này đảm bảo rằng khi lập trình một thiết bị cho một ứng dụng, cấu hình cần thiết cũng được lập trình. Điều này làm giảm rủi ro lập trình cấu hình thiết bị sai và tự hỏi tại sao nó không còn hoạt động trong ứng dụng.


3

Chính xác của bạn, mã ở giữa #if 0 / # endif không bao giờ được biên dịch. Đó là một cách khác để bình luận về một khối mã.

Việc xóa #if 0 / # endif sẽ bao gồm các macro __CONFIG sẽ cho phép các bit đó trong các bit cấu hình của PIC.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.