嵌入式项目骨架

← 返回嵌入式工程架构


新项目启动时 clone 即用的目录模板,编码了从需求到量产的全流程。

github链接

参考文章

🔴目录结构

project/
├── 00_Project_Management/       # 项目管理(流程、质量、合规)
│   ├── 00_需求导入_QFD/          # QFD:客户声音 → 工程指标
│   ├── 01_需求约束_Pugh/         # Pugh矩阵:多方案对比选型
│   ├── 02_需求转化_Basic_Statics/ # 需求 → 可量化技术参数
│   ├── 03_功能图谱_Function_Map/  # 流程节点 → 跳转到 01_Function_Map
│   ├── 04_功能风险管控_DFMEA/     # 设计失效模式与影响分析
│   ├── 04_法规认证_国内_国外/     # CCC/FCC/CE 等认证
│   ├── 04_知识产权_国内国外/      # 专利/软著
│   ├── 05_敏捷开发_Scrum/         # Sprint 迭代
│   ├── 06_持续集成与测试_DevOps/  # CI/CD、自动化测试
│   ├── 07_产品生产管理_Six_Sigma/ # 量产质量管理
│   └── 08_缺陷管理追踪_Jira/      # 缺陷追踪
├── 00_Reference/                # 参考资料(手册、标准、竞品)
├── 01_Function_Map/             # 功能列表——先定"做什么",再分发
├── 02_Hardware/                 # 硬件(原理图、PCB、BOM)
├── 03_Firmware/                 # 固件(直接跟硬件打交道的底层代码)
├── 04_Software/                 # 上位机 / 算法 / 工具软件
├── 05_Mechanical/               # 机械结构
├── 06_FCT/                      # 产线自检工具链
├── 07_Tools/                    # 项目辅助脚本
└── readme.md                    # 工作流箭头链(路线图,不是简介)

🔴敏捷开发和瀑布开发的区别是什么?各自的优势?

维度敏捷瀑布
交付节奏短周期迭代(1-4 周一个 sprint)一次性最终交付
需求变更拥抱变化,随时调整优先级冻结需求,变更走 CR 流程成本高
文档够用就好,重可工作软件完备文档驱动,每个阶段有交付件
客户参与持续参与,每个迭代给反馈主要在需求阶段和验收阶段出现
测试介入贯穿始终(TDD、持续集成)开发完成后才进入测试阶段
团队结构自组织、跨职能小团队角色分明,按阶段交接

敏捷适合:

  • 需求不确定、市场变化快的产品(互联网、SaaS)
  • 需要快速验证假设的创业场景
  • 团队与客户能紧密协作

瀑布适合:

  • 需求固定、合规要求高的项目(航天、医疗设备、政府招标)
  • 硬件耦合紧密、中途改动代价极大的系统
  • 团队分散、客户无法持续参与

两者的本质取舍:敏捷用流程灵活性换适应性,瀑布用前期规划换可预测性。

🔴02_需求转化

在需求转化为功能时,首先需要明确需求的关键细节,然后逐步将其分解为具体的功能模块和实现方式。以”我的产品需要保存一周的运行数据”为例,转化的过程可以按照以下步骤进行:

1.需求分析

需求明确:产品需要保存一周的运行数据。 关键问题:数据量:每秒/分钟/小时产生多少数据? 数据保存频率:是实时保存还是定时采样? 存储介质:是使用外部存储(如SD卡、EEPROM、Flash)还是内部存储(如微控制器的RAM/Flash)? 保存格式:数据的存储格式是什么(如CSV、二进制、JSON等)? 数据读取:数据是只写入,还是需要定期读取、备份?

功能分解

根据以上需求,可以将其分解为以下功能: 数据采集功能: 定义哪些数据需要被保存(例如传感器数据、设备状态、运行日志等)。 确定数据采集的频率,例如每秒钟采集一次温度数据。 存储管理功能: 数据的存储介质和方法选择:决定将数据存储在外部Flash、EEPROM,或者用环形缓存管理。 实现数据的读写接口:实现对存储设备的读取、写入操作,考虑断电后的数据保护。 确保存储空间足够保存一周的数据。如果内存空间不足,可以采用覆盖式存储(即环形缓冲区)来管理数据。 数据压缩与优化: 如果数据量大,可能需要考虑对数据进行压缩以节省存储空间。 数据回放与导出功能: 为了确保数据能够在需要时被读取或导出,可能需要提供一个接口,通过USB、蓝牙等方式将数据导出到其他设备进行分析。 数据清理功能: 每周或当存储达到一定阈值时清除过期数据,保持最新的一周数据。

技术实现

在需求转化为功能后,还需要考虑具体的技术实现细节和路径: 选择合适的存储方案: 使用外部Flash存储器,如W25Q系列,或者内部Flash(如果设备支持)。 定时写入操作:每小时或每分钟写入一次,避免频繁写操作导致存储器寿命缩短。 数据结构设计: 设计一个合理的结构来存储数据,例如使用时间戳和数据值的键值对来存储。 异常处理和数据保护: 考虑到断电或意外关机的情况,确保数据不会丢失,使用文件系统(如FatFS)或者简单的日志记录机制来保护数据。

最终:

如果你需要保存温度数据,你的需求转化为具体功能的过程可能是: 每秒读取一次温度传感器数据,记录到内部缓存; 每秒读取一次温度传感器数据,记录到内部缓存; 每小时将缓存中的数据打包并写入外部Flash存储器; 使用时间戳来标记每一条数据; 设置一个环形缓存,确保当一周的数据达到存储上限时,覆盖最旧的数据。

这样,通过对需求的逐层分解和分析,便能够将”保存一周的运行数据”转化为可以执行的具体功能,然后有了具体功能,再去思考具体的实现路径和技术方案。

🔴03_firmware

与software和hardware相区分,固件(Firmware)就是写入EROM或EPROM(可编程只读存储器)中的程序,通俗的理解就是”固化的软件”。

比如我们编写的mcu代码,它就是通过烧录器固化在集成电路内部的程序代码,负责控制和协调集成电路的功能。所以可以理解为我们编写的,直接跟硬件打交道的底层代码,都是固件

而software一般用来存放上位机程序,算法之类