インテルのみ表示可能 — GUID: iga1457455327985
Ixiasoft
インテルのみ表示可能 — GUID: iga1457455327985
Ixiasoft
37.7.4. ベクトルテーブルにおけるISRの配置
サイズの小さい重要なISRがある場合は、ISRコードをベクトルテーブルに直接配置することにより、最高のパフォーマンスを実現することができます。この方法により、ベクトルテーブルからHALファネルを介してISRに分岐する際のオーバーヘッドをなくします。このセクションでは、VIC Basicデザイン例のソフトウェアを変更し、VIC Table-Residentデザイン例を作成する方法について説明します。この例を使用して手順を正しく理解し、その後カスタムコードに同等の変更を加えます。
ベクトルテーブルにISRを配置することは、高度でエラーが発生しやすい手法であり、HALでは直接サポートされていません。細心の注意を払い、ISRコードをベクトル・テーブル・エントリーに収める必要があります。ISRがベクトル・テーブル・エントリーをオーバーフローすると、ベクトルテーブル内の他のエントリー、および割り込み処理システム全体が破損します。
ベクトルテーブルにISRを配置する際は、登録を行う必要はありません。alt_ic_isr_register() は呼び出さないでください。ベクトルテーブルの内容が上書きされます。
ISRがベクトルテーブルにある場合、HALはファネルコードを提供しません。そのため、ISRコードでは、通常はファネルで処理されるコンテキストの切り替え動作を実行する必要があります。ファネルのコンテキスト切り替えには、次の動作の一部またはすべてが含まれます。
- レジスターの保存と復元
- プリエンプションの管理
- スタックポインターの管理
可能な限り高速なISRを作成するには、次のガイドラインに従うことで、ISRで実行するコンテキスト切り替え動作を最小限にする、もしくはなくします。
- ISRをアセンブリー言語で記述します。
- ISRで使用するシャドー・レジスター・セットを割り当てます。
- 同じレジスターセットを使用している別のISRでISRがプリエンプトされないことを確認します。デフォルトで、レジスターセット内のプリエンプションは Nios® IIプロセッサーで無効にされます。この条件は、ISRにレジスターセットへの排他的アクセスを与えることで保証することもできます。
VIC Table-Residentのデザイン例では、BSPで生成されるファイルのaltera_vic1_vector_tbl.Sを変更する必要があります。この変更後にBSPを再生成すると、 Nios® IIソフトウェア・ビルド・ツールはaltera_vic1_vector_tbl.Sを再生成し、変更は上書きされます。