mcpField
N
non-blocking-patterns

non-blocking-patterns

github.com/wedsamuel1230开发2951 次安装3 周前更新
代码仓库

关于 non-blocking-patterns

non-blocking-patterns 是一项技能,帮助嵌入式开发者设计响应及时、时序可测试的 C/C++ 主循环。它涵盖替换阻塞操作、定义超时安全行为,以及在目标开发板上验证性能。

主要功能

  1. 01用防回绕计时检查替代延时
  2. 02以显式状态机限定工作步骤
  3. 03非阻塞地消抖输入
  4. 04限定串口、网络和传感器等待
  5. 05定义看门狗与超时恢复行为
  6. 06验证目标板时序与截止期限

适用场景

  1. 01重构使用 delay() 的关键时序循环
  2. 02测试 millis() 回绕和错过截止期限
  3. 03测量无线或执行器负载下的抖动

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wedsamuel1230/arduino-skills --skill non-blocking-patterns

安装后在 Claude Code 中输入/non-blocking-patterns确认已加载。

详细介绍

非阻塞模式

保持主循环响应灵敏,并确保时序行为可测试。优先使用可针对具体开发板编译的 C/C++ 模式;仅在相关测试或日志分析工具中使用 Python。

信息收集

记录开发板/核心版本、任务周期、截止时间、最大工作时长、输入抖动、串口/网络行为、看门狗策略、中断约束,以及错过截止时间时的安全响应。

处理

  1. 列出每个周期性或事件驱动任务的周期、截止时间和最坏工作量。找出所有阻塞式库调用。
  2. 将长时间的 delay() 调用替换为无符号且可安全处理回绕的经过时间检查,例如 if (static_cast<unsigned long>(now - last) >= period)。只有在确认开发板和框架支持后,才使用硬件定时器或 RTOS 任务。
  3. 将多步骤工作建模为具有有限状态转换的显式状态机;不要在辅助函数中隐藏等待。
  4. 使用稳定状态计时器或事件过滤器消除输入抖动,不要使用阻塞式暂停。限制串口解析、网络重试和传感器转换等待的时长。
  5. 定义看门狗喂狗、输出禁止、超时和恢复行为。
  6. 在具有代表性的日志记录、无线电、存储和执行器负载下测量循环延迟和任务抖动。

避免自我辩解

走捷径的说法应对
“更短的延迟没问题。”它仍然会阻塞;说明截止时间并替换它。
“通过 USB 时循环速度很快。”使用实际的无线电、存储和执行器负载进行测量。
“用了枚举就是状态机。”必须有定时转换、明确的进入/退出行为和超时处理。
“看门狗可以在任何地方喂。”明确责任归属和故障安全行为;不要掩盖卡住的任务。
“millis() 永远不会回绕。”使用无符号减法并测试回绕边界。

验证

  • 时序关键路径中没有未设上限的阻塞调用;如有例外,必须说明原因并设置超时。
  • 为消抖、回绕、超时和错过截止时间等情况编写了测试。
  • 针对确切目标的编译证明与时序/串口证据相互独立。
  • 当任务、传感器或通信路径超时时,输出会进入安全状态。

共享输出约定

使用共享 Arduino 技能约定:说明假设、所需工具和版本、实现步骤、各验证阶段的测试/证据、已知限制,以及恢复/安全注意事项。

评论

支持 Markdown