SuperAPI AI 工具集

non-blocking-patterns

编程与开发

查看项目

更新于 10-16 10:39

技能介绍

用途

该技能面向 Arduino 或嵌入式 C++ 代码中出现的阻塞式写法,帮助把主循环保持响应,并使时序行为可测试。触发场景包括:代码中使用 delay()、需要按键防抖、执行周期性工作、进行协作式调度、需要看门狗安全计时、使用状态机,或在传感器、网络、电机负载下控制延迟与抖动。

主要能力

  • 识别并替换长时间 delay() 调用,改用无符号回绕安全的经过时间检查,例如 if (static_cast<unsigned long>(now - last) >= period)。仅在确认主板与框架支持时,才使用硬件定时器或 RTOS 任务。
  • 把多步工作建模为具有有界状态转换的显式状态机,不把等待隐藏在辅助函数里。
  • 使用稳定状态计时或事件过滤对输入进行防抖,而不是阻塞式暂停。对串口解析、网络重试和传感器转换等待进行有界限制。
  • 定义看门狗喂狗、输出禁止、超时与恢复行为。
  • 在具有代表性的日志、无线电、存储和执行器负载下测量循环延迟与任务抖动。

使用方式

资料给出的处理流程如下:

  1. 列出每个周期性或事件驱动任务,标明周期、截止时间与最坏情况工作量,识别任何阻塞式库调用。
  2. 用无符号回绕安全的经过时间检查替换长时间 delay() 调用;仅在确认支持时使用硬件定时器或 RTOS 任务。
  3. 把多步工作建模为显式状态机,转换有界,不把等待隐藏在辅助函数中。
  4. 用稳定状态计时或事件过滤实现输入防抖,不采用阻塞式暂停;对串口解析、网络重试和传感器转换等待进行有界限制。
  5. 定义看门狗喂狗、输出禁止、超时和恢复行为。
  6. 在具有代表性的日志、无线电、存储和执行器负载下测量循环延迟与任务抖动。

适用场景

适用于 Arduino 或嵌入式 C++ 项目中需要保持主循环响应性的场合,例如按键防抖、周期性任务、协作式调度、看门狗安全计时、状态机实现,以及在传感器、网络或电机负载下的延迟与抖动控制。

限制与要求

资料未提供具体的板卡型号、框架版本或安装命令。技能要求记录板卡/核心版本、任务周期、截止时间、最大工作时长、输入抖动、串口/网络行为、看门狗策略、中断约束以及错过截止时间时的安全响应。验证要求包括:时间关键路径中不得留下无界阻塞调用(除非有书面理由和超时);防抖、回绕、超时和错过截止时间的情况要有测试;确切目标编译证明与时序/串口证据应分开;当任务、传感器或通信路径超时时,输出应进入安全状态。资料同时列出了需避免的合理化借口,如“更短的 delay 也可以”“USB 上循环很快”“枚举就是状态机”“看门狗可以随处喂”“millis() 永不回绕”,并分别要求以替换、实际负载测量、定时转换与超时行为、所有权与故障安全定义、无符号减法及回绕边界测试来回应。