SuperAPI AI 工具集

freertos-patterns

编程与开发

查看项目

更新于 10-16 10:37

技能介绍

用途

该技能面向 ESP32 或 RP2040 上的真实并发问题。它的做法是保持主流程聚焦,并根据用户的具体问题加载匹配的详细参考文档。

当请求涉及 ESP32 上的多个并发作业、任务优先级或抢占、队列/信号量/互斥量/通知设计、RP2040 的 setup1 与 loop1 多核协调、看门狗安全的长时运行行为,或调试竞态条件、栈溢出、死锁时,可使用本技能。

当目标为 UNO 或其他单核开发板、简单 millis() 调度即可解决问题,或请求仅涉及一个阻塞循环、没有并发需求时,不应使用本技能。

提供的参考资料

  • references/patterns-task-creation.md:任务生命周期、优先级、栈大小设定与任务启动
  • references/patterns-queues.md:使用队列进行任务间通信
  • references/patterns-synchronization.md:互斥量、信号量、临界区与 ISR 协调
  • references/patterns-memory.md:栈大小设定、堆检查与监控
  • references/patterns-advanced.md:看门狗、通知、事件组、定时器与亲和性
  • assets/workflow.mmd:架构概览

使用方式

对于控制系统的任务/资源归属、动作时序或截止时间预算,先使用 realtime-control-design;随后回到本技能获取实际的 RTOS 原语。原生 ESP-IDF 使用其自身端口的栈单位、亲和性与临界区规则;在未核对所选 SDK 前,不要把 Arduino/RP2040 示例复制到其他框架。

工作流程:

  1. 先确认目标平台:ESP32 对应 FreeRTOS 任务模型;RP2040 对应双核协调模型。
  2. 识别主导问题:任务启动则打开 patterns-task-creation.md;通信则打开 patterns-queues.md;共享数据或 ISR 信号则打开 patterns-synchronization.md;栈或堆风险则打开 patterns-memory.md;看门狗、通知、定时器或亲和性则打开 patterns-advanced.md。
  3. 一次只解决一个同步边界。除非设计确实需要,避免把队列、互斥量和通知的建议混在一起。
  4. 保持板级细节明确。ESP32 的 FreeRTOS 指导与 RP2040 的多核指导不可互换。

核心规则

  • 优先使用能解决问题的最小并发原语。
  • 显式保护共享状态。“大概安全”并不安全。
  • 在 ESP32 上使用 vTaskDelay() 或事件驱动的阻塞,切勿在任务内使用 delay()。
  • 有意识地预留栈大小,并用运行时证据验证。
  • 对于 RP2040,在共享数据前先明确核心归属。

验证

  • 确认每个任务或核心有单一明确职责。
  • 根据具体数据路径检查队列深度、通知流或互斥量覆盖范围。
  • 对于 ESP32,在任务大小不确定处用 uxTaskGetStackHighWaterMark() 检查栈余量。
  • 验证草稿能在不出现死锁或忙等待的情况下持续推进。
  • 若涉及 ISR,验证所用同步原语在该平台上对 ISR 是安全的。

常见失败模式

  • 任务栈过小
  • 在 FreeRTOS 任务内使用 delay()
  • 未保护的共享数据
  • 锁顺序不一致导致的死锁
  • RP2040 核心启动假设缺乏互斥量或归属约束

集成

  • 当用户需要完整草稿而非设计指导时,可与 arduino-code-generator 组合使用。
  • 仅当并发设计看起来合理且仍然存在硬件时序问题时,才与 circuit-debugger 组合使用。
  • 当并发设计需要任务、队列或事件流图时,可与 mermaid-diagram-generator 组合使用。

共享输出约定

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

限制

上述参考资料与集成技能的具体内容,以及共享输出约定的完整细节,当前资料未提供。