在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            條件編譯的用法

            作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
            看正點(diǎn)原子的stm32串口初始化程序,usart.h文件里如下:
            [cpp]view plaincopy
            1. #ifndef__USART_H
            2. #define__USART_H
            3. #include
            4. #include"stdio.h"
            5. externu8USART_RX_BUF[64];//接收緩沖,最大63個字節(jié).末字節(jié)為換行符
            6. externu8USART_RX_STA;//接收狀態(tài)標(biāo)記
            7. //如果想串口中斷接收,請不要注釋以下宏定義
            8. //#defineEN_USART1_RX//使能串口1接收
            9. voiduart_init(u32pclk2,u32bound);
            10. #endif


            這段程序里#define EN_USART1_RX被注釋掉了。

            本文引用地址:http://www.biyoush.com/article/201611/320437.htm

            usart.c里有一段串口中斷響應(yīng)子函數(shù)程序如下:

            [cpp]view plaincopy
            1. #ifdefEN_USART1_RX//如果使能了接收
            2. u8USART_RX_BUF[64];//接收緩沖,最大64個字節(jié).
            3. u8USART_RX_STA=0;//接收狀態(tài)標(biāo)記
            4. voidUSART1_IRQHandler(void)
            5. {
            6. ......
            7. }
            8. #endif


            手冊給出的解釋是,這里用了宏定義#ifdef,當(dāng)需要使用串口接收的時候,只要在usart.h里面定義EN_USART1_RX就可以了。不使用的時候注釋掉就可,這樣可以省出部分sram和flash。

            下轉(zhuǎn)一篇文章:http://blog.163.com/solylee@126/blog/static/171823157201011914824753/

            C中#if 0 和#if 1

            當(dāng)注釋掉大塊代碼時,使用"#if 0"比使用"/**/"要好,因?yàn)橛?/**/"做大段的注釋要防止被注釋掉的代碼中有嵌套的"/**/",這會導(dǎo)致注釋掉的代碼區(qū)域不是你想要的范圍, 當(dāng)被注釋掉的代碼很大時容易出現(xiàn)這種情況,特別是過一段時間后又修改該處代碼時更是如此。
            在這里順便對條件編譯(#ifdef, #else, #endif, #if等)進(jìn)行說明。以下分3種情況:  1. 情況1:   #ifdef _XXXX  ...程序段1...  #else  ...程序段2...  #endif  這表明如果標(biāo)識符_XXXX已被#define命令定義過則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯?! ±?  #define NUM  .............  .............  .............  #ifdef NUM   printf("之前NUM有過定義啦!:) ");  #else   printf("之前NUM沒有過定義!:( ");  #endif  }  如果程序開頭有#define NUM這行,即NUM有定義,碰到下面#ifdef NUM的時候,當(dāng)然執(zhí)行第一個printf。否則第二個printf將被執(zhí)行?! ∥艺J(rèn)為,用這種,可以很方便的開啟/關(guān)閉整個程序的某項(xiàng)特定功能?! ?:情況2:   #ifndef _XXXX   ...程序段1...   #else   ...程序段2...   #endif  這里使用了#ifndef,表示的是if not def。當(dāng)然是和#ifdef相反的狀況(如果沒有定義了標(biāo)識符_XXXX,那么執(zhí)行程序段1,否則執(zhí)行程序段2)。例子就不舉了?! ?:情況3:  #if 常量   ...程序段1...  #else  ...程序段2...  #endif   這里表示,如果常量為真(非0,隨便什么數(shù)字,只要不是0),就執(zhí)行程序段1,否則執(zhí)行程序段2。如果有#if需要頂格寫



            關(guān)鍵詞: 條件編譯stm32串口初始

            評論


            技術(shù)專區(qū)

            關(guān)閉