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.軟體配色問題(該章節只是個人潔癖愛好,可省略)
程式軟體個人從網上找到的配色方案,個人感覺以下幾種配色比較好。
本文原址:微信公眾號:奇趣電子