关于 non-blocking-patterns
面向嵌入式 C/C++ 开发的技能,帮助保持主循环响应并让时序可测试。内容涵盖替换阻塞操作、处理超时与看门狗,以及在指定开发板上验证行为。
主要功能
- 01支持回绕的经过时间检查
- 02显式且有界的状态机
- 03非阻塞消抖与解析
- 04看门狗及超时行为
- 05测量循环延迟与抖动
- 06测试时序边界情况
适用场景
- 01替换固件中的长延时
- 02限制串口或网络处理时长
- 03测试消抖与计时器回绕
- 04定义错过截止时间后的安全行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ wedsamuel1230/ embedded-engineering-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