- ベストアンサー
C言語のソースコードからどのようにメモリ領域を使用しているのかを図で説明してくれるソフト
私はプログラミング初心者なのですが、以前プログラミングについて詳しい方に、どのようにしたら他の方が作成されたプログラムを解析していったら良いのかということを相談したところ、まずプログラムで宣言されているポインタなどの使い方などから、メモリ領域の使い方を読み取り、それを図にまとめるなどしてメモしていった方が良いという助言をいただきました。 いろいろとポインタなどについて参考になるWEBサイトなどを参照していったのですが、ポインタの書き方などが様々なものがあるということを知り、困っています。ただ、eeprom領域のメモリを電源を入れた際にCPUがそれをSRAM領域に呼び出して、関数がそのSRAMを見に行っているという感じは何となくわかるのですが、頭がごちゃごちゃになってしまい難しいです。 ただ、メモリ領域をその方がどのように使おうとしたのかでもわかれば何となくそのプログラムを読み解くことができるようになる感じがするのですが、ポインタなどからそれをグラフィック表示してくれるようなフリーソフトなどはないでしょうか? どなたかご存じの方いらっしゃいましたらご教授お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 現在マイコンのH8S2368を使った組み込み系の開発を行っており、 > 開発環境では日立開発環境のHEWを使用しています。 では、mapファイルを見るのがベストな選択肢だと思います。 mapファイルは、Debugディレクトリの中にできていると思いますので探してみてください。テキストファイルですのでエディタからでもメモ帳からでも開けます。中身は例えばこんな感じになっています。 *** Mapping List *** SECTION START END SIZE ALIGN DVECTTBL 00000000 0000000f 10 4 DINTTBL 00000010 000003ff 3f0 4 PIntPRG 00000400 000005a3 1a4 4 PResetPRG 00000800 0000083b 3c 4 P 00001000 00007d87 6d88 4 C 00007d88 00008217 490 4 (以下省略) SECTIONというのは、プログラム領域やデータ領域など、メモリの使われ方に名前を付けたものです。HEWが自動的に作るセクション以外に、ユーザが自分でセクションを作ることもできます。 参考: http://monoist.atmarkit.co.jp/fembedded/h8/h8primer05/h8primer05b.html グローバル変数や関数がメモリ上のどこに配置されるか知りたい場合は、HEWでプロジェクトを開き、 [ビルド] -> [SuperH RISC engine Standard Toolchain] -> [最適化リンカ] -> [カテゴリ:リスト] からシンボル情報のチェックボックスにチェックを入れてビルドすると、シンボル情報としてグローバル変数や関数の先頭アドレスがMAPファイルに出力されます。 このように、MAPファイルを見ればメモリ領域の使われ方が分かります。 HEWを使っているのでしたら、すでに MAP View というツールもHEWと一緒に(自動的に)インストールされていると思います。それを使えばエディタよりは多少マシにMAPファイルを表示してくれます。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
>グラフィック表示してくれるようなフリーソフトなどはないでしょうか? ソースコードを読み込んで自動で図解するソフトが作れたら、たぶん、そのソフトで一財産稼げると思う。たぶん、一生遊んで暮らせるだろうね。 とゆ~訳で、そんな安直なソフトは、まだ存在しないと思います。 もしあったとしたら「爆発的に世界中に広まって、誰もが使ってる」でしょう。 もし「ある」と仮定した場合、既に貴方の勤務先で使われている筈です。 しかし、貴方の勤務先には、そんなソフトは使われていません。 つまり「あると仮定したのが間違い」な訳で「存在しない」と言う結論に至ります。
お礼
回答ありがとうございました。 なかなか私の質問って結構おもしろいことなのですね。あると便利なものだということがよくわかりました。
- php504
- ベストアンサー率42% (926/2160)
環境はなんでしょうか 自分の書いたプログラムでもコメントがないと解析不能になることがあるので他人のプログラムでコメントなしだと解析はかなり難しいですね
お礼
回答ありがとうございます。現在マイコンのH8S2368を使った組み込み系の開発を行っており、開発環境では日立開発環境のHEWを使用しています。 プログラムの方なんですが、あまりコメントが書いていません。という状況です。
お礼
ありがとうございました。 HEWでプロジェクトを開き、 [ビルド] -> [SuperH RISC engine Standard Toolchain] -> [最適化リンカ] -> [カテゴリ:リスト] からシンボル情報のチェックボックスにチェックを入れてビルドすると、シンボル情報としてグローバル変数や関数の先頭アドレスがMAPファイルに出力されます。 これをやってみたところ、変数や関数のアドレス番号が出てくるようになりました。大変便利ですね。