2.3.2 擴(kuò)充我們的工程
有了這個(gè)模板之后,我們就像有了一個(gè)空房子,我們現(xiàn)在還需要給它添加 代碼和文件,裝修它。
眾所周知,在 C 語(yǔ)言當(dāng)中,main 函數(shù), 又稱主函數(shù), 是程序執(zhí)行的起點(diǎn)。我 們將程序燒寫到單片機(jī)中,單片機(jī)也會(huì)從 main.c(在官方代碼中,我們把它改名 為 SmartCar.c 了,就是項(xiàng)目中含有 main 函數(shù)的 c 程序文件) 開始執(zhí)行,一條 接一條語(yǔ)句。
但是需要注意的是,我們希望單片機(jī)上電以后一直工作下去,永不停止,所 以 main 函數(shù)中必須有一個(gè)死循環(huán) while(1),否則就會(huì)報(bào)錯(cuò)。
保證 main.c 文件的簡(jiǎn)潔可以有效提高代碼的可讀性:我們可以把各個(gè)需要 實(shí)現(xiàn)的功能封裝成函數(shù),然后必要時(shí)在 main 函數(shù)中調(diào)用,這樣讀起代碼來(lái)就 會(huì)很直觀;只需要執(zhí)行一次的代碼寫在死循環(huán)外,需要不斷執(zhí)行的代碼寫在死 循環(huán)內(nèi)。
功能函數(shù)的代碼建議大家按模塊分類,比如電機(jī)部分的代碼就寫在 motor.h 和 motor.c 兩個(gè)文件中。其中,.h 文件存放外部函數(shù)聲明,.c 文件中對(duì)應(yīng)就是 這些已經(jīng)聲明的函數(shù)的具體實(shí)現(xiàn)。如果需要使用這個(gè)模塊中的功能函數(shù),添上 一句 #include ”motor.h” 就可以了。
這里有幾個(gè)注意事項(xiàng)非常重要:第一個(gè)就是為了讓頭文件不重復(fù)包含、編 譯不報(bào)錯(cuò),我們需要在頭文件中添加預(yù)編譯指令(在《5-3 硬件調(diào)試方法》的編 譯 BUG 部分中有具體介紹);第二個(gè)就是.h 和.c 中的函數(shù)名、函數(shù)返回類型必 須一一對(duì)應(yīng),否則就會(huì)報(bào)錯(cuò)。
如果有一個(gè)變量所有的程序文件都要使用怎么辦?這時(shí)候我們就要把它定 義為全局變量,比如”extern int i;”,聲明后需要在主函數(shù)中對(duì)它進(jìn)行初始化才 能使用,比如”int i=0;”。另外,用好 #define 可以增強(qiáng)代碼的可移植性,也更 容易閱讀。