一、在工程文件夹下创建一个新的文件夹,命名为“ModulesCodesFiles”,译为“模块化代码文件”,用于存放所有模块化代码文件。
二、在“ModulesCodesFiles”文件夹下为每个模块创建一个新的文件夹,命名为模块的名称,例如“Timer”或“ADC”。
1、在每个模块的文件夹下创建两个文件,一个.c源文件(例如:Timer.c)和一个.h头文件(例如:Timer.h)。
(1)、.c文件包含函数的定义及变量和宏的定义
(2)、.h文件包含函数的声明和变量的声明 (不允许赋初值)以及常量和I/0口的宏定义。
2、例如:在Timer模块的Timer.c文件中,可以编写以下代码:
1 // Timer.c
2 #include "Timer.h"
3 void Timer_Init()
4 {
5 // 初始化Timer模块的代码
6 }
7 void Timer_Start()
8 {
9 // 启动Timer模块的代码
10 }
11 void Timer_Stop()
12 {
13 // 停止Timer模块的代码
14 }
3、在Timer模块的Timer.h文件中,可以编写以下代码:
1 // Timer.h
2 #ifndef __TIMER_H__
3 #define __TIMER_H__
4 void Timer_Init();
5 void Timer_Start();
6 void Timer_Stop();
7 #endif
4、在主程序文件(例如:Main.c)中,使用预处理指令#include来包含每个模块的头文件,这样就可以在主程序中使用各个模块的功能。
例如,在Main.c文件中,可以编写以下代码:
// Main.c
#include "Main.h"
#include "ModulesCodesFiles/Timer/Timer.h"
#include "ModulesCodesFiles/ADC/ADC.h"
int Main(void)
{
// 初始化Timer模块和ADC模块的代码
Timer_Init();
ADC_Init();
// 主循环的代码,使用Timer和ADC模块的功能。
while (1)
{
// 使用Timer模块的代码
Timer_Start();
// 使用ADC模块的代码
ADC_Read();
// 停止Timer模块的代码
Timer_Stop();
}
return 0;
}
三、如何编写构建脚本(例如:MakeFile)来指定编译和链接的规则
1、在工程文件夹下创建一个名为“MakeFile”的文件,该文件是构建脚本的入口。
2、在MakeFile文件中,定义需要编译的源文件和目标文件,以及编译规则和选项。
1 # MakeFile
2 # 定义目标文件名
3 TARGET = Name_Program
4 # 定义需要编译的源文件和头文件
5 SRC = Main.c ModulesCodesFiles/Timer/Timer.c ModulesCodesFiles/ADC/ADC.c
6 INC = ModulesCodesFiles/Timer/Timer.h ModulesCodesFiles/ADC/ADC.h
7 # 定义编译规则和选项
8 CC = gcc
9 CFLAGS = -Wall -I.
10 # 定义目标文件的编译规则
11 $(TARGET): $(SRC) $(INC)
12 $(CC) $(CFLAGS) $(SRC) -o $(TARGET)
13 # 定义清理规则,用于删除生成的目标文件和其他临时文件
14 clean:rm -f $(TARGET)
3、在MakeFile文件中,使用规则来指定如何编译源文件和链接目标文件。例如:在MakeFile文件中,可以使用以下规则来指定如何编译源文件。
1 $(TARGET): $(SRC) $(INC)
2 $(CC) $(CFLAGS) $(SRC) -o $(TARGET)
解释以上:这个规则表示将所有的源文件(包括Main.c、ModulesCodesFiles/Timer/Timer.c和ModulesCodesFiles/ADC/ADC.c)编译并链接成一个名为“Name_Program”的可执行文件。
4、在Makefile文件中,可以使用其他规则来定义其他构建任务,例如“clean”任务,用于删除生成的目标文件和其他临时文件。
5、最后,在命令行中运行“make”命令来执行MakeFile文件中的构建任务。例如,在命令行中输入以下命令来执行构建任务。
1 make