mcpField
N
non-blocking-patterns

non-blocking-patterns

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

non-blocking-patterns について

組み込み C/C++ のメインループを応答性の高い状態に保ち、タイミングをテスト可能にするスキルです。ブロッキング処理の置き換え、タイムアウトやウォッチドッグの設計、対象ボードでの検証を扱います。

主な機能

  1. 01オーバーフロー対応の経過時間チェック
  2. 02上限を設けた明示的なステートマシン
  3. 03ノンブロッキングなデバウンスと解析
  4. 04ウォッチドッグとタイムアウトの動作
  5. 05ループ遅延とジッターの測定
  6. 06タイミング境界のテスト

活用シーン

  1. 01ファームウェアの長い待機処理の置き換え
  2. 02シリアルやネットワーク処理の上限設定
  3. 03デバウンスとタイマー周回のテスト
  4. 04期限超過時の安全動作の定義

インストール

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

$npx skills add https://github.com/wedsamuel1230/embedded-engineering-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 スキル契約に従い、前提条件、必要なツールとバージョン、実装手順、証明段階ごとのテスト/証拠、既知の制限事項、復旧/セキュリティに関する注意事項を明記します。

コメント