1.工业级嵌入式工程结构(推荐方案)
你可以按照这个逻辑在 Core 文件夹下(或与其平级)构建你的目录:
|
|
2. 各层级的功能分配(职责表)
| 层级 | 职责 (Role) | 就像公司的… | 编写注意事项 |
|---|---|---|---|
| App (应用层) | 负责“怎么做”。比如:按下按键后先闪灯再保存。 | 总经理 | 不直接操作引脚,只调用 BSP 提供的函数。 |
| BSP (驱动层) | 负责“跟谁做”。专门针对你的电路板硬件。 | 部门主管 | 把底层的 HAL 函数包装成有意义的名字(如 Relay_On)。 |
| Tools (工具层) | 负责“怎么算”。纯数学运算。 | 技术顾问 | 不包含任何硬件头文件。它是纯 C 代码,可以轻松移植到任何单片机。 |
| Core (系统层) | 负责“活下来”。硬件初始化、中断入口。 | 地基/物业 | 尽量不要在这里写逻辑,保持 CubeMX 生成的样貌。 |
3. 避坑指南:为什么这么分?
- 为什么要分 App 和 BSP?
- 场景:如果你以后把压力传感器从 ADC 接口换成了 I2C 接口。
- 好处:你只需要修改
BSP/sensor.c,而你的App/logic.c(标定逻辑)一行代码都不用改。
- 为什么要分 Tools?
- 场景:你以后做一个温控器项目。
- 好处:你直接把
filter.c和pid.c拷贝过去就能用,不用担心里面混杂了 CEMS 的硬件定义。
4. 改名与重构的注意事项清单
当你按照这个结构建立文件夹时,请务必检查这三点:
- Include Paths:每一个子文件夹(App, BSP, Tools)都必须手动添加到编译器设置的
Include Paths中。 - Source Location:确保父文件夹(User_Library)被添加到了
Source Location,这样里面的子文件夹里的.c都会被自动编译。 - 头文件保护:每个
.h文件必须写#ifndef __XXXX_H,防止重复包含。