インタフェースのSH2おまけ 9 HOS-V4を入れたぞ [RX&SH&H8]
Interface付属基板のデバックモニタのワークスペースに、HOS-V4のカーネルライブラリと、サンプルプログラムを同梱して、アップデートしました。
これを機に、SH2でHOS-V4なんて如何ですか!!。
ワークスペースのhosv4shフォルダがカーネルライブラリ、hos_v4フォルダがサンプルプログラム。
ただし、SHCのバージョン7.1.3で作成している関係で、それ以外のバージョンのツールチェインを使用している方はカスタムビルドフェーズに修正を入れないと、コンフィギュレーションが正常に終了しません。
興味が有るけれどカスタムビルドフェーズの修正の仕方が判らない人は、コメントにどうぞ!。
んで、ITRONに興味が出たら、左の本のリンクの「ITRONプログラミング入門」を宜しくお願いします。
カーネルを作り直したので、アーカイブを更新しました。
4月30日のお昼前にダウンロードした方は、良ければ落とし直してください。
2006-04-30 04:29
nice!(0)
コメント(15)
トラックバック(1)
はじめまして。 HOS-V4 をSH7149上で動かそうとしているのですが、カスタムビルドフェーズのPreConfigureのところで「C3321 (F) Illeagal environment variable」というエラーメッセージが表示されてしまいます。コンパイラは shc ver 9.1.1です。
カスタムビルドフェーズの修正方法を教えてください。
by とみやま (2008-05-03 17:23)
PreConfigureは本の中では、system.cfgにプリプロセスを掛けるビルドフェーズです。
エラー番号からshcでプリプロセスを掛けているのかと思いますが、
C3321のエラー番号の解説をご覧頂ければ判るように、環境変数に関連するエラーとなっています。
実はshc.exeは単体のプログラムではなく、shcから色々な実行ファイルが呼ばれてコンパイルが行われます。
つまり、もしshcでプリプロセスを行う場合、環境変数をきっちり設定した上でshc.exeを呼ぶ必要が有ります。そうしないと、shcから呼ばれるプログラムを見付ける事ができません。
ならWindowsの環境変数を設定すれば解決か!とも思いますが、どうもビルドフェーズではWindowsの環境変数を引き継がない様に思えます。
このビルドフェーズでは、とりあえずプリプロセスさえ行えれば良いので、色々解決方法はありますが、単体でプリプロセス可能なコンパイラを持ってきてやってしまうのがお手軽です。
元ボーランドのコードギアのBCC55(無料です)を持ってきてインストールしてしまうと、コンパイラ以外のツールも付いて来て、”ついで”にWindowsプログラミングもできてお得です。
http://www.codegear.com/jp/downloads/free/cppbuilder
※FAQの中のPATHの設定項目も読んで下さい。
http://dn.codegear.com/jp/article/33545
by hamayan (2008-05-03 22:14)
hamayanさん、早速のコメントありがとうございます。
お察しのとおり、shcのプリプロセッサを使おうとしました。shcコンパイラのマニュアルも目をとおしており、環境変数SHC_LIBが統合開発環境(HEW)で正しく設定されていることも確認済みなのですが、shcから呼び出されるプログラムがどうなるかまでは気が回りませんでした。
プリプロセスさえ通ればよいということでしたら、とりあえず私の手元にあるVisual Studio 2005やGCCで通るか試してみて、ダメならBCCを入れてみようと思います。
by とみやま (2008-05-04 13:13)
暫定的ながら報告します。BCCをダウンロードして、プリプロセッサ cpp32 を使ってPreConfigureを通し、その後Configureに成功して kernel_cfg.cとkernel_id.hが生成されることを確認できました。
少し手間取った点をまとめておきます。
PreConfigure時、cpp32に渡すオプションは
-P- system.cfg -o$(PROJDIR)system.i
としました。
この-P-を入れないと、cpp32が吐き出す system.i にソースファイルの行番号が含まれてしまい、次工程(Configure)で hos4cfg.exe がsystem.i の解析に失敗してしまいます。-P-とすることで、デフォルトオプションの-P を抑制する必要がありました。
サンプルプログラムがsh7045用ですので、7149用に書き換えて動くようになるにはもう少しかかりそうです。
by とみやま (2008-05-04 19:37)
> この-P-を入れないと、
実はリリース1.01の頃は日立コンパイラ用のプロジェクトフォルダーも入っていたのですが、現在のリリース1.02からは削除されてしまいました。
リリース1.01にはsh2htc.makと言うMakeファイルが存在し、その中では以下の記述が含まれていました。
-----------------------------
INCS = kernel_id.h sample.h sci.h
CC = shc.exe
CPP = cpp32 # BC55 のプリプロセッサを利用
ASM = asmsh.exe
LNK = lnk.exe
CNV =
CFLAGS = -CPU=SH2 -INCLUDE=$(INCSHDIR),$(INCDIR)
CPPFLAGS = -P-
AFLAGS =
途中略しています
kernel_cfg.c kernel_id.h: system.cfg
$(CPP) $(CPPFLAGS) -osystem.i system.cfg
hos4cfg system.i
-----------------------------
これを見れば、ビルドの過程が一発で判るのですが。
7149は新しいシリーズですね。
おお!これは割込み番号227まで使っているのですか、でかいなぁ。
ですが、以前7125のプロジェクトを作成した事があり、それがこのページの中で公開しております。
http://hamayan.blog.so-net.ne.jp/2008-02-22-2
プロジェクトファイルのリンクは多分これです。
http://hamayan.ddo.jp/~hamayan/so-net/archive/hosv4r102.zip
7045から7149のプロジェクトを作成する場合、変更が必要な所はCPU依存部のみです。※周辺IOの初期化等は抜かしています。
依存部はsrc/sh/sh2ht以下の二つのファイルですので、これを入れ替えてしまえば7149でも使用できると思います。
by hamayan (2008-05-04 22:23)
> 変更が必要な所はCPU依存部のみです
嘘です!。
あと、vector.srcも変更が必要です。
まあ何にせよ、一度面倒でも作ってしまえば、後は使い廻しが出来ると思います。
by hamayan (2008-05-04 22:35)
SH用のHEW版サンプルプロジェクト、ありがとうございます。手元にアルファプロジェクトのSTK-7125があったのでこれで動かしてみようとしていますが、またまた壁に突き当たっています(>_<;)
そこで質問なのですが、コンフィグレーション後に構築した hosv4.libの大きさが396KB(Relaseモード、最適化方法:サイズ優先)というのは、適切なのでしょうか?
私はルネサスの評価版ツールを使用していますが、60日を過ぎたせいでリンクサイズの制限に引っ掛かっているのではないかと考えています。hosv4.libのサイズが大きいために使用制限に引っ掛かっているのだとすれば、libファイルにするのを止めるなり、OSを諦めるなり、次の手を考える必要がありそうです。
by とみやま (2008-05-06 16:12)
たびたびすみません。 先ほどの書き込み、何度か編集しているうち話が飛んでしまいました。
1.サンプルプログラムをCPUにダウンロードしても動かなかった。
2.MAPファイルを見たところ、シンボルの割り付けができていなかった。
3.その理由が、評価ツールのリンクサイズ制限になるのではないかと思った。
という意味です。 hosv4r102.zip のセクション割り付けは7144 + 外部RAM用っぽかったので、これは私のほうでsh7125用に書き換えています。細かい話は
http://mobile-robots.way-nifty.com/daily_report/
の5/6付に書きました。
by とみやま (2008-05-06 16:18)
> hosv4.libの大きさが396KB
特に問題のあるサイズではないですね。私の物もそのくらいのサイズです。
ライブラリは単にobjを固めたものなので、HEWのサイズ制限には引っかかりません。
アプリケーションを作成したとき、そのサイズがリンカーで計算されますが、この時256Kbyteを超えると、制限が掛かるのだと思います。
> MAPファイルを見たところ、シンボルの割り付けができていなかった。
多分ビルド中に何らかのエラーが発生していたのだと思いますが、その内容が判れば。
by hamayan (2008-05-06 16:34)
早いコメントありがとうございます。<あまりの早さにびっくりしました(笑)
アプリケーションのビルドメッセージは次のとおりです。
--- ここから ---
Building - sample01 - Debug
Phase PreConfigure starting
Borland C++ Win32 Preprocessor 5.5.1 Copyright (c) 1993, 2000 Borland
system.cfg:
Phase PreConfigure finished
Phase Configure starting
Phase Configure finished
Phase SH C/C++ Library Generator starting
New compiling
Runtime compiling
Phase SH C/C++ Library Generator finished
Phase SH C/C++ Compiler starting
E:\home\****\hosv4r102\sample01\crt0.c
E:\home\****\hosv4r102\sample01\dbsct.c
E:\home\****\hosv4r102\sample01\kernel_cfg.c
E:\home\****\hosv4r102\sample01\sample01.c
Phase SH C/C++ Compiler finished
Phase SH Assembler starting
E:\home\****\hosv4r102\sample01\vector.src
Phase SH Assembler finished
Phase OptLinker starting
License has expired. Maximum link size limited to 256KB code+data.
Phase OptLinker finished
Build Finished
0 Errors, 0 Warnings
--- ここまで ---
これを見て、リンク時にサイズ制限がかかっているのではないかと考えました。
by とみやま (2008-05-06 16:46)
ああ、問題が判りました。
そもそも参考として用意したプロジェクトですが、ターゲットには7145を使用し、それもRAM上で動かすセクションの設定をしています。
セクションがRAM上にオブジェクトを作成する設定なので、ROM領域はALL Fになっていたのでしょう。
7125云々の話は、pacint.srcがオリジナルのHOS-V4から拡張されているので、カーネルライブラリに関しては7125(7149)にもそのまま使えますという話なのです。
現在のワークスペースに新たにプロジェクトを追加して、7125や7149のサンプルを作成してみてください。
※vector.srcも7145用なので、こちらも修正が必要です。
by hamayan (2008-05-06 17:03)
7125の構築に関しては以下のページとか、
http://hamayan.blog.so-net.ne.jp/2006-11-27
私のページで7125をキーワードに検索を掛けてみてください。
by hamayan (2008-05-06 17:11)
頂いたサンプルは、7145+RAMで動かすものなのだということはセクションの設定を見て気付きました。ですので、今は7125に合わせて次のようにセクションを割り当てています。
Address Section
--------------------
0x00000000 VECT
0x00001000 P,C,C$BSEC,C$DSEC,D
0xFFFFA000 B,R
panicint.src の話は、hamayanさんが以前書かれた、http://hamayan.blog.so-net.ne.jp/2006-11-27 の話がすでにサンプルで修正済みであるもの理解しております。
vectorはまだ手をつけていませんが、ベクタの最後はVECT + H'300程度のようですので、サイズには関係ないものと思います。パワーオンリセットの後にある_STACK_END の意味がよくわかっていません。
by とみやま (2008-05-06 17:30)
_STACK_END は、リセット時のスタックポインタのアドレスですね。
今わかりました。
by とみやま (2008-05-06 17:33)
http://hamayan.blog.so-net.ne.jp/2006-11-27 と、sh7125のハードウェアマニュアルを見ながら、vector.src, crt0.c, sample01.c, system.cfg をsh7125用に修正を入れてみました。(今頃気づきましたが、iodefine.h も7125用のものに差し替えました。)
MAPファイルにシンボルが表示されなかった理由は、HEWの最適化リンカの設定で、リンケージリスト出力内容からシンボル情報が漏れていた、という落ちでした。どうもすみません m(_ _)m
JTAG-ICEでROM領域を読みだしたときにALL FFFFFFFFというのは、JTAG-ICEとCPUでkey codeが合っていなかったため、ROMの中身を全部消されてしまったことによるものだと考えています。key codeを合わせたら書き込んだ内容を正しく読みだせるようになりました。
現在、sh7125が動きだしてから異常処理関数 halt に飛ぶところまでJTAG-ICEで確認できていますので、あとは自力で何とかなりそうです。sh7149上でHOS-v4が動き出したらまたご報告に上がります。
アドバイスどうもありがとうございました。
by とみやま (2008-05-06 23:28)