タスクスタックオーバーフロー
Posted: 2020年8月06日(木) 09:27
タスクスタックのメモリ配置について教えてください。
現在STM32F4にμC3/Compactを入れて開発をしております。
タスクスタックの末尾アドレスにはどのようなデータが配置されるのでしょうか?
現在タスクを2つ起動させプログラムを動かしています。
2つのタスクのスタックのメモリ配置は連続しています。(タスク1がアドレスが若い)
タスク2のスタックサイズが小さくプログラムを動かしていると、タスク2のスタックをオーバーして
タスク1のスタックの末尾100バイトを書き換えてしまいました。(添付の図を参照願います。)
こうなるとハードフォルトが発生します。
書き換えてしまったタスク1のスタックにOS上で使用するデータがあるのではないかと推測してはいますが、
実際どのようなデータが配置されているのでしょうか?
あるいはスタックオーバーフローが発生するとOSがハードフォルトとするような仕組みがあるのでしょうか?
お手数おかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。
現在STM32F4にμC3/Compactを入れて開発をしております。
タスクスタックの末尾アドレスにはどのようなデータが配置されるのでしょうか?
現在タスクを2つ起動させプログラムを動かしています。
2つのタスクのスタックのメモリ配置は連続しています。(タスク1がアドレスが若い)
タスク2のスタックサイズが小さくプログラムを動かしていると、タスク2のスタックをオーバーして
タスク1のスタックの末尾100バイトを書き換えてしまいました。(添付の図を参照願います。)
こうなるとハードフォルトが発生します。
書き換えてしまったタスク1のスタックにOS上で使用するデータがあるのではないかと推測してはいますが、
実際どのようなデータが配置されているのでしょうか?
あるいはスタックオーバーフローが発生するとOSがハードフォルトとするような仕組みがあるのでしょうか?
お手数おかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。