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