高田馬場の組み込みおやじ-電子工作、回路設計、ファーム TIPS

このブログは令和デバイス株式会社の菅原が、電気電子、電子工作、組み込みソフトウェアなどで、自分が苦労したところや面白い気づきなどを記事にしていきます。電子工作やマイコンに親しむ人が少しでも増えたらという思いでつづります。
やっぱり、電子工作が好きなんですよ。
<< CS+から Visual Studio Code でファイルを開く | main | 金メッキの厚さ、インチ、ミリ変換 >>
smalight-os のスタック確認
0

    JUGEMテーマ:組み込み開発

     

    随分前に開発して、この度ファームの修正をした基板。謎の暴走が頻発してしばらくハマった。

    原因はマルチタスクOSのスタックがあふれてて隣のタスクのスタック領域を破壊していたからだった。

     

    メモリがたっぷりあるマイコンシステムであれば、十分なタスクを用意すればいいだけの話だけど 15タスク動いていてメモリもかなりカツカツだったので、ひとつあたりのスタックが 300バイト程度しか確保していなかった。

    今回の変更で関数の引数が増えたり、コールする関数の深さがましていたので、いままで大丈夫だったスタックが溢れてしまっていた。

     

    このシステムは uItronライクの smalight-osを使っているので、この例だと

    knl_tcbsp を参照すると各タスクのスタック開始位置を確認できるので、これを元にスタックの確認をする。

    knl_tcbsp[].sp の値を確認して、そこのメモリを参照する。

     

    スタックリスト

     

     

     

    一般的には起動時にメモリを初期化して 0にしてあるので、どこまでスタックを使っているかは、0以外のところがどこまで伸びているかで一目瞭然

    たとえば TASK7 .. はknl_tcbsp[6].spなので 0x21a0 で、その上を確認すれば、どこまでスタックを使っているかはおおよそわかる。

     

     

     

    | 令和デバイス-菅原 | Renesas RXマイコン | 10:30 | comments(0) | - |









          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    << February 2020 >>
    + RECOMMEND
    + RECOMMEND
    + SELECTED ENTRIES
    + RECENT COMMENTS
    + RECENT TRACKBACK
    + CATEGORIES
    + ARCHIVES
    + つぶやき
    + MOBILE
    qrcode
    + LINKS
    + PROFILE