freertos-patterns について
ESP32とRP2040の並行処理に取り組むためのFreeRTOSスキルです。タスク、キュー、同期、メモリーの設計と検証を案内し、プラットフォームごとの手法を区別します。
主な機能
- 01タスク作成、優先度、スタックサイズ設定
- 02キュー通信と共有データの同期
- 03スタック監視とメモリー確認
- 04ウォッチドッグ、通知、タイマー、コア親和性
活用シーン
- 01並行タスクとタスク間通信の設計
- 02競合状態、デッドロック、スタックオーバーフローの調査
- 03RP2040のコア連携やウォッチドッグ対応の実装
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ wedsamuel1230/ embedded-engineering-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()スケジューラーで問題を解決できる - リクエストが、並行処理を必要としない単一のブロッキングループについてのみである
ワークフロー
制御システムのタスク/リソースの所有権、アクションのタイミング、または期限の予算については、まず realtime-control-design を使用してください。実際の RTOS プリミティブを扱う際に、こちらに戻ってください。ネイティブの ESP-IDF では、独自のポートにおけるスタック単位、アフィニティ、クリティカルセクションのルールが適用されます。選択した SDK を確認せずに、Arduino/RP2040 の例を別のフレームワークに流用しないでください。
- まず対象プラットフォームを確認します。
- 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 ではタスク内で
delay()を使用せず、vTaskDelay()またはイベント駆動のブロッキングを使用します。 - スタックサイズを慎重に見積もり、実行時の情報で検証します。
- RP2040 では、データを共有する前にコアの所有権を明確に定義します。
検証
- 各タスクまたはコアに、明確な責任が 1 つずつあることを確認します。
- キューの深さ、通知の流れ、ミューテックスの保護範囲が、具体的なデータ経路に適合していることを確認します。
- ESP32 では、タスクサイズが不確かな場合、
uxTaskGetStackHighWaterMark()を使ってスタックの余裕を調べます。 - デッドロックやビジーウェイトを発生させずに、スケッチが処理を継続できることを確認します。
- ISR が関与する場合、そのプラットフォームで同期プリミティブが ISR セーフであることを確認します。
よくある失敗
- タスクのスタックサイズが不足している
- FreeRTOS タスク内で
delay()を使用している - 共有データを保護していない
- 一貫性のないロック順序によるデッドロック
- ミューテックスまたは所有権の管理をせずに、RP2040 のコア起動を前提としている
統合
- ユーザーが設計ガイダンスではなく完全なスケッチを必要としている場合は、
arduino-code-generatorと組み合わせます。 - 並行処理の設計が適切であり、それでもハードウェアのタイミング問題が残る場合に限り、
circuit-debuggerと組み合わせます。 - 並行処理の設計にタスク、キュー、またはイベントフローの図が必要な場合は、
mermaid-diagram-generatorと組み合わせます。
共通出力契約
共通の Arduino スキル契約を使用してください。 前提条件、必要なツールとバージョン、実装手順、証明段階ごとのテスト/証拠、 既知の制限事項、復旧/セキュリティに関する注記を明記してください。
コメント
Markdown 対応