ARM Cortex-M0命令セットを使用してアセンブリコードを記述しています。私はかなり多くの要素をスタックにプッシュしているので、要素を1つずつポップすることなくスタックを完全にクリアする方法はありますか?いくつかのガイダンスがありますスタックを完全にクリアするにはどうしたらいいですか?
答えて
スタック上のデータを完全に破棄したい場合、たとえば返されない関数を呼び出す場合(そして渡されたパラメータのコピーを取った場合)は、 SPを初期値(または他の有効な値)に設定します。ただし、スタックに保存されていたデータはすべて失われてしまいます。
LDM(LDMIA)命令の後にレジスタにデータを取り込みたい場合。 M0では、R0〜R7(M3/4とは異なります)にしかデータをロードできません。 M0/1はARMv6-M命令セットを使用し、M3はARMv7-Mを使用し、M4はARMv7E-Mを使用します。使用している命令セットのARM Generic User Guideが役立ちます。
@Realtime Rikの答えの最初の部分にいくつかの追加情報を追加するには、(特にMSP
)の初期値がベクタテーブルの最初のエントリから読み込まれます。ご使用のマイクロモードと起動モードによっては、ベクタテーブルの位置が異なる場合があります。
ベクタテーブル(この値をコピーせずに)再配置されていない場合は、次の擬似Cと初期スタックポインタにアクセスすることができるが:
void * sp = *(SCB->VTOR);
SCB
は、いくつかのコア・コンフィギュレーション・レジスタのいずれかを含んでいますVTOR
またはベクトルテーブルオフセットレジスタです。これは本質的にベクトルテーブルの現在のアドレスを含む。このレジスタを逆参照することにより、最初のスタックポインタが格納される場所であるVTOR
が指すテーブルの最初の要素にアクセスしています。
たとえば、ブートローダを作成している場合は、SCB->VTOR
を見る代わりに、起動するアプリケーションを指定する場所を調べる必要があります。次のようにSTのUSBブートローダからのサンプルコードは次のとおりです。この場合、
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) USBD_DFU_APP_DEFAULT_ADD);
、彼らはそれがテーブルの最初のエントリを読んで逆参照、ポインタにキャストし、ベクタテーブルのデフォルトのアドレスを持っている、とのセットその値にMSP
。これは、アプリケーションにジャンプする直前です。
- 1. ビジュアルコードエディタを完全にリセットするにはどうしたらいいですか?
- 2. リストビューアイテムを完全にクリアしたいですか?
- 3. MenuItemからポップアップを完全にカスタマイズするにはどうしたらいいですか?
- 4. UbuntuからIonicとCordovaのインストールを完全に削除するにはどうしたらいいですか?
- 5. Python - 完全にリストから整数をクリアするには?
- 6. 不完全にマージされたインデックスをgitに保存するにはどうしたらいいですか?
- 7. セルを再利用すると、セルを完全にクリアするにはどうすればよいですか?
- 8. jPanelsをJavaでスタック/オーバーレイするにはどうしたらいいですか?
- 9. sdkmanager --listから完全なパッケージ名を取得するにはどうしたらいいですか?
- 10. トグル時にディビジョンを完全にクリアするにはどうすればよいですか?
- 11. コード契約を完全に無効にするにはどうしたらいいですか?
- 12. Magento Pageを完全に空白にするにはどうしたらいいですか?
- 13. QtのQwtPlotをクリアするにはどうしたらいいですか?
- 14. Unityで完全にオフスクリーンにならないようにするにはどうすればいいですか?
- 15. ruby、rils、rvm、gemsを完全にアンインストールするにはどうしたらいいですか?
- 16. libclangで完全修飾の関数名を取得するにはどうしたらいいですか?
- 17. gitで完全コミットメッセージを記録するにはどうしたらいいですか?
- 18. QSplitterが子ウィジェットを完全に隠すのを防ぐにはどうしたらいいですか?
- 19. tcpdumpを使ってスナップショットの完全なキャプチャを確認するにはどうしたらいいですか?
- 20. フッターを全幅にするにはどうしたらいいですか?
- 21. Symfony2のFormTypeクラスに完全なセキュリティロールリスト/階層を渡すにはどうしたらいいですか?
- 22. Rails AJAXリクエストを完全に取り消すにはどうしたらいいですか?
- 23. JavaScriptから完全に新しい動画を追加するにはどうすればよいですか?
- 24. テキストファイルを完全にクリアする
- 25. デコーダの完全なコピーを作成するにはどうしたらいいですか?
- 26. 完全なハッシュ関数を設計するにはどうしたらいいですか?
- 27. 完全なアプリケーション/サイトでElm "スタック"はどのように見えますか?
- 28. std :: coutはスタック上で完全に動作していますか? C++で
- 29. 不完全なデータファイルのみを転送して、完全なファイルから不完全なデータファイルを更新するにはどうすればよいですか?
- 30. UIBarButtonItem - 「完了」ボタンをポップするにはどうしたらいいですか?
'add {s} sp、N'? – EOF
これでスタックがどのようにクリアされるのでしょうか?申し訳ありませんが、私はこの – abruzzi26
の初心者です。スタックを "クリア"する必要はありません。あなたがあなたのものをプッシュする前に、SPが持っていた価値を元に戻すことだけが必要です。 – Tommylee2k