4

Cortex-M3 プロセッサの MSP および PSP レジスタ (メインおよびプロセス スタック レジスタ) にアクセスする必要があります。

私はC/C++で書いています。

µVision および関連するコンパイラでは、この Thumb-2 専用コアのインライン アセンブリを実行できません (とにかく、それが良いアイデアかどうかはわかりません)。

これを行う必要があるのは、svc 命令がスレッド モードで実行されたか、ハンドラー モードで実行されたかに関係なく、svc 命令の即時値を抽出できるようにするためです。

ありがとう、

4

2 に答える 2

5

これを確認するために現時点で Keil コンパイラにアクセスすることはできませんが、ドキュメントによると、コンパイラの「名前付きレジスタ変数」機能を使用できるはずです。

register uint32_t msp __asm("msp");
register uint32_t psp __asm("psp");
于 2010-06-01T15:56:09.137 に答える
1

このような場合、私は通常、小さなアセンブリ コールアウトを使用してそれを行います。

いずれかの SP にアクセスするには、特殊レジスタ アクセス命令 (MRS / MSR) を使用できます。uVision では、MSP はSP_mainで、PSP はSP_processだと思います。

私のARMアセンブリは少しさびていますが、次のようになると思います:

MRS   R0, SP_process   // R0 holds retval
BX    LR                // return

あなたの質問から、あなたはすでに MSP と PSP の違いを理解しており、(LR を介して) どちらを読むべきかを判断する方法を知っているようです。

于 2010-06-01T13:40:50.363 に答える