mcpField
N
non-blocking-patterns

non-blocking-patterns

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

关于 non-blocking-patterns

面向嵌入式 C/C++ 开发的技能,帮助保持主循环响应并让时序可测试。内容涵盖替换阻塞操作、处理超时与看门狗,以及在指定开发板上验证行为。

主要功能

  1. 01支持回绕的经过时间检查
  2. 02显式且有界的状态机
  3. 03非阻塞消抖与解析
  4. 04看门狗及超时行为
  5. 05测量循环延迟与抖动
  6. 06测试时序边界情况

适用场景

  1. 01替换固件中的长延时
  2. 02限制串口或网络处理时长
  3. 03测试消抖与计时器回绕
  4. 04定义错过截止时间后的安全行为

安装

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

$npx skills add https://github.com/wedsamuel1230/embedded-engineering-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