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 可以增强代码的可移植性,也更 容易阅读。