亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 嵌入式

在嵌入式C中用测试驱动开发构建状态机

状态机是许多嵌入式系统基石,却开发复杂。本文概述用测试驱动开发(TDD)构建状态机(SM)软件的验证策略,聚焦适合资源受限环境的C实现。

核心上,SM模型包含状态、迁移、动作。状态代表条件,迁移定义从一状态到另一状态路径——通常由事件触发,动作捕获进入、退出、迁移期间执行的行为。

UML状态机中,动作可附着于状态进入/退出、迁移本身、内部反应。所有状态机形式假设运行至完成(RTC)执行模型:每个事件完全处理——含退出动作、迁移动作、进入动作——后才处理下一事件。

深入TDD策略前,须理解TDD为何重要。TDD是增量开发法,强制在任何生产代码前写失败单元测试。测试小、自动化、作为期望行为规格。TDD循环——源自James Grenning《嵌入式C测试驱动开发》——含:

考虑图1 SM图。始于StateA,收Alpha事件迁移至StateB,按序执行xStateA()、effect()、nStateB()。如何验证此行为正确?

在嵌入式C中用测试驱动开发构建状态机
图1. 基础状态机(来源:VortexMakes)

最直接测试法涉及验证SM迁移表。这为每状态创建一个测试用例,用相关事件刺激SM,断言结果状态和执行动作。复杂动作值得专用测试。(见"使用单元测试测试状态机"文章深度讨论。)

每测试遵循四阶段xUnit模式:

此策略适合简单SM,但更复杂行为——如效果仅在数步后可观测的迁移链——需功能场景测试。而非孤立状态检查,测试完整序列以行使必要状态、事件、动作。

图2说明此法,用DoWhile SM模拟传统do-while循环。机器用x = 0和output = 0初始化默认值,用x++或x = (x > 0) ? x-: x设置循环计数器,用i++迭代直到守卫i == x失败,随后输出output = i。

在嵌入式C中用测试驱动开发构建状态机
图2. DoWhile状态机(来源:VortexMakes)

编码前,我们从规格派生测试清单。DoWhile初始清单含:

我们用Ceedling作构建系统、Unity作C代码轻量测试框架。SM定义于DoWhile.h和DoWhile.c,测试套件驻test_DoWhile.c。下文简略摘录演示"单次迭代"测试用例。

在嵌入式C中用测试驱动开发构建状态机
代码清单1:单次迭代测试(来源:VortexMakes)

测试初始化SM,设迭代计数零,分发Up事件增量它,触发Start事件,最后发Alpha执行单次循环迭代。断言验证out属性等于迭代次数且SM保持在StateC。

同测试扩展演示多次迭代(见代码清单2)。单独测试(清单3)确认无先前Up事件直接收Alpha时SM执行零迭代。

在嵌入式C中用测试驱动开发构建状态机
代码清单2:多次迭代测试(来源:VortexMakes)

在嵌入式C中用测试驱动开发构建状态机
代码清单3:非迭代测试(来源:VortexMakes)

实现细节非本文重点,但DoWhile.c和DoWhile.h摘录展示整洁switch-case状态处理法。

在嵌入式C中用测试驱动开发构建状态机
代码清单4:DoWhile实现片段(来源:VortexMakes)

在嵌入式C中用测试驱动开发构建状态机
代码清单5:DoWhile规格片段(来源:VortexMakes)

总之,TDD为状态机开发提供两互补策略:(1)逐状态迁移测试,(2)覆盖多状态动作的功能场景测试。这些方法语言无关、工具无关,特别适合状态逻辑主导的嵌入式系统。

因C仍是嵌入式软件通用语,搭配Ceedling和Unity产出强健TDD工作流。采用这些实践导出比常规方法更灵活、可维护、可复用的软件。

所有代码和模型可在GitHub仓库https://github.com/leanfrancucci/sm-tdd.git获取。


嵌入式

  1. 增强CNC可靠性:现代铣削工具提供速度、精度和更低成本
  2. 2021制造业趋势:Make UK洞察(第二部分)
  3. Boy Machines:以尖端技术重塑小规模生产
  4. AI驱动测试自动化:重塑现代ERP系统质量保障新范式
  5. 加速项目落地:战略性外包助力初创企业破解资源瓶颈
  6. 常见CNC机床问题与专家级解决方案
  7. 立式铣床大师课:优势、操作与超越卧式的理由
  8. 避坑指南:购买二手CNC机床常见五大隐患及应对策略
  9. 探索无限可能:CNC 机床能制造什么?
  10. 使用协作机器人自动化CNC机床上下料:提升效率与精度
  11. 以冈本精密磨床实现完美表面光洁度
  12. Okuma 机床升级方案:USB 与以太网替代软驱,Shop Floor Automations 推出 Okuma Floppy Connect