初めましておいわと申します。
基板 :RX64MOS :RTOS開発環境:e2studio v6.2.0でプログラムを作成しています。
RTOSを使う場合、タスクの生成時にスタックサイズを設定する必要があるのですが適正なスタックサイズを見積もれるツールはありますでしょうか?(どれぐらいのスタックサイズを設定すればよいのか分からずに困っています)
また、特定のファイル(.cや.hなど)または関数レベルで使用しているROMのサイズを確認することはできますでしょうか?
以上、よろしくお願いいたします。
e2studioは初期の頃に試しにインストールして起動してみただけで、いろいろな事情でHEWもCS+もアンインストールしてます。マニュアルもすべてが揃ってはいないです。従って、未確認な曖昧な情報になります。 e2studioでもCCRXが起動すると思われます。CC-RXコンパイラユーザーズマニュアルを"Call Walker"で検索すると一か所だけですがヒットするのでCall Walkerに必要なデータをリンケージエディタは出力すると予想できます。コンパイラマニュアルだけでは良くわからないので、e2studioなど関連するマニュアルで"Call Walker"を検索してみるのが良いと思います。CallWalkerの使い方はSHコンパイラマニュアルに記述されてます。ちなみにSHコンパイラマニュアルでは"CallWalker"なので、ブランク有り無しの両方で検索する必要があります。 ROMサイズは個別にダミーのワークスペースでビルドしてマップファイルを見るのが設定も不要で手っ取り早いように思えます。
こんにちは
Call Walkerについては単独の資料も一応ありますのでご紹介しておきます。
https://www.renesas.com/ja-jp/search/keyword-search.html#q=Call+Walker&genre=document
上記の「Oct.01.09 Rev.2.00」でCall Walkerの使い方を説明しています。(他の2つはHEWに登録する方法の説明です。)
Call Walkerのインストーラは以下からダウンロードできます。
https://www.renesas.com/ja-jp/search/keyword-search.html#q=Call+Walker&genre=tooldownload
Call Walkerはコンパイラ(リンカ)が生成したスタック情報ファイル(*.sni)を利用するようです。
e2 studio ユーザーガイドによれば、e2 studioのスタック解析も同じファイルを利用するようですね。
kijoさんがおっしゃっているようにスタック情報ファイルを出力するリンクオプションはCC-RXにもありそうです。
Call Walkerは単独でも使用できそうですので、e2 studioのスタック解析結果と比較もできるかもしれませんね。
使ったことが無いので単に紹介するだけになりますが、以下のようなツールもあります。#2016年7月まではメンテされているようです。ご参考まで。
RI600PX メモリ容量見積もり
RI600V4 メモリ容量見積もり
高度なツールがありそうなので安心ですね、メモリーとかROM容量とか、CS+RL78では使用ROM容量とか使用RAM容量とかいうのを、コンパイル時に表示させることができるので、いつもそれを見ながら作業していました、「まだ総容量の30%しか使ってないから自由にできそうだ」とか、前にはそういうのが無い場合の方策としてソフトの実行時ハードウェアの情報コマンドを設けておいてスタック最大とか、メモリーリークとか表示させていました、原理は簡単で最初にRAMを0xFFで満たしておいて最終アドレスから0xFFでなくなるまでを空きと計算するというようなやりかたです、簡単な方法でもRAMやROMの実行時に確認はできると思います。RTOSの場合は領域が自由にできないので難しいのでしょうか?
じまさん
おいわです。ご回答ありがとうございます。
たくさんの貴重な情報を提供いただき、ありがとうございます。
Call Walkerは単独のアプリでも使えるのですね。
コンパイラ(リンカ)が生成したスタック情報ファイル(*.sni)を見つけて、読み込み表示することができました。
ただ、表示されている数字に関して理解できていないところがあるのですが、
関数名の隣に表示されているものがその関数が使っている最大スタックサイズで正しいでしょうか?
システムで使っている最大スタック量はここから何かしら計算する必要があるとの情報があったので、
関数においても何かしら計算する必要があるのではと思いました。
Call Walkerは静的なスタック最大使用量を算出するのみで、多重割り込みなど動的なスタック最大使用量を算出するには手動で計算する必要があります。以下FAQを参考にしてみてください。(見出しはCS+ですが内容はCall Walkerについて書かれています。)
FAQ 3000259 : CS+でのスタックの使用量の確認方法について (項目5.以降の記述)
以下FAQもありましたのでご紹介しておきます。
FAQ 3000280 : スタック見積もりツール Callwalkerに関する質問まとめ
URLを載せていただき、感謝です。ドライバ関係で割込みが使われているので手動計算してみたいと思います。
mainからsub1が呼び出されるとmainのスタックの上にsub1のスタックが確保されます。さらにsub1がsub2を呼び出すとsub1のスタックの上にsub2のスタックが確保されます。sub2が終了されて続けてsub3が呼び出されると、sub2が使っていたスタック分は開放されてsub1のスタックの上にsub3のスタックが確保されます。右側はsub1、sub2、sub3のそれぞれの関数のスタックサイズです。左側のsub1の()内は呼び出しを考慮してスタックを足し合わせたsub1+sub2とsub1+sub3の大きい方になります。
右側のsub1の28は関数sub1のサイズです。左側のsub1()内の552はsub1のサイズ28にsub11()内の524を加えたものです。
「関数が使っている最大スタックサイズ」の意味が違ったようですね。