嵌入式架构设计问答合集

📖 精选 📅 2026-09-04
#来源/立芯星球 #类型/问答合集 #技术/架构

嵌入式架构设计问答合集

本合集重组自星球内 14 篇关于嵌入式架构的"为什么—是什么—怎么学—怎么用"短问答。原始提问帖保留作为来源层。

一、为什么需要架构

嵌入式里面为什么需要架构?

两个根本理由:1. 代码的复用价值;2. 人员分工与组织效率。
嵌入式里面为什么需要架构?(Jack)

架构究竟有什么用?

任何一个软件工程,距离彻底烂尾(无法维护)都只是时间问题。好的架构把很多人在代码组织上约束到一起,大大延缓工程烂尾的时间,同时提高开发效率、支持并行开发互不干扰。掌握架构设计原理后,去看 OS 源码或 HAL 源码就能理解它们为什么这样设计。
架构究竟有什么用呢? 你可以(Jack)

为什么要尽早接触架构设计知识?

越是高手,写代码越会在架构上达成共识;有了这些共识,再去理解高手写的东西(操作系统、中间件等)就手到擒来、事半功倍——因为底层设计原理你都懂。"就像学会英语,能走遍世界。"
为什么要尽早接触架构设计知识?(Jack)

架构和平台化是高级工程师与大企业的利益共同锚点

大企业靠平台化摊薄成本、保证多人协作质量;高级工程师靠架构能力获得议价权。这是双方利益的交汇点。
架构和平台化是高级工程师和大企业的利益共同锚点(Jack)

二、架构的本质与设计观

架构设计的路径:先规范、再简化

先把程序做规范(可能意味着复杂),再把程序做简单(通过各种优化)。设计过程中感到矛盾很正常——架构是综合流程、业务、技术经济性价比的综合设计。一句话:架构是各个要素最终在代码层面上的投影,而代码是这些投影的具体实现。
架构设计: 先把程序做规范,(Jack)

接口怎么定义?从系统需求倒推,不是从器件功能顺推

系统(app)需要什么接口,才去设置什么接口。比如系统需要温湿度,才有温湿度接口向下提供 wrapper 让下层挂载——不是器件有什么功能就搞什么接口。接口是为了把不同的开发人员统一到同一个开发目标上,不是为定义接口而定义接口。
架构里面如何定义接口的? 你(Jack)

产品公司与芯片原厂的架构目标差异

  • 产品公司:平台架构设计要保障 APP 和 Service 能尽可能切换平台(产品主体不变,平台在变)。
  • 芯片原厂:SDK 就是对芯片以外的软件做解耦——芯片不变,但可以切换 OS(RT-Thread/FreeRTOS)、切换中间件(fatfs/littlefs)。
    结论:架构都是为业务服务的,架构原理和设计准则是相通的。
    在产品公司: 平台架构设计需要(Jack)

解耦是架构设计的一部分,解耦点随电子电气架构迁移

解耦不是简单分三层(应用层/功能模块层/BSP)就完事。软件架构随电子电气架构(SMP、AMP、异构多核、存算一体)迁移变化,解耦点设置不同,解耦效率就不同
解耦是个很大的话题,它是架构设(CC / Jack)

三、怎么学架构

学架构的终点:不再有架构思维定式

学习架构最终学成的目标是:不再参考任何人的现有架构,而能结合具体问题自己去分层、解耦、抽象。到这个程度,看各种操作系统源码、协议源码都能得心应手——你知道这些抽象为什么这样做的,你和作者站在了同一个高度。
另外我要说的一点是,学习架构最终学成的目标(Jack)

需要学 23 种设计模式吗?

可以学,设计原则是通用的,但作用相对有限:设计模式遵循 6 大原则,基于对象、类、接口实现,对面向业务编程很有帮助;嵌入式用 C,面向过程/功能多一点,在组件、库、框架、协议开发中会用到设计模式。关键提醒:嵌入式资源相对紧缺,需要避免过度设计。
老师,嵌入式架构方面需要学23(Jack)

为什么看不懂大型工程?就三个原因

  1. 没有面向对象的思想与概念;
  2. 不懂分层原理与架构原理;
  3. 不了解一个项目的文件夹通用归类思路。
    对症补齐这三块,大型工程就能读进去。
    很多同学总是说看不懂大型工程和代码,其实就三个原因(Jack)

延伸资料

四、架构在项目中的实战用法

100 个 switch-case 怎么重构?

项目中出现上百个 switch-case 是典型的需要表驱动/函数指针/分层重构的信号(原帖以 5 张图演示改造过程)。
项目中100个switch c(Jack)

用互斥锁"穿透"耦合调用链的初始化保护

实际项目中会在调用队列函数前检查初始化标志位;检查时会尝试拿互斥锁——拿不到说明另一边正在初始化。通过互斥锁提权来耦合调用链(互斥锁穿透),保证初始化与调用不会竞争。
实际项目中会在调用队列函数前检查初始化标志位,检查时会尝试拿去互斥锁,如果拿不到(Jack)

来源笔记