ページ 11

タスクスタックオーバーフロー

Posted: 2020年8月06日(木) 09:27
by ymmt
タスクスタックのメモリ配置について教えてください。
現在STM32F4にμC3/Compactを入れて開発をしております。

タスクスタックの末尾アドレスにはどのようなデータが配置されるのでしょうか?

現在タスクを2つ起動させプログラムを動かしています。
2つのタスクのスタックのメモリ配置は連続しています。(タスク1がアドレスが若い)
タスク2のスタックサイズが小さくプログラムを動かしていると、タスク2のスタックをオーバーして
タスク1のスタックの末尾100バイトを書き換えてしまいました。(添付の図を参照願います。)
こうなるとハードフォルトが発生します。
書き換えてしまったタスク1のスタックにOS上で使用するデータがあるのではないかと推測してはいますが、
実際どのようなデータが配置されているのでしょうか?

あるいはスタックオーバーフローが発生するとOSがハードフォルトとするような仕組みがあるのでしょうか?

お手数おかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。

Re: タスクスタックオーバーフロー

Posted: 2020年8月06日(木) 11:38
by eForce技術担当
タスク動作中にタスクスタックの末尾アドレスには、OS上で使用する情報が格納されていますので、
書き換えてしまった場合、ハードフォルト等の予期せぬ動作が発生する可能性があります。
(OSでスタックオーバーフローを検知する仕組みは入っていません)

より詳細な情報に関しましては、保守契約が必要となりますが、弊社サポートメールにてお問い合わせください。

Re: タスクスタックオーバーフロー

Posted: 2020年8月06日(木) 14:19
by ymmt
早速のご回答ありがとうございます。

OS上で使用する情報が格納されていること承知いたしました。

お手数おかけしました。