【每日一学 20260909】敏捷之道——基于嵌入式开发的敏捷实践思考

2026-09-09 09:23:00
蓉蓉
原创
8

如果打开我们的视角,我们有很多手段来提高嵌入式开发的敏捷性,下面我们就一起探讨下可能的路径。

1.硬件多版本迭代(Iteration of HW Version)

就像盖房子要先打地基、搭框架,任何产品开发过程都要遵守必要的逻辑顺序和规律,我们不能越过任何一个必经的阶段,但也不代表我们不能加速产品交付表现。在不违反内在逻辑的基础上,我们可以通过安排交叉加速硬件迭代交付。


在“智慧大脑”项目中,我们没有理想的假设:产品可以一经上市大获成功,而是采用了多版本迭代的策略,来验证假设和打造更具备产品力的产品。
(1)规划长期大版本:量产硬件系统开发被划分为A、B、C三个主要版本,每个版本针对特定的开发阶段和目标。
(2)细分短期小版本:每个大版本又被进一步细分为若干小版本,如A1、A2等,每个小版本聚焦于特定的改进或功能增强。

(3)重叠交叉迭代:通过多个版本之间的重叠交叉方式,我们能够持续验证设计假设,及时调整方向,并从每次迭代中学习和提升。


通过这种多版本迭代的方法,我们不仅加速了硬件产品的开发过程,还确保了每个版本的稳步提升和优化,有效地验证和完善最终产品设计。在这种策略帮助下,我们的“智慧大脑”产品在面市时,具备更强的产品力和市场竞争力。

2.模块化设计(Modular Architecture)

在软件行业,产品需求的不断演进与功能的累加往往导致系统的复杂性不断增加。这通常是因为产品经理在追求满足业务需求的过程中,忽略架构的重构,导致随着功能的增多,系统的耦合性逐渐增强。其结果就是,随着系统复杂性的提升,开发和维护难度也成指数级增长。此外,团队成员的变动也增加了后期对架构进行重构的难度和风险。

因此,现代软件开发领域越来越倾向于采用低耦合、模块化的设计方案。这种设计方法的一个典型代表是微服务架构,它推崇的几个关键原则。
(1)团队独立性:允许团队独立工作,便于扩展和管理,每个团队负责特定的服务或模块。
(2)聚焦小型服务:每个微服务都集中于一个具体的业务功能,使系统整体复杂性降低。
(3)服务内部的独立性:每个服务都可以在不影响其他服务的情况下进行内部更改或替换,增加了系统的灵活性和可维护性。

一个体现模块化设计理念的例子是Joe Justice(乔·贾斯蒂斯,敏捷产品开发宣言的合著者之一)参加的X-Prize竞赛,他设计的基于模块化理念的车辆,代号Wikispeed。其中每个模块都可以独立演进,且具有简单的接口设计,使得整车可以快速适应比赛要求的变化,并最终在众多竞争者中脱颖而出。Wikispeed车辆的成功充分证明了模块化设计在应对快速变化和复杂需求方面的有效性。


在“智慧大脑”项目中,项目组也是采用的模块化设计理念,显著提高了整个硬件平台的开发效率和灵活性。整个系统被划分为三个主要模块:基板(Base Board)、自动驾驶板(AD Board)和智能座舱板(Cockpit Board)。这种划分方法允许每个模块专注于其特定的功能领域,从而提高整体系统的性能和可维护性。


(1)基板(Base Board):类似于PC机的主板,是“智慧大脑”系统的基础,主要负责提供基本的平台功能和对外接口。它是整个硬件系统的核心,支持其他两个模块的运作。
(2)自动驾驶板(AD Board):专注于自动驾驶相关功能,如变道辅助、自动泊车、自适应巡航和交通标志识别等,主要用于提升驾驶安全和便利性至关重要。
(3)智能座舱板(Cockpit Board):负责智能车机系统、人车交互、智能感知系统以及提供舒适性和娱乐功能,主要用于提升了乘坐体验。

