割り込みハンドラーは、中断されたタスクのスタックを使用しますか、それとも別のスタックをスタックとして使用しますか?(PowerPC、VxWorks)
3 に答える
これはアーキテクチャに依存します。VxWorksカーネルプログラマーガイド(v6.8)から:
すべてのISRは同じ割り込みスタックを使用します。[...]
注意:一部のアーキテクチャでは、個別の割り込みスタックの使用が許可されておらず、ISRは割り込みタスクのスタックを使用します。[...]アーキテクチャが個別の割り込みスタックをサポートしているかどうかを判断するには、BSPのVxWorksリファレンスを参照してください。
あなたの場合、PowerPCは(コアごとに)個別の共有割り込みスタックをサポートします。
VxWorksには、割り込み用の特定のスタックがあります。すべての割り込みハンドラーは、vxWorksイメージがロードされる場所のすぐ上にある同じスタックを共有します。
デフォルトのスタックサイズは5Kだと思いますが、カーネルコンフィギュレーターで簡単に変更できます。
ISRメカニズムは、おおまかに次のように機能
します。VxWorksは、通常、ISRコードの周りにアセンブリコードラッパーをインストールするものと考えることができます。
エントリ時に、汎用レジスタ(ISRスタック上)を自動的に保存するため、実行中のコンテキスト(別のISRまたはタスク)の状態が保持されます。
終了時に、レジスタが復元されますが、さらに、OSスケジューラが呼び出されて、終了したばかりのISRが優先度の高いタスクの状態を変更したかどうかを確認します。これが発生した場合は、優先度の高いタスクが再開されます。優先度の高いタスクが利用できない場合は、元のタスクが復元されます。
xiaokaoy、VxWorksプログラマーズガイドのセクション2.6には、割り込みがどのように機能するかについてのかなり良い説明があります。コピーがない場合は、多くのソースからオンラインで入手できます。