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 也含有头文件,所以也要添加。

相关推荐
无事好时节16 小时前
51 单片机GPIO / 按键 / 中断 / 定时器 / PWM
单片机·嵌入式硬件
一枝小雨18 小时前
【OTA专题】17 打通Bootloader与App逻辑之间的通信
stm32·单片机·嵌入式·流程图·freertos·ota·bootloader
2401_8633186320 小时前
基于单片机的家庭防盗报警系统
单片机·嵌入式硬件
一枝小雨20 小时前
【OTA专题】18 OTA性能优化:优化bootloader存储空间与固件完整性校验(CRC)
stm32·单片机·性能优化·嵌入式·freertos·ota·bootloader
iYun在学C20 小时前
驱动程序(注册字符设备)
linux·嵌入式硬件
尼喃21 小时前
PW2605Z,专为系统安全护航的高可靠性负载开关
stm32·单片机·嵌入式硬件
阿昊真人21 小时前
stm32 按键中断
stm32·单片机·嵌入式硬件
恶魔泡泡糖21 小时前
51单片机矩阵按键
c语言·算法·矩阵·51单片机
代码游侠21 小时前
学习笔记——51单片机学习
笔记·stm32·单片机·嵌入式硬件·51单片机
松涛和鸣1 天前
DAY52 7-Segment Display/GPIO/Buttons/Interrupts/Timers/PWM
c语言·数据库·单片机·sqlite·html