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

弊社RTOS「μC3/Compact」に関する書込みはこちらにお願いします。
返信する
ymmt
記事: 8
登録日時: 2020年6月10日(水) 16:29

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

投稿記事 by ymmt » 2020年8月06日(木) 09:27

タスクスタックのメモリ配置について教えてください。
現在STM32F4にμC3/Compactを入れて開発をしております。

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

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

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

お手数おかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。
添付ファイル
タスクスタックオーバーフロー.png

アバター
eForce技術担当
記事: 179
登録日時: 2014年4月24日(木) 14:18

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

投稿記事 by eForce技術担当 » 2020年8月06日(木) 11:38

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

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

ymmt
記事: 8
登録日時: 2020年6月10日(水) 16:29

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

投稿記事 by ymmt » 2020年8月06日(木) 14:19

早速のご回答ありがとうございます。

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

お手数おかけしました。

返信する