1

SDRAM を初期化して準備する単純なブートローダーがあります。次に、フラッシュからアプリケーションをロードし、RAM のあるアドレスで開始します。アプリケーションの実行が終了すると、システムは再起動します。システム スタックはありません。

ここで、アプリケーションが実行を終了した後に、このブートローダーが制御を取り戻すことを望みます。ブートローダー (OS と呼びましょう) も、アプリケーションのリターン コードを読み取る必要があります。

アプリケーションはどのようにして呼び出し元の OS に値を返し、呼び出し元の OS はどのようにして制御を取り戻すことができるでしょうか? 割り込みを使用して実行できると思います-OSには、割り込みに結合された特別な常駐機能があり、すべてのアプリケーションは、独自の実行の最後にこの割り込みを呼び出すだけです。しかし、システム スタックがない場合、OS はどのようにしてリターン コードを読み取ることができるでしょうか。

4

2 に答える 2

4

通常、リターン コードは 1 つまたは複数のレジスタに残しますが、制御できるので、好きな場所に残すことができます。

アプリケーションが中断された場合、割り込み処理ルーチンはアプリケーションの状態をどこかに保存する必要があります。これはおそらく、シャドウ レジスタからメモリ内の定義済みの場所にコピーすることを意味します。

アプリケーションが (ソフトウェア割り込み/システム呼び出しを介して) 制御を OS に引き渡す場合、レジスタ引数を配置する独自の呼び出し規約を定義する必要があり、イベント ハンドラーは制御を OS に戻す前にこれに従う必要があります。 . 作業を簡単にするために、呼び出し規則を C コンパイラの呼び出し規則とできる限り一致させたいと思うでしょう。

于 2010-01-12T10:53:25.497 に答える
2

1 つの解決策は、プログラムがメモリ内の固定された既知の場所に終了コードを書き込むことです。「OS」はそれを読み取ることができます。

于 2010-01-12T10:47:43.490 に答える