用途
Non-Blocking Patterns 是一个面向 Arduino 与嵌入式 C++ 工程的技能,目标是在不阻塞主循环的前提下组织时序逻辑,使代码保持响应,并让计时行为可被测试与验证。它适用于使用 delay()、需要按键去抖、周期任务、协作式调度、看门狗安全计时、状态机等场景。技能强调优先使用可针对具体板卡编译的 C/C++ 模式,Python 仅用于相关测试或日志分析工具。
主要能力
- 将长 delay() 调用替换为无符号回绕安全的 elapsed 检查,例如 if (static_cast<unsigned long>(now - last) >= period)。
- 在确认板卡与框架支持的前提下,使用硬件定时器或 RTOS 任务。
- 将多步工作建模为显式状态机,要求有界转换,不把等待隐藏在辅助函数中。
- 使用稳定状态计时器或事件过滤器进行输入去抖,而非阻塞式暂停。
- 对串口解析、网络重试与传感器转换等待进行有界限制。
- 定义看门狗喂狗、输出禁止、超时与恢复行为。
- 在代表性日志、无线、存储与执行器负载下测量循环延迟与任务抖动。
使用方式
技能流程从 Intake 开始:记录板卡/核心版本、任务周期、截止时间、最大工作时长、输入抖动、串口/网络行为、看门狗策略、中断约束,以及错过截止时间时的安全响应。随后进入 Process:列出每个周期或事件驱动任务及其周期、截止时间与最坏情况工作量,识别任何阻塞式库调用,再按上述模式替换与建模。技能还提供反合理化清单,例如“更短的 delay 也可以”仍属阻塞,需给出截止时间并替换;“USB 上循环很快”需在实际无线、存储与执行器负载下测量;“枚举就是状态机”需具备定时转换、显式进入/退出与超时行为;“看门狗可以到处喂”需定义归属与失效安全行为,不得掩盖卡死任务;“millis() 永不回绕”需使用无符号减法并测试回绕边界。
适用场景
适用于 Arduino 或嵌入式 C++ 项目中需要保持主循环响应、处理按键去抖、实现周期任务与协作式调度、构建看门狗安全计时、编写状态机,以及需要让时序行为可测试的场合。
限制
资料未提供具体支持的板卡型号、框架版本、安装命令或代码示例。使用硬件定时器或 RTOS 任务前需确认板卡与框架支持。验证要求包括:时间关键路径中不得残留无界阻塞调用(除非有文档化理由与超时);去抖、回绕、超时与错过截止时间等情形需有测试;目标板编译证明与计时/串口证据需分开;任务、传感器或通信路径超时时输出应进入安全状态。共享输出契约要求说明假设、所需工具与版本、实现步骤、按证明阶段划分的测试/证据、已知限制以及恢复/安全说明。