T-SH2MB用デバックモニタ上のユーザーアプリの作成 [RX&SH&H8]
ユーザープログラムの作成
デバックモニタでは、ユーザープログラムのロード、メモリダンプ、メモリフィル、逆アセンブル、ソースレベルデバック、周辺I/Oの操作、ブレークポイントの設定、ステップ実行、変数watchなど等が出来るわけですが、実行中の変数やメモリの内容を見る事はできません。
必然的にユーザープログラムの中に、変数やメモリの内容を出力する、いわゆるprintfデバックも併用する事になるでしょう。
実は「LOWER.C」の中では、デバックモニタで開いたSCI1を入出力とする低レベル入出力関数”write”と”read”が用意されており、これを使って標準入出力を実現しています。
もっとも利用頻度が高いであろう”printf”と”scanf”がライブラリからモニターにリンクされますので、デバッカー上のユーザープログラムからこれら関数を利用可能となっています。
※ただし、ユーザープログラムにリンクされる訳ではないので、いくらユーザープログラムのソースコードの中に「stdio.h」をインクルードしても、ビルドの段階でリンカーに怒られてしまいます。
結局リンカーは”printf”や”scanf”が一体何処に在るのか判らん!と怒っているのですから、デバックモニタに組み込まれた”printf”や”scanf”の位置を教えてあげる事で解決できます。
以下の一文をstdio.hの代わりに記述します。
#define scanf ((int (*)(const char *,...))0x0000581c)
#define printf ((int (*)(const char *,...))0x000057e0)
では早速ユーザーアプリケーションを作成してみます。ソースコードはこれです(;^_^ A フキフキ。
#define printf ((int (*)(const char *,...))0x000057e0)
void main(void)
{
printf( "Hello World\n" );
while( 1 ) ;
}
プロジェクト生成する時のパラメータを書いて置きます。
1.いきなり”main”関数からスタートさせる為に、リンカーのエントリーポイントは”_main”を指定して置きます。
2.セクションは"P"と"C"のみで構いません。
3.このプログラムのスタックポインタも指定しないで置きます。その場合、デバックモニタが適当な値をスタックポインタに設定します。
4."D"セクションの初期化も、"B"セクションのゼロクリアも、"D"セクション"R"セクション間コピーも、必要在りませんね。「dbsct.c」はリンクしなくても構いません。
5.ロードアドレスは、USERセクションが開始する0xFFFFE160として置きます。
デバックモニタ上で実行させた結果が以下です。
※以上、デバックモニタ上で動作するユーザープログラムの作成終了!。
SuperHで学ぶμITRON仕様OS―リアルタイムOSの動作原理と実装法がわかる!
- 作者: 鹿取 祐二
- 出版社/メーカー: 電波新聞社
- 発売日: 2005/12
- メディア: 単行本
英語版?
コメント 0