タスクスタックのメモリ配置について教えてください。
現在STM32F4にμC3/Compactを入れて開発をしております。
タスクスタックの末尾アドレスにはどのようなデータが配置されるのでしょうか?
現在タスクを2つ起動させプログラムを動かしています。
2つのタスクのスタックのメモリ配置は連続しています。(タスク1がアドレスが若い)
タスク2のスタックサイズが小さくプログラムを動かしていると、タスク2のスタックをオーバーして
タスク1のスタックの末尾100バイトを書き換えてしまいました。(添付の図を参照願います。)
こうなるとハードフォルトが発生します。
書き換えてしまったタスク1のスタックにOS上で使用するデータがあるのではないかと推測してはいますが、
実際どのようなデータが配置されているのでしょうか?
あるいはスタックオーバーフローが発生するとOSがハードフォルトとするような仕組みがあるのでしょうか?
お手数おかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。
タスクスタックオーバーフロー
- eForce技術担当
- 記事: 193
- 登録日時: 2014年4月24日(木) 14:18
Re: タスクスタックオーバーフロー
タスク動作中にタスクスタックの末尾アドレスには、OS上で使用する情報が格納されていますので、
書き換えてしまった場合、ハードフォルト等の予期せぬ動作が発生する可能性があります。
(OSでスタックオーバーフローを検知する仕組みは入っていません)
より詳細な情報に関しましては、保守契約が必要となりますが、弊社サポートメールにてお問い合わせください。
書き換えてしまった場合、ハードフォルト等の予期せぬ動作が発生する可能性があります。
(OSでスタックオーバーフローを検知する仕組みは入っていません)
より詳細な情報に関しましては、保守契約が必要となりますが、弊社サポートメールにてお問い合わせください。
Re: タスクスタックオーバーフロー
早速のご回答ありがとうございます。
OS上で使用する情報が格納されていること承知いたしました。
お手数おかけしました。
OS上で使用する情報が格納されていること承知いたしました。
お手数おかけしました。