在Wikispeed的案例中,Joe在设计这些模块之前,首先定义了它们之间的接口,确保模块间可以高效协作而不会相互干扰。例如,在处理悬挂系统时,他首先明确了其需要支持的外部参数和边界条件,然后确定悬挂系统需要支持的最大力量(8个G)。这种方法使得任何符合这些条件的悬挂系统都可以无缝集成到车辆中,同时不影响现有设计。这就是和模块化设计相辅相成的契约化接口设计。

3.契约化接口设计(Contract First Design)

契约化接口设计在诸如汽车、航天或消费电子产品中的应用由来已久,比如个人电脑的DIY文化,就是因为早期电脑设计者和制造商充分考虑并实现组件间的标准化。这不仅促进了硬件的互操作性,也为爱好者和专业人士提供了组装和定制个人电脑的可能性。

作为一位热爱电脑DIY的80后,我在大学期间就为自己配置了第一台电脑。首先从选择合适的主板开始,因为它是连接其他所有组件的基础,考虑主板支持的CPU插槽类型、内存类型(如DDR4)、扩展插槽(如PCI Express),以及存储接口(如SATA)。然后在选择CPU、内存、显卡、硬盘时保证其接口与主板一致,组件频率和主板支持的最大频率匹配即可。配置上主机箱,电源散热等,基本点亮系统没有任何问题。


契约化接口设计(Design by Contract,DbC)在软件行业并不是新鲜事物。在软件工程中,已成为一种改善质量的关键策略。它的核心在于为软件组件定义明确、精确且可验证的接口契约。这种方法的优势包括:
(1)松耦合应用程序:通过减少组件间的依赖,提升了系统的灵活性和可维护性。
(2)服务间的互操作性:确保不同服务能够轻松集成和协作,扩展了系统的功能和兼容性。
(3)稳定的协作协议:接口契约为不同开发团队之间的协作提供了一致的规则和标准。
(4)抽象化实现细节:通过隐藏底层逻辑,提高了系统的安全性和模块化程度。

在“智慧大脑”项目的硬件产品设计阶段,我们采用了契约化接口设计,巧妙地实现了不同模块间的关注点分离。它允许各个模块由不同的敏捷开发团队独立且并行地设计和开发,大大提高了开发效率和灵活性。例如,在我们的控制器连接器面板上,我们对数据、电源、视频、喇叭等关键单元进行了标准化接口规划。确保了各个模块之间的无缝整合和高效协作。这种接口设计策略不仅保障了硬件的性能,也为未来的升级和维护提供了便利。

在进行接口规划时,一个关键的原则是预见未来的系统需求并在设计中提前考虑。这意味着我们设计的接口能力,应远超当前的需求。接口的设计容量至少是当前需求的十倍,以应对未来可能的增长和变化。这样的冗余规划确保了系统的稳定性和可扩展性,避免了因未来需求增长而频繁修改接口所带来的风险和成本,保障了系统长期的稳定运行和易于维护的特性。

4.模拟技术(Simulation)

模拟技术(也称为仿真技术)是一种通过利用计算机系统模拟真实世界环境和过程的技术。随着计算机科学的发展,模拟技术已经成为继数学推理和科学实验之后,探索和理解自然界客观规律的第三大方法。

模拟技术在嵌入式开发中的优势主要体现在:
(1)加速学习与降低成本:模拟技术允许我们在低成本、无风险的环境中快速学习和测试。就像模拟考试帮助学生识别弱点并提升表现一样,模拟技术在硬件设计中提供了一种类似的“试错”平台,让工程师们在实际制造之前检测并优化设计。
(2)早期问题发现与解决:通过模拟工具,设计团队可以在项目早期阶段发现潜在问题,从而避免在后期或实际生产中昂贵的修改。
(3)提高设计准确性和成功率:模拟技术提供的翔实反馈帮助设计师持续优化他们的工作,大幅提高最终产品的成功率和性能。

