MSPおよびPSPのLinuxからのCortex-M3に割り込みでスリープを使用することができます

1、のCortex-M3 PSPおよびMSP

     タスク切り替え後ORR LRのために、前に書かれた自分自身の手動せずに、少しの知識となっているタスク切り替えのコードのために、STM32 RT通じスレッドとのuC / OSで使用されてきた、LRは、#0x04が、例外からの復帰を確認し、プロセスのスタックは非常にではありません使用しています理解し、偶然、私はオンラインより深く見て行く前にこの質問をした会いました。Cortex-M3は、二つのスタックポインタを持っていますが、一度にのみ、それらのいずれかを使用することができるように、彼らは、いずれかのバンクです。

     メインスタックポインタ(MSP):オペレーティングシステムのカーネル・ルーチンと例外が(割り込みサービス・ルーチンを含む)を処理するためにデフォルトで使用されるリセットスタックポインタの後。

     プロセススタックポインタ(PSP):ユーザアプリケーションコードによって使用されます。最小2つのスタックポインタはスタックが常に整列4バイトであることを意味し、常に0です。

    それを見ることができる、彼らは資源を使用一つのシステムでは二つの部分、1オペレーティングシステムおよび割り込み、一つのユーザのユーザプログラムは、あるタスクのスケジューリングでは、(割り込みタスクスケジューリングを)中断したときに、同じではありませんそのPSPを使用してユーザプログラムに戻ります。

2、Linuxシステムは、スリープ割り込みを使用することができます

      これは、睡眠の使用​​は、タスクで現在のタスクを一時停止しますことはありません、スリープ原理がされて私の学生の1の質問に直面している、彼は私の最初の反応があるときに私に言った、保留中の割り込み割り込みスリープを使用します私は、さらに中と説明できない理由スリープパラメータ現在のタスクNを一時停止するに従って、Nサイクル(おそらくMS)タスクが実行可能状態に設定された後、他の言葉で、スリープが実際にタスクスケジューラで、最後にのuC / OSが違うだけの関数名が最終的に、スケジューラを呼び出している、タスクをスケジュールするOS_INT_EXIT割り込み()関数を呼び出しスリープとOS_INT_EXITます。

      、異なる、のuC / OSハハ、私は皆のための右の答えは推測だと思う、それは当然のことではありませんが、ああ、それは私が説明するのuC / OSを使用していたので、Linuxシステムで、もちろん私の解釈は、一見シームレス振り返ってみると、彼が最初に設計するもの、MSPおよびPSPは、のCortex-M3のハードウェアであり、そして、それは(割り込みを含む)は、オペレーティングシステムやユーザプログラム分割(分離)であるから、またはオペレーティングシステムを保護するため、予防するためにでした保護を使用して、システムのコアに関連する何かのために、このような考え、Linuxシステムでは、破壊することなく、すべての場所が表示されている、のuC / OSは、システムやアプリケーション限り、すべてのグローバル変数を使用してコンパイルされました見ることができ、異なるLinuxは、中断してまで、現在のマクロが無効である、それは今回のタスクのスケジューリングでは不可能です。

     これらは、Linux、割り込みがスリープを使用することができない理由を説明するためのイデオロギーからのCortex-M3コア・ハードウェア、分離と保護の私の組み合わせです。私は主に「カーネルの設計と実装のlinux」の内容について、以下に説明する情報の公式へのアクセス権を与えられました。

     図1に示すように、プロセス・コンテキスト

      実行可能なコードは、プロセス、プロセスのアドレス空間を実行するための実行可能ファイルからロードされたコードの重要な部分です。ユーザ空間での一般的なプログラムの実行、プログラムが実行されるか、システムコールが例外をトリガし、それはカーネル空間に巻き込まれたときに、この時間は、我々はカーネル実行プロセスのために、プロセスのコンテキストで呼び出します。この文脈で現在のマクロが有効です。カーネルへのすべてのアクセスは、これらのインタフェースを経由しなければならない - (システムコールと例外ハンドラは、カーネルの実行順序にこれらのインタフェースを介して、カーネルにプロセスをインタフェースを明確に定義されています。

     2、割り込みコンテキスト

      カーネルの割り込みコンテキストで割り込みハンドラを実行し、プロセス割り込みコンテキストときに任意の接続を持っていません。(それは中断プロセスを指している)現在のマクロは無関係です。何のバックアップ・プロセスが存在しないので、割り込みコンテキストは眠ることができないので、それ以外の場合はどのようにそれは再びそれを再スケジュールすることができますか?従って、特定の機能は、割り込みコンテキスト(すなわち、割込みハンドラ関数の制限であり、睡眠が1である)から呼び出すことができません。

     割り込みコンテキストでのタスクスケジューリングあれば実際には、MSPおよびPSPに加えて、プロセッサレジスタの多くはバンクされ、ユーザプログラムおよびプログラムによって使用される割り込みレジスタ異なっているので、プロセス・コンテキストおよびコンテキストを中断は、異なっていますそこにプロセスコンテキスト情報を保存する方法はありませんので、これは時間のスケジューリング問題である場合、ソフトウェアは、スケジューリングを防止 - この時点で、現在のマクロが表示されていない、スケジュールすることができません。

おすすめ

転載: www.cnblogs.com/Ph-one/p/11112897.html