freertos-patterns について
ESP32 と RP2040 の FreeRTOS 並行処理を設計するためのリファレンススキルです。タスク、通信、同期、メモリ、応用機能のガイダンスを示し、プラットフォームごとの違いを明確にします。
主な機能
- 01タスクのライフサイクル、優先度、スタックサイズ
- 02タスク間キューと通信
- 03ミューテックス、セマフォ、ISR 同期
- 04ヒープ、スタック、実行時の監視
- 05ウォッチドッグ、通知、タイマー、アフィニティ
活用シーン
- 01ESP32 の並行タスクと優先度の設計
- 02RP2040 のデュアルコア処理の調整
- 03デッドロック、競合、スタックオーバーフローの調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ wedsamuel1230/ arduino-skills --skill freertos-patternsインストール後、Claude Code で/freertos-patternsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/workflow.mmdreferences/patterns-advanced.mdpatterns-memory.mdpatterns-queues.mdpatterns-synchronization.mdpatterns-task-creation.md詳細
ESP32 および RP2040 向け FreeRTOS パターン
ESP32 または RP2040 で実際の並行処理の問題が発生した場合に、このスキルを使用します。メインの処理は要点に絞り、ユーザーの具体的な問題に合った詳細なリファレンスを読み込みます。
リソース
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- アーキテクチャの概要
使用する状況
次の内容を含むリクエストでは、このスキルを使用します。
- ESP32 での複数の並行ジョブ
- タスクの優先度やプリエンプション
- キュー、セマフォ、ミューテックス、通知の設計
- RP2040 の
setup1とloop1を使ったマルチコア連携 - ウォッチドッグに対応した長時間動作
- 競合状態、スタックオーバーフロー、デッドロックのデバッグ
次の場合は、このスキルを使用しないでください。
- 対象が UNO またはその他のシングルコアボードの場合
- シンプルな
millis()スケジューラで問題を解決できる場合 - リクエストが、並行処理の要件を含まない単一のブロッキングループだけに関する場合
ワークフロー
- まず対象プラットフォームを確認します。
- ESP32 -> FreeRTOS のタスクモデル
- RP2040 -> デュアルコア連携モデル
- 主な問題を特定します。
- タスクの起動 ->
patterns-task-creation.mdを開く - 通信 ->
patterns-queues.mdを開く - 共有データまたは ISR のシグナリング ->
patterns-synchronization.mdを開く - スタックまたはヒープのリスク ->
patterns-memory.mdを開く - ウォッチドッグ、通知、タイマー、アフィニティ ->
patterns-advanced.mdを開く
- タスクの起動 ->
- 同期境界を一度に 1 つずつ解決します。設計上本当に必要な場合を除き、キュー、ミューテックス、通知の各アドバイスを混在させないでください。
- ボード固有の詳細を明確にします。ESP32 向け FreeRTOS のガイダンスと RP2040 向けマルチコアのガイダンスは、互換性がありません。
基本ルール
- 問題を解決できる最小の並行処理プリミティブを優先します。
- 共有状態を明示的に保護します。「おそらく安全」は安全ではありません。
- ESP32 では
vTaskDelay()またはイベント駆動のブロッキングを使用し、タスク内では決してdelay()を使用しないでください。 - スタックサイズを慎重に割り当て、実行時の証拠で検証します。
- RP2040 では、データを共有する前にコアの所有権を明確に定義します。
検証
- 各タスクまたはコアに、明確で固有の責任があることを確認します。
- 具体的なデータ経路に照らして、キューの深さ、通知の流れ、またはミューテックスによる保護範囲を確認します。
- ESP32 では、タスクサイズが不確かな場合、
uxTaskGetStackHighWaterMark()でスタックの余裕を調べます。 - デッドロックやビジーウェイトを起こさずに、スケッチが処理を継続できることを検証します。
- ISR が関与する場合は、そのプラットフォームで同期プリミティブが ISR セーフであることを確認します。
よくある失敗要因
- タスクスタックのサイズ不足
- FreeRTOS タスク内での
delay()の使用 - 共有データが保護されていない
- 一貫性のないロック順序によるデッドロック
- ミューテックスや所有権の管理をせずに RP2040 のコア起動を想定すること
統合
- ユーザーが設計ガイダンスではなくスケッチ全体を必要とする場合は、
arduino-code-generatorと組み合わせます。 - 並行処理の設計に問題がないことを確認した後も、ハードウェアのタイミング問題が残る場合に限り、
circuit-debuggerと組み合わせます。 - 並行処理の設計にタスク、キュー、またはイベントフローの図が必要な場合は、
mermaid-diagram-generatorと組み合わせます。
共通出力の契約
Arduino スキル共通契約に従ってください。前提条件、必要なツールとバージョン、実装手順、証明段階ごとのテストおよび証拠、既知の制限事項、復旧とセキュリティに関する注意事項を明記します。
コメント
Markdown 対応