1. 程式人生 > >IAR工程建立

IAR工程建立


  • @1.   IAR標頭檔案新增:#include"ioavr.h"標頭檔案

                 因為該檔案包含所有微控制器的標頭檔案。


  • @2.  如何對一個大專案進行模組化程式設計

 

1).一個模組設立一個.c和.h檔案,標頭檔案.h是對於該模組介面的宣告,用於其他模組引用.c中的函式,只有在.h中聲明瞭其他外部模組才可以引用。

//==定義或外部引用=============================================================================

#ifdef   DEFINE_COLLECT

//此時EXTERN_COLLECT被設定成空

#define  EXTERN_COLLECT 

#else

//此時EXTERN_COLLECT被設定成extern

#define  EXTERN_COLLECT  extern    

#endif

//================================================================================================

//=====舉例=======================================================================================

EXTERN_COLLECT COLLECT_CTR   Collect;

EXTERN_COLLECT  void ADSampling(void);

*當編譯器處理本模組.c檔案時,變成:

COLLECT_CTR  Collect;                   

voidADSampling(void);

編譯器會把這些全域性變數分配到記憶體中。

*當編譯器處理其他.c檔案時,變成:

extern  COLLECT_CTR   Collect;

extern  voidADSampling(void);

這時編譯器不分配記憶體,任何.c檔案都可以使用這些變數,而且不分配記憶體

 2)防止自己在本模組.C程式中重複定義        

        #ifndef     _FILTER_H_

        #define     _FILTER_H_

        標頭檔案內容

            ......

       #endif

*程式在編譯標頭檔案時會判斷有沒有定義filter.h檔案,第二次判斷時則filter.h已經定義,不會編譯內容部分。

3).IAR軟體宣告的全域性變數

//在 2)中解釋

#ifndef    _COLLECT_H_            

#define   _COLLECT_H_

//====巨集定義=============================================================================

// 此處雖然每個.c檔案都含,但是巨集定義不分配記憶體

#define    WEI_DW_CODE 150000                                                          

typedef struct 

{

    BYTE Flag;  // 過程標誌

    。。。。。。

}COLLECT_CTR;      //定義結構型別不佔記憶體的  。(重點)   

 

//===定義或外部引用====================================================================================

#ifdef DEFINE_COLLECT 

#define   EXTERN_COLLECT

#else

#define   EXTERN_COLLECT extern

#endif

//===================================================================================================

EXTERN_COLLECT COLLECT_CTR collect;//結構體或變數

EXTERN_COLLECT   void  Delay();//函式的外部宣告 

*對應的.C必然會宣告#define DEFINE_COLLECT這樣結構體就會變成COLLECT_CTR collect;這是定義了結構體變數,就會分配記憶體,而函式就會變成void  Delay();因為標頭檔案對應的.C檔案必然會有:

#define DEFINE_COLLECT

#including"......"

所以函式就變成了頭部宣告。

而其它.C檔案:

#define  DEFINE_其它型別 

#including"......"

故結構體和變數以及函式都會加上extern,不分配記憶體。

*:這裡問了公司同事,其它標頭檔案呼叫.h檔案時,函式宣告時因為函式有指標,會指到函式對應的.c檔案中。全域性變數定義到.h檔案中

#外延拓展

 

預編譯包含:條件編譯,檔案包含,巨集定義

編譯階段:就是把對應的標頭檔案載入到對應的.C檔案中。

//===================================================================================================

@3.永遠不要在.h中定義變數(變數定義和宣告是不同的)

變數定義和變數宣告的區別,變數定義使用“資料型別+變數名稱”的形式,編譯器需要給他分配記憶體單元的;而變數宣告使用“extern 變數型別+變數名稱”的形式,是告訴編譯器我這個變數將在其他外部c檔案中定義,我這裡只是在外部用它。編譯器就不給他分配記憶體空間,而等到真正遇到變數定義的時候再給他分配記憶體空間。

 

@4.軟體配色問題(該章節只是個人潔癖愛好,可省略)

程式軟體個人從網上找到的配色方案,個人感覺以下幾種配色比較好。

 

 

本文原址:微信公眾號:奇趣電子