关于 non-blocking-patterns
non-blocking-patterns 是一项技能,帮助嵌入式开发者设计响应及时、时序可测试的 C/C++ 主循环。它涵盖替换阻塞操作、定义超时安全行为,以及在目标开发板上验证性能。
主要功能
- 01用防回绕计时检查替代延时
- 02以显式状态机限定工作步骤
- 03非阻塞地消抖输入
- 04限定串口、网络和传感器等待
- 05定义看门狗与超时恢复行为
- 06验证目标板时序与截止期限
适用场景
- 01重构使用 delay() 的关键时序循环
- 02测试 millis() 回绕和错过截止期限
- 03测量无线或执行器负载下的抖动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ wedsamuel1230/ arduino-skills --skill non-blocking-patterns安装后在 Claude Code 中输入/non-blocking-patterns确认已加载。
详细介绍
非阻塞模式
保持主循环响应灵敏,并确保时序行为可测试。优先使用可针对具体开发板编译的 C/C++ 模式;仅在相关测试或日志分析工具中使用 Python。
信息收集
记录开发板/核心版本、任务周期、截止时间、最大工作时长、输入抖动、串口/网络行为、看门狗策略、中断约束,以及错过截止时间时的安全响应。
处理
- 列出每个周期性或事件驱动任务的周期、截止时间和最坏工作量。找出所有阻塞式库调用。
- 将长时间的
delay()调用替换为无符号且可安全处理回绕的经过时间检查,例如if (static_cast<unsigned long>(now - last) >= period)。只有在确认开发板和框架支持后,才使用硬件定时器或 RTOS 任务。 - 将多步骤工作建模为具有有限状态转换的显式状态机;不要在辅助函数中隐藏等待。
- 使用稳定状态计时器或事件过滤器消除输入抖动,不要使用阻塞式暂停。限制串口解析、网络重试和传感器转换等待的时长。
- 定义看门狗喂狗、输出禁止、超时和恢复行为。
- 在具有代表性的日志记录、无线电、存储和执行器负载下测量循环延迟和任务抖动。
避免自我辩解
| 走捷径的说法 | 应对 |
|---|---|
| “更短的延迟没问题。” | 它仍然会阻塞;说明截止时间并替换它。 |
| “通过 USB 时循环速度很快。” | 使用实际的无线电、存储和执行器负载进行测量。 |
| “用了枚举就是状态机。” | 必须有定时转换、明确的进入/退出行为和超时处理。 |
| “看门狗可以在任何地方喂。” | 明确责任归属和故障安全行为;不要掩盖卡住的任务。 |
“millis() 永远不会回绕。” | 使用无符号减法并测试回绕边界。 |
验证
- 时序关键路径中没有未设上限的阻塞调用;如有例外,必须说明原因并设置超时。
- 为消抖、回绕、超时和错过截止时间等情况编写了测试。
- 针对确切目标的编译证明与时序/串口证据相互独立。
- 当任务、传感器或通信路径超时时,输出会进入安全状态。
共享输出约定
使用共享 Arduino 技能约定:说明假设、所需工具和版本、实现步骤、各验证阶段的测试/证据、已知限制,以及恢复/安全注意事项。
评论
支持 Markdown