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