PR

ESPIDFにてタスクスタックオーバーフローの解決

以下のようなログ出力が出てきました

Guru Meditation Error: Core  0 panic'ed (Stack protection fault). 

Detected in task "ntp_task" at 0x40802358
Stack pointer: 0x40832a60
Stack bounds: 0x40832a8c - 0x40833a80


Core  0 register dump:
MEPC    : 0x4080fa4a  RA      : 0x40802372  SP      : 0x40832a60  GP      : 0x4081bd04  
TP      : 0x40833a80  T0      : 0x4002685e  T1      : 0x10000000  T2      : 0x776d6d2f  
S0/FP   : 0x40832aac  S1      : 0x4082b528  A0      : 0x00000002  A1      : 0xffffffff  
A2      : 0x00000004  A3      : 0x0000000a  A4      : 0x00000000  A5      : 0x00000000  
A6      : 0xa0000000  A7      : 0x0000000a  S2      : 0xffffffff  S3      : 0x00000004  
S4      : 0x40832c64  S5      : 0x40832c50  S6      : 0x420f4b4e  S7      : 0x00000000  
S8      : 0x00000008  S9      : 0x0000001b  S10     : 0xffffffff  S11     : 0x40832c64  
T3      : 0x00000000  T4      : 0x408330d0  T5      : 0x00000005  T6      : 0xd0000000  
MSTATUS : 0x00001881  MTVEC   : 0x40800003  MCAUSE  : 0x0000001b  MTVAL   : 0x00000000  
MHARTID : 0x00000000  
Backtrace: 0x4080fa4a:0x40832a60 0x40802370:0x40832a60 0x40802530:0x40832a90 0x40802606:0x40832aa0 0x40026868:0x40832ac0
Backtrace ended abruptly: cannot find DWARF information for instruction at address 0x40026868

読み解いて解決していきます。

姫野秀徳

組み込みエンジニアとしてメーカー勤務10年。
第二種電工事士、基本情報技術者、Code.org認定教師。
microbitを用いた電子工作&プログラミング教室を開校。
組み込み開発の実際を発信するyoutube活動も行う。

姫野秀徳をフォローする
組み込みオンライン学習システム"クミタテ"を作っています クミタテを見る

大事なところ

Detected in task "ntp_task"
Stack pointer: 0x40832a60
Stack bounds: 0x40832a8c - 0x40833a80

が重要で、計算すると

SP     = 0x40832a60
下限 = 0x40832a8c

なので、SP が下限より 44byte も下になっています。
つまりかなり高確率でスタックオーバーフローだと分かります。

解決方法

タスク生成時にスタック容量を決めることができるので、増やします。

元々
    xTaskCreate(ntp_task, "ntp_task", 4096, NULL, 5, &ntpTaskHandle);
↓
修正
    xTaskCreate(ntp_task, "ntp_task", 8192, NULL, 5, &ntpTaskHandle);

これによって、スタックオーバーフローがなくなり、問題なく動作するようになりました。

まとめ

Stack protection faultが出たら、指摘されたタスクの容量を増やす

この内容が良いと思ったら、いいね💖を押して教えてください!

組み込みオンライン学習システム"クミタテ"を作っています クミタテを見る
組み込み機器
シェアしていただけると嬉しいです!

コメント

タイトルとURLをコピーしました