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

相关推荐
abc light22 分钟前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
吠品10 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery114011 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
小李不想当小白14 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米14 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
尼喃16 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室16 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
智购科技自动售货机厂家17 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
Zwawa18 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
意法半导体STM3218 小时前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2