※本記事は広告を含みます。
目次
割り込み処理解説シリーズ
本記事は「割り込み処理解説」シリーズの1つです。
- 割り込みとは何か?ポーリングとの違いから理解する【組み込み入門】
- 割り込み処理でやってはいけないこと5選|組み込み設計の落とし穴
- 割り込みは「処理を書く場所」ではない|組み込み設計の本質
- 割り込み×状態遷移設計|イベント駆動型組み込みの基本パターン
- 割り込み優先度設計の考え方|リアルタイム性を壊さないために(この記事)
- 割り込みとRTOSなし構成の違いとは?設計思想の本質を整理する
割り込みは便利ですが、
優先度設計を間違えると、簡単に壊れます。
しかも、
原因が非常に分かりづらい。
この記事では、
割り込み優先度をどう考えるべきかを整理します。
そもそも優先度とは何か?
マイコンでは複数の割り込みが同時に発生する可能性があります。
- タイマ割り込み
- UART受信
- ADC完了
- 外部入力
このとき、
どれを先に実行するか
を決めるのが優先度です。
よくある誤解
❌ 「重要な機能ほど優先度を上げればいい」
一見正しそうですが、危険です。
重要=即時性が必要
とは限りません。
優先度設計の基本原則
原則① 実行時間が短いものを高くする
理由:
- ネスト発生時の影響を減らす
- スタック消費を抑える
- レイテンシを最小化する
短く終わる割り込みは上位にしやすい。
原則② 周期が短いものは慎重に扱う
1ms周期タイマを最上位にすると、
- 他の割り込みが常に押しのけられる
- システム全体が不安定になる
周期が短い=高優先度
ではありません。
原則③ データ損失リスクで考える
例:
- UART受信バッファが小さい → 優先度高め
- ログ出力 → 低めでもOK
「失うと困るもの」を基準にする。
ネストの怖さ
優先度が高い割り込みが発生すると、
実行中の割り込みを中断します。
これをネストと言います。
Low ISR 実行中
↓
High ISR 発生
↓
High ISR 実行
↓
Low ISR に復帰ここで問題になるのが:
- スタック消費増大
- 実行時間予測不能
- 再入バグ
RAM不足やスタック破壊の原因になります。
(メモリ記事とも内部リンクできるポイント)
実務でやりがちな失敗
❌ とりあえず全部デフォルト
優先度を設計せず放置。
→ 不具合が出たとき地獄。
❌ 優先度を上げて“解決した気になる”
動いたからOK。
しかし本質は設計破綻。
私が意識している設計手順
① 割り込み一覧を書き出す
② 実行時間を概算する
③ 発生周期を整理する
④ データ損失リスクを評価する
⑤ スタック最大使用量を確認する
これをやるだけで事故は激減します。
優先度設計は“性能”ではなく“安定性”の話
優先度を上げることは、
処理を速くすることではありません。
システム全体を壊さないためのバランス設計
です。
まとめ
割り込み優先度設計の原則:
- 短い処理を上位に
- 周期だけで決めない
- データ損失リスクで考える
- ネストを前提に設計する
この記事が参考になった方へ
割り込みについてはこちらの記事でもまとめています。
- 割り込みとは何か?ポーリングとの違いから理解する【組み込み入門】
- 割り込み処理でやってはいけないこと5選|組み込み設計の落とし穴
- 割り込みは「処理を書く場所」ではない|組み込み設計の本質
- 割り込み×状態遷移設計|イベント駆動型組み込みの基本パターン
- 割り込み優先度設計の考え方|リアルタイム性を壊さないために(この記事)
- 割り込みとRTOSなし構成の違いとは?設計思想の本質を整理する
技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。
小さなご相談からでもお気軽にご連絡ください。

コメント