どうでしょ試割り込みを扱うモジュール?
質問
私は、割り込みを扱うモジュール管理、割り込みコントローラーハードウェアに組み込みプロセッサー私は追加の試験です。現在、試験だけを試験場合は営巣の割り込みの作品の二つのソフトウェア障害から内ISRは、優先度の低いと高い優先されます。たいのですが試験このモジュールで進展するでしょうか?
解決
私は、あなたが同様に他の刺激を作成しようことを示唆しています。
多くの場合、また、ハードウェア割り込みはソフトウェア(自動テスト)またはフラグを設定することにより、デバッガによってトリガすることができます。またはI / Oを経由して割り込みとして。またはタイマ割り込み。あなたがシングルステップしている間、それとも、ただデバッガを経由して、割り込みコントローラ内の割り込みビットを設定することができます。
あなたが起こることになっていないものにいくつかのランタイムチェックを追加することができます。時々私は外部モニタに出力ピンを設定することを選択(素敵なあなたは、オシロスコープやロジックアナライザを持っている場合...)
low_prio_isr(void)
{
LOW_PRIO_ISR=1;
if (1 == HIGH_PRIO_ISR)
{ this may never happen. dummy statement to allow breakpoint in debugger }
}
high_prio_isr(void)
{
HIGH_PRIO_ISR=1
}
ソフトウェア割り込みの欠点は、モーメントが固定されていることです。常に同じ命令。私はあなたがそれが常に動作することを証拠を見たいと考えています。デッドロックフリーます。
、割り込みサービスルーチンのために私は、コードのレビューは非常に貴重見つけます。最後に、あなたはあなたが想像してきた状況をテストすることができますし、ある時点でのテストの努力は非常に高くなります。 ISRのは、デバッグが難しいことで知らあります。
私は次のテストを提供することが有用であると思います: - ISRは、優先度の低い割り込みで中断されていません - ISRは、同じ優先度の割り込みで中断されていません - ISRは、優先度の高い割り込みのために中断されました - スタック制限の範囲内の最大ネスト数
。はインスタンスの最大ネストレベルを監視することができますので、あなたのテストのいくつかは(計装ようなコードに滞在することがあります。
ああ、もう一つ:私は一般的に、あなたがこのあなたに追加のシンプルさと高い性能を得ることができる場合、私は....ネストを控えることができるように短くするISRを保つことができた。
。の [編集] 強いです> もちろん、ISRのはあまりにもシステム内のハードウェア上でテストする必要があります。別にあなたが証明したいことがありビットごとの、ステップ・バイ・ステップのアプローチから: - 最大割り込み負荷でのシステムの安定性(好ましくは数回の予測最大負荷、あなたの115kbpsと高速シリアルドライバはまた、2Mbpsのを扱うことができるならば、あなたは大丈夫だろう!) - システムは、スリープモードに入る場合は特に、ISRを有効/無効の正しい瞬間 - 割り込みの#。あなたは(安定した状況に到達する前にブレーク/接触モーメントの何百もの)機械的スイッチ、機械式ロータリーを追加した場合、驚くべきことができます。
他のヒント
私のおすすめリアル-ハードウェアのテスト。割り込みの取扱いは本質的にランダムになります。
使用信号発生器および飼料の矩形波を適切な割り込みをピンと張ります。複数の発電機(または複数の出力を複数の割り込みラインと検証の優先的取り扱い.
実験との通話の周波数の上下の信号発生器(変わりの料金として、何が起こるか見てみてください.多くの診断コード検証のための割り込みコントローラの各種ます。
代替: の場合のプラットフォームにタイマーがトリガーの割込みを使用していくの外部ハードウェア
私は、組み込み開発者ではないので、私はこれが可能であれば知っているが、どのようにコールバック登録メカニズムからの割り込みを処理するコードをデカップリングについてませんか?あなたがそれを好きなように。これは、あなたが割り込みイベントをfireingシミュレータコードを書くことができるようになる...
このようなもののために私は非常に SPINモデルチェッカのようなものをお勧めします。あなたはこのアルゴリズムではなく、コードをテストする羽目になるが、テストがのの網羅あります。戻る日に、私はgdb
にバグを発見するこの技術を用いています。