SuperAPI AI 工具集

freertos-patterns

编程与开发

查看项目

更新于 10-16 01:08

技能介绍

用途:面向 ESP32 与 RP2040 的真实并发问题,提供 FreeRTOS 任务创建、任务间通信、同步与内存检查等模式指引,按用户的具体问题加载对应详细参考。

主要能力与资源:references/patterns-task-creation.md 覆盖任务生命周期、优先级、栈大小与任务启动;patterns-queues.md 覆盖队列式任务间通信;patterns-synchronization.md 覆盖互斥量、信号量、临界区与 ISR 协调;patterns-memory.md 覆盖栈大小、堆检查与监控;patterns-advanced.md 覆盖看门狗、任务通知、事件组、定时器与核心亲和性;assets/workflow.mmd 提供架构概览。

适用场景:ESP32 上多个并发任务、任务优先级或抢占、队列/信号量/互斥量/通知设计、RP2040 setup1 与 loop1 双核协调、看门狗安全的长时间运行行为,以及竞态条件、栈溢出或死锁调试。不适用:目标是 UNO 等单核板、简单 millis() 调度即可解决,或仅单个阻塞循环且无并发需求。

使用方式:先确认目标平台(ESP32 用 FreeRTOS 任务模型,RP2040 用双核协调模型),再判定主要问题并打开对应参考文档;涉及控制系统任务/资源归属、动作时序或截止期预算时,先用 realtime-control-design,再回到本技能选用实际 RTOS 原语。一次只解决一个同步边界,避免混用队列、互斥量与通知建议。

核心规则:优先选用能解决问题的最小并发原语;显式保护共享状态;ESP32 任务内使用 vTaskDelay() 或事件驱动阻塞,绝不用 delay();刻意规划栈大小并用运行时证据验证;RP2040 共享数据前先明确核心归属。

验证:确认每个任务或核心职责单一;按具体数据路径检查队列深度、通知流或互斥量覆盖;ESP32 用 uxTaskGetStackHighWaterMark() 检查栈余量;确认无死锁或忙等仍能推进;涉及 ISR 时确认同步原语对该平台 ISR 安全。

常见失败模式:任务栈过小、在 FreeRTOS 任务内用 delay()、共享数据未保护、锁顺序不一致导致死锁、RP2040 未加互斥或缺乏归属纪律即做核心启动假设。

集成与限制:需要完整 sketch 时可结合 arduino-code-generator,并发设计合理后仍有硬件时序问题可结合 circuit-debugger,需要任务/队列/事件流图可结合 mermaid-diagram-generator。原生 ESP-IDF 使用其自身端口的栈单位、亲和性与临界区规则,不要未核对 SDK 就把 Arduino/RP2040 示例移植到其他框架;ESP32 与 RP2040 指南不可互换。输出遵循共享 Arduino 技能契约:假设、所需工具与版本、实现步骤、按证明阶段的测试/证据、已知限制、恢复与安全说明。