SSブログ

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の動作原理と実装法がわかる!

SuperHで学ぶμITRON仕様OS―リアルタイムOSの動作原理と実装法がわかる!

  • 作者: 鹿取 祐二
  • 出版社/メーカー: 電波新聞社
  • 発売日: 2005/12
  • メディア: 単行本


英語版?

32‐bit SuperH Microcomputers

32‐bit SuperH Microcomputers

  • 作者: Yukiho Fujisawa
  • 出版社/メーカー: オーム社
  • 発売日: 2005/02
  • メディア: 単行本


T-SH2MB用デバックモニタの作成 [RX&SH&H8]

ルネサスのサイトから「半導体セミナー」→「サンプルプログラム」と進み、注意事項をよく読み、内容に納得した上で先に進むと、「サンプルプログラム」の中に「SuperHファミリ」が在りますので、ここから先に進み、お使いのSHCコンパイラバージョンに合わせたSH2用モニタプログラムをダウンロードします。

自己解凍式実行ファイルである「sh2hew3.exe」をダブルクリックして、任意のフォルダーに解凍を行います。

解凍先のフォルダーの中の「monitor.hws」をダブルクリックすれば、HEWが起動してワークスペースが開きます。
コンパイラバージョンがちょっとでも異なると色々聞いてきますが、自信を持って(笑)先に進んでください。この程度で怯んでいては、今後のバージョンアップに耐えられません(*´ー`) 。

無事ワークスペースが開いたなら、一旦ビルドを行っておきます。
この時このモニタプログラム専用ライブラリが生成される為に、最初のビルドでは時間が掛かりますが、これ以降は短い時間でコンパイルが完了するようになります。

さて、T-SH2MB専用にカスタマイズを行う必要がありますので、その手順に入ります。
HEWの左側のペインの中の「monitor.c」をダブルクリックするとエディタ上にソースファイルが開きますので、まず先頭から5行目のインクルードファイルを指定し直します。
T-SH2MBで使用しているマイコンはSH2/7145なので、グループとしては7144と言う事になります。
※グループとは、周辺IO等の配置や構成が一致しているマイコン群です。

修正前:#include "7040s.h"
修正後:#include "7144s.h"

次に関数「INITIALIZE」を、外付けRAMの配置に合わせて変更します。
このT-SH2MBはCS1領域の0x400000~0x5fffffまでの間の4Mbyteに32bitでバス接続されたSRAMが搭載されています。また、T-SH2MBのオプションによって変わって来ますが、基本構成では55nsのSRAMが接続されていますので、waitサイズは3とします。

#pragma noregsave(INITIALIZE)  /* Non Register Save    */
void INITIALIZE(void)                 /*                      */
{                                             /*                      */
  /*SCIで使用する端子が選択されていないので、ここでまず使用する端子の設定を行う*/
  PFC.PACRL2.BIT.PA4MD = 3;     /* PA4 is TxD1         */
  PFC.PACRL2.BIT.PA3MD = 3;     /* PA3 is RxD1         */

  /*BSCのBCRでCS1空間を有効に設定する*/
  PFC.PBCR1.BIT.PB8MD = 2;      /*A20を有効にする*/
  PFC.PBCR2.BIT.PB7MD = 2;      /*A19を有効にする*/
  PFC.PBCR2.BIT.PB6MD = 2;      /*A18を有効にする*/
  PFC.PBCR2.BIT.PB1MD = 1;      /*A17を有効にする*/
  PFC.PBCR2.BIT.PB0MD = 1;      /*A16を有効にする*/
  PFC.PCCR.WORD = 0xffff;        /*A0からA15を有効にする*/

  BSC.BCR1.BIT.A1LG = 1;         /*CS1は32bit空間*/
  BSC.BCR2.BIT.IW1 = 0;          /*CS1空間後のアイドルサイクル無し*/
  BSC.BCR2.BIT.CW1 = 0;         /*CS1空間連続アクセスアイドルサイクル無し*/
  BSC.BCR2.BIT.SW1 = 0;         /*CSアサート拡張有り*/
  BSC.WCR1.BIT.W1 = 3;          /*3wait*/
  PFC.PDCRH1.WORD = 0x5555; /*D24からD31までを有効にする*/
  PFC.PDCRH2.WORD = 0x5555; /*D16からD23までを有効にする*/
  PFC.PDCRL1.WORD = 0xffff;    /*D0からD15までを有効にする*/
  PFC.PDCRL2.WORD = 0x0000; /*D0からD15までを有効にする*/

  PFC.PACRH.BIT.PA23MD = 1;   /*WRHHを有効にする*/
  PFC.PACRH.BIT.PA22MD = 1;   /*WRHLを有効にする*/
  PFC.PACRL1.BIT.PA14MD = 1;  /*RDを有効にする*/
  PFC.PACRL1.BIT.PA13MD = 1;  /*WRHを有効にする*/
  PFC.PACRL1.BIT.PA12MD = 1;  /*WRLを有効にする*/
  PFC.PACRL1.BIT.PA11MD = 1;  /*CS1 出力PIN*/
}  /* Goto Monitor Program */

次は「monitor.sub」を変更します。以下の様にして置きます。

INPUT      SUPERH,MONITOR,LOWER
LIST       MONITOR.MAP
SHOW       SYMBOL
OUTPUT     MONITOR.MOT
FORM       STYPE
CHANGE     INFORMATION=1320
NOOPTIMIZE
LIBRARY    SUPERH,7144
LIBRARY    MONITOR
DEFINE     $BRR=13
DEFINE     $STACK=0
START      VECTOR/0,ROM,P,C/400,RAM/FFFFE000,USER/FFFFE160,SCI/FFFF81B0

1.INPUTで「LOWER.OBJ」を読むように指定しています。当然、プロジェクトファイルに「LOWER.C」を追加しておきます。

2.LIBRARYを7144に変更しておきます。

3.SCIのボーレートジェネレータの初期値を13(hex)にして置きます。38400bpsで通信します。

4.STARTセクション指定でCソースのセクションである”P”と"C"を”ROM”に続けて記述し、”RAM”や”USER”を内蔵RAM領域に割り当てています。
SCIの開始アドレスは、SCI1のレジスタの開始アドレスに合わせておきます。
外部に多量のRAMが存在しますが、なるべく内蔵RAMを優先的に使った方がお得です。
参考までにmap出力の割り付けを下記に掲載しておきます。

*** Mapping List ***

SECTION                            START      END         SIZE   ALIGN

VECTOR
                                  00000000  000002bf       2c0   4
ROM
                                  00000400  000057dd      53de   4
P
                                  000057e0  0000bdb3      65d4   4
C
                                  0000bdb4  0000c0c3       310   4
SCI
                                  ffff81b0  ffff81b5         6   4
RAM
                                  ffffe000  ffffe15f       160   4
USER
                                  ffffe160  ffffe160         0   4

これで設定は完了したので、ビルドを掛けてmotファイルを作成します。また同時に作成されるmapファイルの中身を見ますので、エディタでmapファイルを開いてください。

エディタで開いたmapファイルから関数名”printf”と”scanf”を探し出し、開始アドレスをメモしておきます。

FILE=printf
    000057e0  0000581b        3c
  _printf
    000057e0        3c   func ,g         * 
FILE=scanf
    0000581c  00005857        3c
  _scanf
    0000581c        3c   func ,g         * 

後は作成したmotファイルをターゲットに書き込み、通常モードで起動して、デバックモニタのクレジットが通信ターミナルを通して出力されるのを確認すればOKです。
※書き込みにはFDTを使用します。ターミナルソフトにはHTERMを使用します。



作成したデバックモニタ拡張子をjpgファイルとして登録していますので、右クリックでローカルに落とし、拡張子をzipに変更してから解凍して使ってください。

これならわかるSuperHマイコン

これならわかるSuperHマイコン

  • 作者: 藤沢 幸穂
  • 出版社/メーカー: オーム社
  • 発売日: 2003/02
  • メディア: 単行本


SuperHプロセッサのアーキテクチャ

SuperHプロセッサのアーキテクチャ

  • 作者: 藤澤 幸穂
  • 出版社/メーカー: オーム社
  • 発売日: 2006/06
  • メディア: 単行本


新・評価物3件 [RX&SH&H8]

思わぬ経緯から、TAC様(もしトラ技をお持ちなら、後ろの方のページのECN Trendの所を見てください)から左の3種類の基板を貸していただきました。
上から3枚の写真は、T104-H8Mと言う基板で、これは凄い。何が凄いって、裏も表もガッツリ部品が搭載、または搭載スペースが用意されていて、これ以上無いというくらい多機能な基板となっています。
電子工作でやってみたい事の上位10個まで搭載してみました!と言った感じです。
具体的には、マイコンはH8/300Hの3069Fをベースに、LAN、USBホスト機能、USBシリアル機能、バックアップ付きRAM、バックアップ付きRTC、82C55、SDカードソケット、PC104ソケット、キャラクタLCD。
裏に回って、CFカードソケット。
むうう、凄いことになっている。



続く2枚の写真は、T-SH2MBと言うSH2を搭載したマイコンボードです。
こちらも凄い事になっている。こちらはSH2/7145(7145は、インタフェースの2006年4月号の7144と同じ系列で、外部データバスが32bitまで拡張できる様になっている)、2Mbyteのバックアップ可能なRAM、2MbyteのFLASH ROM(マイコンの外付けね)、H-UDIインタフェース、SDカードソケット、LAN、PC104ソケット、USBホスト機能、FT245BM、バックアップ付きRTC、何故かCPLD(XC9572XL)。
もう、書くのが大変。



それで最後の2枚はT-SH7706LANと言うSH3を搭載したボード。
こちらの詳細は、SH3(SH7706 133MHz (128MHz動作))、256Mbytebit(そんなに有る訳無いか)のRAM、4MbitのFLASH ROM、LAN、SDカードソケット、H-UDIインタフェース、汎用I/Oポートです。
驚いちゃうのはその価格、7980円です。

最近は安価で高機能なマイコンボードが幾つか見受けられますが、そこそこ大きなメーカーや、デバイスメーカーの出すボードの場合、宣伝費も込めての価格で、そう言ったからくりが有るからこそ安く提供できたりしますが、TAC様のように純粋に製品で、安く提供しながらもちゃんと利益を上げる必要がある物ならば、この価格は驚きでしょう。

実際にボードを手にして、価格を下げる為のある工夫に気付いちゃいました。
知りたい方は購入してお確かめ下さい。



なんかBlog書いていて今日の作業は終っちゃいましたが、今後の作業はT-SH2MBから始める事となります。
まずはこのボード向けにカスタマイズしたデバックモニタを作成し、次にHOS-V4のインプリメント、その後LANの動作、で色々遊んでみる。

T-SH2MBの次はT104-H8M。こちらもT-SH2MBと同様の手順で行います。

最後はT-SH7706LAN。う~~~ん、実はSHはSH2しか開発した事が無いので、E10Aも持っていないし、どうやって開発するのか?から始まるな、これは。

※発売元のTACさんのサイトでは、T-SH2MBとT104-H8Mの販売価格が掲載されていないので、ぐぐってみると、若松で販売されていますね。
T-SH2MB:http://www.wakamatsu-net.com/cgibin/biz/pageshousai.cgi?code=38220003&CATE=3822
T104-H8M:http://www.wakamatsu-net.com/cgibin/biz/pageshousai.cgi?code=38220001&CATE=3822
しかしどちらも同じ価格で、特にT104-H8Mのコメントは明らかな間違いなのだけれど、大丈夫か???。
2万円ちょっとでSH2/7145Fが搭載された多機能ボードが購入できるなら、某付録基板が余っているからと言ってあの2万5千円のベースボードを購入しなくとも、、、。

SuperHで学ぶμITRON仕様OS―リアルタイムOSの動作原理と実装法がわかる!

SuperHで学ぶμITRON仕様OS―リアルタイムOSの動作原理と実装法がわかる!

  • 作者: 鹿取 祐二
  • 出版社/メーカー: 電波新聞社
  • 発売日: 2005/12
  • メディア: 単行本


SuperHプロセッサのアーキテクチャ

SuperHプロセッサのアーキテクチャ

  • 作者: 藤澤 幸穂
  • 出版社/メーカー: オーム社
  • 発売日: 2006/06
  • メディア: 単行本


28pinヘッダー、ソケットが入手できるようになりました。 [RX&SH&H8]

http://www.marutsu.co.jp/user/shohin.php?p=40323
これはアルファプロジェクトのSH/Tinyボード(STK-7125)で使用する為のヘッダー、ソケットです。
http://www.apnet.co.jp/product/tiny/index.html
お願いして取り扱ってもらいました。

SH/Tiny基板(STK-7125)の拡張でお悩みの方、是非どうぞ。


STK-7125用ピギーバック基板売り切れました [RX&SH&H8]

ピギーバック基板全部出ちゃいました。もう有りません(笑)。

DUAL INLINEの28pinソケットが見つからない場合、
http://akizukidenshi.com/catalog/items2.php?q=%22C-00653%22&s=popularity&p=1&r=1&page=
を2列並べるなんてのも有ります。


SuperHフォーラム [RX&SH&H8]

SuperH™フォーラムです。
去年も面白かったので、今年も参加しようかな、、、。
http://resource.renesas.com/lib/jpn/superh/forum/index.html?campaign=sh_mail


新規開発品 [RX&SH&H8]

久しぶりのルネサス。使ったのはH8/3069F。 相変らずAX88796BLFは熱い奴だ!。

マルツでもSTK-7125EVB販売開始 [RX&SH&H8]

商品紹介ページは以下からどうぞ。
http://www.marutsu.co.jp/user/shohin.php?p=40190

ターゲット上でデバックするのに便利なピギーバックアダプターの在庫有ります。
ピギーバックアダプタの紹介ページはここ。
http://blog.so-net.ne.jp/hamayan/2006-12-16

宜しくね!。

連絡はこちらまで


ルネサスが主催しているマイコンカーラリーの講習マニュアル [RX&SH&H8]

http://documentation.renesas.com/jpn/products/others/rjj99z0003_micon_crmn.pdf
むうう立派なドキュメントだ!。触りしか読んでいないんだけれどね、870ページも有るから。
落として保存してゆっくり読みますか。


ルネサス、SHコンパイラの効率の良いプログラミングのオンラインドキュメント [RX&SH&H8]

SHユーザーの方、ルネサスがまとめたSHコンパイラの使い方ドキュメントです。是非ご一読を。
http://documentation.renesas.com/jpn/products/tool/apn/rjj06j0017_shc_prog1_an.pdf

例えば上のドキュメントの一番最初の、1から50までの総和を求める問題を参照してみます。
改善前

int f(void)
{
  char a;
  int c = 0;
  for( ; a > 0; a-- )
    c += a;
  return c;
}


改善後

int f(void)
{
  long a;
  int c = 0;
  for( ; a > 0; a-- )
    c += a;
  return c;
}

ですが、SH2で比較した場合、コードサイズで18→16、実行サイクル数で353→303となっています。
ループ処理なので、ちょっとした改善でも大きく影響が出ますね。
また局所変数なので、charをlongにすれば、それだけスタックを消費する様なイメージが有りますが、これ位の変数の使用量なら、コンパイラはスタックではなくレジスタに変数を割り付けてしまいますので、スタックサイズにも変化は無い!とよい事尽くめですね。

面白いのはコードサイズでSH2は18→16byteでしたが、SH2Aは16→14byteです。一体何処を削ったのやら。

※コンパイラの使い方(最適なコードの書き方)まで色々情報を提供してくれるのが、ルネサスの良いところですね。セミナー担当の方、ご苦労様です。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。