2017-01-06 3 views
-1

私はFreeRTOSの調査を開始し、タスクコンテキスト保存ルーチンを調べました。このルーチンは、レジスタとスタックポインタを格納します。私の質問は、さまざまなスレッドのスタックについてです。コンパイラによって生成されたプッシュとポップを実行するスレッドがある場合はどうなりますか?別のスレッドのスタックを上書きすることはできないでしょうか?マイクロプロセッサのコンテキストスイッチ

+0

にFAQで提供されています。存在する場合は、いいえ。しかし、なぜスタックが上書きされると思いますか?そこで走っている全てのスレッドは、コンパイラによって生成されたプッシュとポップを持つでしょう...? –

+0

しかし、特定の条件に応じていくつかのプッシュとポップがある場合はどうなりますか?その後、別のスレッドのスタックを上書きすることができます。 – Gustavo

+0

それでもどうなるか説明してください。スレッドは別々のスタックを持っていますが、なぜ彼らはお互いを上書きしますか?そして、この特定の条件は何ですか? –

答えて

2

各スレッドは、コンテキスト格納に必要な専用のコールスタックの十分なスタックを割り当てる必要があります。コンテキスト格納に必要なスタックスペースの追加量はターゲットに依存しますが、具体的にFreeRTOSの場合、定数configMINIMAL_STACK_SIZEは少なくともそのサイズにある程度の余裕があります。

スレッドスタックが割り込みコンテキストで使用されるいくつかのターゲットでは、割り込みによるスタック使用も考慮する必要があります。割り込みがネスト可能な場合。最悪の状況は、すべての割り込みが優先順位でアクティブになってから完了するまでの間です。シナリオは考えられませんが、考慮する必要があります。あなたは何を行うことができます何のメモリ保護がありません場合はFreeRTOSのためのスタック割り当ての

アドバイスはhttp://www.freertos.org/FAQMem.html#StackSize

関連する問題