mcpField
N
non-blocking-patterns

non-blocking-patterns

github.com/wedsamuel1230開発2951 回インストール3 週間前に更新
リポジトリ

non-blocking-patterns について

non-blocking-patterns は、応答性が高くタイミングをテストできる組み込み C/C++ のメインループ設計を支援するスキルです。ブロッキング処理の置き換え、安全なタイムアウト動作の定義、対象ボードでの検証を扱います。

主な機能

  1. 01ラップ対応の経過時間判定に置換
  2. 02明示的なステートマシンで処理を制限
  3. 03ブロッキングなしの入力デバウンス
  4. 04シリアル、ネットワーク、センサー待機の制限
  5. 05ウォッチドッグとタイムアウト時の復旧定義
  6. 06対象ボードでタイミングと期限を検証

活用シーン

  1. 01delay() を使う時間制約ループの改修
  2. 02millis() のラップと期限超過のテスト
  3. 03無線やアクチュエーター負荷時のジッター測定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wedsamuel1230/arduino-skills --skill non-blocking-patterns

インストール後、Claude Code で/non-blocking-patternsを入力して読み込まれたか確認します。

詳細

ノンブロッキングパターン

メインループの応答性を維持し、タイミング動作をテスト可能にします。対象ボード向けにコンパイルできる C/C++ のパターンを優先し、Python は関連するテストまたはログ分析ツールにのみ使用します。

受け入れ情報

ボード/コアのバージョン、タスク周期、期限、最大処理時間、入力のチャタリング、シリアル/ネットワークの動作、ウォッチドッグのポリシー、割り込みの制約、期限を逃した場合の安全応答を記録します。

処理

  1. 周期的またはイベント駆動型の各タスクについて、周期、期限、最悪ケースの処理量を列挙します。ブロッキングするライブラリ呼び出しを特定します。
  2. 長い delay() 呼び出しを、if (static_cast<unsigned long>(now - last) >= period) のような符号なしのオーバーフローに安全な経過時間チェックに置き換えます。ハードウェアタイマーや RTOS タスクを使うのは、ボードとフレームワークが対応していることを確認できた場合に限ります。
  3. 複数段階の処理は、遷移回数に上限のある明示的なステートマシンとしてモデル化します。ヘルパー関数の中に待機処理を隠さないでください。
  4. ブロッキングする待機ではなく、安定状態タイマーまたはイベントフィルターで入力のチャタリングを除去します。シリアル解析、ネットワークの再試行、センサーの変換待ちに上限を設けます。
  5. ウォッチドッグへの給餌、出力の禁止、タイムアウト、復旧の動作を定義します。
  6. 代表的なログ出力、無線、ストレージ、アクチュエーターの負荷をかけた状態で、ループのレイテンシーとタスクのジッターを測定します。

正当化への対処

近道応答
「短い delay なら問題ありません。」それでもブロッキングです。期限を示し、置き換えてください。
「USB 接続時はループが高速です。」実際の無線、ストレージ、アクチュエーターの負荷で測定してください。
「enum を使っているのでステートマシンです。」時間制約のある遷移、明示的な開始/終了処理、タイムアウト動作を必須にしてください。
「ウォッチドッグはどこでも給餌できます。」管理主体とフェイルセーフ動作を定義してください。タスクの停止を隠さないでください。
「millis() はオーバーフローしません。」符号なしの減算を使い、オーバーフロー境界をテストしてください。

検証

  • 時間制約のある経路に、理由とタイムアウトが文書化されていない、上限のないブロッキング呼び出しが残っていません。
  • チャタリング除去、オーバーフロー、タイムアウト、期限超過のケースをテストしています。
  • 対象を指定したコンパイルの証明と、タイミング/シリアルの証拠は分けて示しています。
  • タスク、センサー、通信経路がタイムアウトした場合、出力は安全な状態になります。

出力に関する共通契約

共通の Arduino スキル契約に従い、前提条件、必要なツールとバージョン、実装手順、証明段階ごとのテスト/証拠、既知の制限事項、復旧/セキュリティに関する注意事項を明記します。

コメント