Call Walkerによるスタック使用量の算出方法について

RX & CubeSuite+ & RI600V4の環境で開発しております。

Call Walkerを使用してシステムスタックとユーザスタックの使用量を算出しようと思い、ルネサス提供の資料「RI600V4 V1.01.00 ユーザーズマニュアル コーディング編」の\”スタック使用量の算出\”を参考にしております。

ユーザ・スタック使用量の算出において、
「treesz タスク開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)」とありますが、これはどこの数字のことを指しているのでしょうか?

左Window\”呼び出し情報ビュー\”のツリー上でタスク開始関数の横に表示されている数字のみをさしていますでしょうか?もしくはツリーにぶら下がる関数全ての数字を合算したものでしょうか?!
(左Window\”呼び出し情報ビュー\”のツリー上でタスク開始関数をクリックすると、右側Window\”シンボル詳細ビュー\”にもStack Sizeという項目もあるので、ひょっとしてこれを指しているのでしょうか?!)


初めてCall Walkerを使用するので、使い方、詳しい見方が分からず困っております。
ご存知でしたら、どこをみたらよいかご教授願いたく思います。
よろしくお願いいたします。
  • こしひかりさん、こんにちは。

     魚返如水と申します。

     Call Walkerを使ったスタックサイズの算出法に
    関しまして、私の師匠のルネサス研修センターのK
    先生の受け売りですが、ご参考情報をご紹介します。

     【例外処理を含めたシステム全体のスタックサイズ】

     システム全体のスタックサイズ =

         Σ 各割り込みレベルの最大スタックサイズ
       + 一般例外事象とTLBミス例外の
                   最大スタックサイズ
       + NMI割り込み要求のスタックサイズ
                     × 最大ネスト数

     となります。

     【Call Walkerの解析ウィンドウ】

      Call Walkerを起動して、スタック解析結果の
     ウィンドウ表示をしますが、左側のウィンドウの
     一番上に表示されている『MAX』はそのままでは
     システム全体のスタックサイズを示していません。

     解決方法は、
     (1) 手計算でシステム全体のスタックサイズを
       計算する。
     (2) 左側のウィンドウで、各割り込みレベルで
       最もスタックサイズを必要とする経路を
       ドラッグ&ドロップで繋ぎ合わせて、スタック
       解析ツールにシステム全体のスタックサイズを
       表示させる。(この場合、MAXの数値が正しく
       システム全体のスタックサイズを表示)

     となります。

      参考文献ですが、
     オーム社:SuperHファミリのCプログラミング
           著者: 鹿取祐二先生
      ISBN 978-4-274-20594-1
    ( page 139 - 146 )
  • LunaJamと申します。

    魚返如水さんの通りで良いと思いますが2点ほど注意することがあります。

    1.割込スタックが別な場合
     RXやR8/Cでは割込時専用のスタックを使うことができると思いますがこの場合、それぞれ別個に合計してチェックする必要があります。

    2.関数ポインタを使用している場合
     そうしょっちゅうあることではないと思いますが関数ポインタを使った処理があるとソースコードから追跡できないのでその処理先の関数について最大値を加算する必要があります。
     この場合、トップレベルにCall先の関数が出ているのでわかると思います。

    自分の場合、こういう判断をしていますがどうでしょうか? 諸先輩方。
  • エビスクラウンと申します。

     当初の質問にありましたCall Walkerのスタックサイズの見方ですが、左Window\”呼び出し情報ビュー\”のツリー上でタスク開始関数の横に表示されている数字が、その経路を実行するのに必要なスタックサイズです。
     つまり、この数値がユーザ・スタック使用量の算出において、「treesz タスク開始関数を起点とする関数ツリーで消費されるサイズ(Call Walker表示サイズ)」となります。

     なお、使われているのがRI600V4のリアルタイムOSを使われていますから、他の方の投稿のような単純計算にはなりません。リリースノートの記載されているRTOSが使用する固定値等を加算しなければなりません。
     さらにタスクのスタックではなく、システムスタックの算出は更に複雑なものとなります。タイムイベントハンドラの使用分やサービスコール使用分を加算しなければなりません。
     マニュアルではα、β等を使った公式形式で説明されており、少々厄介です。大変ですが、これを保証しないと動作保証が出来ませんから頑張ってください。
  • 返信いただいた皆様、大変ありがとうございます!
    お礼および返信が遅くなりまして、大変申し訳ございません。


    >魚返如水さん

    Stack Size計算方法およびCall Walkerの解析ウィンドウの見方について、たいへんありがとうございます。

    ご教授いただいた方法を参考に算出したいと思います。

    またよい参考書までお教えいただき、ありがとうございました。
    早速購入して勉強してみたいと思います。

    また何か分からないことがありましたら、よろしくお願いいたします。


    >LunaJamさん
    算出に関しての注意点をお教えいただき、たいへんありがとうございます。
    Stack Size算出の際に、参考にさせていただきたいと思います。
    また何か分からないことがありましたら、よろしくお願いいたします。



    >エビスクラウンさん
    Call Walkerの詳しい見方、大変ありがとうございます。
    呼び出し情報ビューツリーでのStack Sizeの見方が理解できました。ありがとうございます!

    またたしかに当方はRTOSを使用しておりますので、ご指摘いただいたようにリリースノートに記述のある算出式によって算出いたすように致します。
    また何か分からないことがありましたら、よろしくお願いいたします。