新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > KEIL 同一工程中的多文件處理

        KEIL 同一工程中的多文件處理

        作者: 時間:2016-11-25 來源:網絡 收藏
        首先,我們需要一個新文檔,這個文檔的建立有兩種方法(以delay1s函數為例)。第一種,在工程目錄下建立一個delay1s.txt然后將其改名為delay1s.h。因為都是同編碼的所以不會出現亂碼,然后在工程中將其打開。第二種方法是直接在工程中新建一個文檔,然后保存的時候將名字保存為delay1s.h即可。如果是需要添加很多文件的話建議使用第一種方法,這是個人建議。其次,我們需要編寫delay1s.h這個文件的內容,其內容如下:

        #ifndef _DELAY1S_H_
        #define _DELAY1S_H_
        void delay1s();//延時函數
        #endif
        這個是頭文件的定義,作用是聲明了delay1s()函數,因為如果在別的函數中如果我們需要用到delay1s()函數的話,若不事先聲明則在編譯的時候會出錯。對于#ifndef……#define……#endif;這個結構大概的意思就是說如果沒有定義(宏定義)一個字符串,那么我們就定義它,然后執行后面的語句,如果定義過了那么就跳過不執行任何語句。
        關于為什么要使用這么一個定義方法,比如在led_on()函數中我們調用了delay1s()函數,然后在main()函數中我們也調用了delay()函數,那么,在led_on()函數中我就就要包含頭文件delay1s.h,然后在main()函數中也要包含delay1s.h,若主函數中我們調用過led_on(),那么在編譯的時候,遇到delay1s()和led_on()的時候就會對delay1s.h進行兩次解釋,那么就會出現錯誤。若有以上預處理命令的話,那么在第二次的時候這個_DELAY1S_H_已經被定義過了,那么就不會出現重復定義的問題。這就是它的作用。但是注意,在編譯器進行編譯的時候頭文件不參與編譯。
        再次,我們建立一個led_on.h,起代碼內容如下:
        #ifndef _LED_ON_H_
        #define _LED_ON_H_
        void led_on(void);//燈閃爍
        #endif
        作用同delay1s.h,不理解的話可以再看一下上面的解釋。
        最后,將我們上面說的三個函數補充完整。
        在led_on()函數中,我們用到了51單片機的一些寄存器的定義,所以我們要包含reg52.h,而且我們用到了delay1s()函數,所以我們要包含delay1s.h,故led_on.c文件代碼如下:
        #include
        #include “delay1s.h” //注意這里沒有分號
        void led_on(void)
        {
        P0=0x00;
        delay1s();
        P0=0xff;
        delay1s();
        }
        Main函數的代碼形式如下:
        #include
        #include “delay1s.h”

        本文引用地址:http://www.104case.com/article/201611/321533.htm

        #include “led_on.h”
        void main()
        {
        led_on();
        delay1s();
        led_on();

        }
        在這個函數中,為了再次說明一下#ifndef……#define……#endif這個結構的定義,大家可以把所有的.h文件中的這個結構去掉,然后編譯一下看一下效果。
        到這里相信大家對于這種模塊化的寫法就有大概的了解了,如果我們想添加新功能的時候,比如我們要添加一個流水燈的功能,那么,我們只需要增加一個led_circle.c和led_circle.h,然后按照上述步驟添加進工程即可,程序的其他部分不需要任何改動。顯然這是很方便的。其實函數的聲明可以使用extern關鍵字,C語言中默認都是這個類型的,所以可以不用寫。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鄂伦春自治旗| 仁布县| 深泽县| 荣成市| 延吉市| 胶州市| 郯城县| 永昌县| 永新县| 莫力| 青浦区| 剑川县| 宽城| 土默特右旗| 大方县| 威远县| 高陵县| 高清| 巴里| 丰台区| 洪洞县| 长阳| 石阡县| 兰考县| 驻马店市| 南阳市| 呼伦贝尔市| 枣强县| 石阡县| 石城县| 湘西| 颍上县| 科技| 定南县| 广元市| 鄂温| 中阳县| 淳安县| 阳朔县| 朝阳区| 琼中|