我们的设计团队通过使用HyperLynx SI仿真工具分析和验证高速信号问题。这种仿真工具使得工程师能够在整个设计流程中,从早期系统设计到PCB设计完成后的验证,进行全面的分析,成本更低,效率更高。
HyperLynx不仅局限于信号完整性分析,还可扩展到电源完整性、热仿真和电磁兼容性等多个方面,为复杂电子系统的设计提供全面的仿真支持。

5.版本控制工具

版本控制工具如Git早已成为软件开发行业的核心,它极大地提升了大规模团队间的协作效率。然而,在PCB设计领域,这些配置管理工具的应用受到了限制,嵌入式软件和硬件设计往往像是在两个平行的空间独立进行。

理想的设计开发平台应该促进硬件设计师与嵌入式软件开发者在同一空间紧密协作,这种集成化的方法能够确保设计的连贯性和一致性,尤其涉及复杂系统时。利用集成版本控制工具不仅可以跟踪软件的更改,还能管理硬件设计的迭代。这样,团队可以在必要时,快速回滚到早期版本,从而支持更加灵活和敏捷的项目规划。

因为在硬件项目通常涉及复杂的供应链管理,包括组件的采购和制造,这些环节往往增加了项目的不确定性和风险。例如,在2021至2022年期间,汽车行业经历了严重的芯片短缺,导致多款车型停产。这种外部因素的不确定性要求团队在硬件和软件设计中,可以根据供应链实时情况及时调整,硬件平台的任何调整都需要迅速和软件设计的变更集成在一起。版本控制工具在这个时候扮演着至关重要的角色,减少人为失误和时间损耗。

Git虽然主要用于软件代码的版本控制,但它分布式特点特别适用于分布式团队和需要频繁合并更改的项目。Altium Designer是一款专门的PCB设计软件,它提供了版本控制功能,支持设计文件的版本追踪,使得团队可以管理设计的历史版本。在实际应用中,我们也尝试将Git和Altium Designer做一些链接:将Altium Designer用于具体的PCB设计工作,而使用Git来管理设计文件以及其他项目文件(如需求文档、测试计划等),并建立映射追踪关系,便于管理。

6.基于EVB开发板学习

EVB(Evaluation Board)在嵌入式系统开发的早期阶段扮演着关键角色,尤其是当开发人员对特定芯片的了解有限时。这些开发板是为嵌入式系统开发专门设计的,集成了包括CPU、存储器、输入/输出设备、数据通路/总线以及外部资源接口在内的一系列关键硬件组件。EVB提供了一个即刻可用的开发环境,加速从概念到原型的过程,极大减少从零开始设计硬件的时间和成本。

研发团队在使用EVB时,其关键优势和应用主要体现在:
(1)快速原型开发:通过使用EVB,开发者可以快速搭建和测试原型,而无需从零开始构建复杂的硬件环境。比如“智慧大脑”团队曾规划搭载Snapdragon 8155芯片的平台,开发者通过EVB迅速搭建一个基于该芯片的原型系统。这对于汽车娱乐系统(Cockpit)或高级驾驶辅助系统(ADAS)的开发者尤其重要,因为8155芯片针对这些应用有特定的优化。
(2)学习和实验、测试平台:对于初学者和经验不足的开发人员而言,EVB提供了一个理想的学习平台。它们可以通过实际操作EVB来深入了解嵌入式系统的工作原理和设计挑战。EVB还可用于测试特定应用场景,允许开发者在投入大规模生产前验证设计的可行性和性能。

在嵌入式系统开发中,深入理解敏捷开发的精髓至关重要。我们需要将敏捷原则与硬件开发特有的复杂性相结合,采用创新方法来促进快速迭代和适应性强的开发过程。通过在硬件和软件设计中实现敏捷与专业知识的深度融合,这可以激发新的最佳实践,从而有效提升开发效率和产品质量。这种跨学科的合作不仅加速了产品从概念到实现的过程,也为敏捷开发理念在嵌入式领域的应用开拓了新的路径。


来源:《敏捷之道》——基于嵌入式开发的敏捷实践思考--文/杨晨


发表评论
通过审核后显示您的意见