51单片机——多文件结构模板

1. 概述

在嵌入式开发中,仅包含一个 main.c 文件的工程通常称为"单文件结构"或单文件工程。这是最基础、最简化的项目组织形式,特别适合学习阶段或小型测试项目。

单文件结构是指将所有代码(包括主函数、外设控制、逻辑处理、宏定义、变量声明和延时函数等)集中编写在一个.c文件中,通常命名为main.c。

这种方式虽然简单直观,但一旦项目稍微复杂起来,就会陷入"代码越来越长、维护越来越难"的泥潭。

为了解决这个问题,我们通常采用 "多文件工程结构Multi-file Structure" 来组织代码,也称为模块化设计,多文件结构通过将各个功能模块的代码独立存放,形成清晰的工程目录层级,以提高代码的可读性、可维护性与可移植性。

2. 介绍

多文件结构是指将工程代码按功能或职责 进行划分,分别存放在多个 .c 源文件和 .h 头文件中,常见模块包括主函数、外设驱动、公共函数、类型定义等,并通过模块化接口进行调用。每个功能模块通常拥有自己独立的一对 .c/.h 文件,主函数只负责调用这些模块接口。

3. 创建多文件工程

以 II2C-EEPROM 为例,演示创建流程,并展示其实验源代码结构如下:

3.1 创建文件夹

创建一个文件夹(II2C-EEPROM),在该文件夹下创建四个子文件夹

① App:存放驱动外设文件,如 LED,数码管,定时器等

② Obj:存放编译产生的(c/汇编/链接)列表清单、调试信息、hex文件、预览信息、封装库等文件

③ Public:存放 51 单片机公共的文件,如延时、51头文件、变量类型重定义等

④ User:存放用户主函数文件夹,如 main.c

3.2 新建工程

如创建单文件项目步骤相同。

实现效果如下:

详细步骤如下:

3.3 分组管理

按照需要将工程文件分组并添加相应文件,最终效果如下:

这里将工程分为3组:User、App和Public。建议 "KEIL 中的工程组的命名(User、App、Public)" 与 "电脑硬盘上源文件中的文件夹名称" 保持一致,便于快速定位文件位置。

详细操作如下:

Obj 文件夹则无需在工程中显示,因为它仅包含编译器生成的中间文件和 .hex 可执行文件,分组后效果如下所示:

以文件形式存放对应功能的驱动程序时,会创建两个文件:

.c 源文件用于存放外设驱动程序(如按键检测函数)

.h 头文件则用于定义管脚、声明变量和函数等

以 key.c 为例,其对应的头文件是 key.h。key.c 源文件会首先调用与其对应的头文件 key.h,这样就能在源文件中直接使用头文件定义的内容

给每个组新建对应的 .c/.h 文件(User 文件夹只需 main.c 文件):

3.4 向工程添加文件

在 KEIL 中将新建的文件添加到之前新建的工程分组中,最终效果如下:

详细步骤如下:

其他文件夹按照上一步骤:

3.5 配置魔术卡选项

常见问题如编译后未生成HEX文件或编译报错找不到头文件,往往源于此处配置不当

**Output:**将输出文件夹定位到源文件目录 I2C-EEPROM 下的 Obj 文件夹。如需生成 hex 文件,请勾选 Create HEX File 选项。具体配置如下:

**Listing :**把输出文件夹也定位到我们实验目录下的Obj 文件夹。其它设置默认,配置如下:

**C51 :**将前面添加到工程组中的文件路径包括进来,否则程序中调用其他文件夹的头文件则会报错找不到头文件路径,具体步骤如下:

添加的头文件路径是指,在 I2C-EEPROM 实验文件夹下里面,哪些文件夹内含有.h 头文件,并且需要被调用到的,通常会把只要含有头文件的文件夹都选择进去。比如本例程中 App 内含有很多子文件夹,它们里面都含有头文件,因此要分别添加,Public 也含有头文件,所以也要添加。

相关推荐
恒锐丰小吕5 分钟前
屹晶微 EG2302 600V耐压、低压启动、带SD关断功能的高性价比半桥栅极驱动器技术解析
嵌入式硬件·硬件工程
Free丶Chan1 小时前
dsPIC系列-1:dsPIC33点灯 [I/O、RCC、定时器]
单片机·嵌入式硬件
v先v关v住v获v取2 小时前
塔式立体车库5张cad+设计说明书+三维图
科技·单片机·51单片机
恒锐丰小吕3 小时前
屹晶微 EG2106D 600V耐压、半桥MOS/IGBT驱动芯片技术解析
嵌入式硬件·硬件工程
Ghost Face...3 小时前
U-Boot与PMON:配置与设备树解析对比
linux·单片机·嵌入式硬件
冲,干,闯4 小时前
操作MCU内存
单片机·嵌入式硬件
猫猫的小茶馆4 小时前
【ARM】从零封装STM32标准库
汇编·arm开发·stm32·单片机·嵌入式硬件·架构
ACP广源盛139246256734 小时前
GSV6701A@ACP#6701A产品规格详解及产品应用分享
网络·嵌入式硬件·音视频
国科安芯4 小时前
商业卫星光电载荷控制系统中MCU抗辐照性能评估方法研究
单片机·嵌入式硬件·数码相机·性能优化·架构·risc-v