HOSの入手
転送ソフト[h8write.exe]
kz_h8write を使用。
μITRON ver4の仕様書
コンフィグレータのビルド
HOSをダウンロードし解凍するとフォルダhos-v4が得られます。
hos-v4\documentのhos4cfg.txtを参考にし,コンフィギュレータのmakeを行ってください.
g++が必要になるため、g++がない場合、apt-getでインストールする。
$ apt-get install gcc3*
$ cd hos-v4/config
$ make -f gcc.mak
カーネルライブラリのビルド
HOSのカーネルをライブラリとして生成しておき、このライブラリをリンカから呼び出す方法を取る。
そのため、ここでカーネルライブラリのビルドを行う。
hos-v4/document/h83.txtを参考にし,ライブラリのmakeを行ってください.
h4h83.makの修正が必要。
「hms」を「elf」に書き換え
「メモリヒープ」の部分だけ、「/」が「\」になっていたので「/」に書き換え
gcc4のアンインストール
後述する h8300-hms-gcc のrpmパッケージインストールでファイル競合するため
こうするとgcc3が残る
サンプルプログラムのビルド
hos-v4/sample/h83 へ移動。
h83048.x をコピー&リネームして、適当に h83048_elf.x などとする。
これを開き、先頭部分の「OUTPUT_FORMAT("coff-h8300")」を、「OUTPUT_FORMAT("elf32-h8300)"」
に書き換える。
次にgcc.makをelf用に改造。
- 中身のhmsをelfに書き換える
- 中身の「リンカスクリプト」部分の「h83048.x」を「h83048_elf.x」
に書き換え、gcc_elf.makとする。
このあとで、
make -f gcc_elf.mak
これでsample.motが生成できるようになった。しかし、、
参考情報
リンカスクリプトとスタートアップルーチン
リンカスクリプトとはメモリーマップ上にデータは何処に置けるか、プログラムは何処に置けるか等を定義したロケート情報が入っている>ld(リンカ)のスクリプトです。オブジェクトにアドレスを振る(リンクする)際に必要となります。メモリマップはターゲットのCPUのプログラムメモリやワークメモリや外部メモリのアドレスやサイズによって変化するので、リンカスクリプトはターゲットのハード構成ごとに、作成する必要があります。
GCCではロケート情報をリンカスクリプトにすることでリンカがアドレスを解決します。GCCのリンカスクリプトの詳細な内容は以下の資料を参考にしてください。
↓Redhatの 組込みトップ > 組込み・ダウンロードのリンカスクリプト
http://www.jp.redhat.com/download/cygnus/doc/linker-scripts.pdf
スタートアップルーチンはCPUがプログラムを動かす上で最初に必要な動作が記述されているアセンブラソースです。具体的には、スタックポインタの初期化とかROMのデータをRAMに再配置とかmain関数の呼び出し等です。Cのプログラムはmain関数から始まりますが、プログラムはプログラムカウンタのリセット値(0である場合が多い)から始まるわけですから、プログラムカウンタの値をmain関数の位置にとばすプログラムも必要になります。main関数はさらに引数があるので、スタックが必要になります。だからmain関数を呼ぶ前にスタックポインタを初期化する必要があるわけです。
実はこの2つのどちらを使っても割り込みベクタを記述することが可能です。どちらに書くかはプログラマ次第です。gccコマンドはオプション-vを追加して
コンパイルするとコンパイルの各動作が表示されるので、コレを見ながら正しくコンパイルされているか確認します。
OSを用いる場合と用いない場合の比較
minicom の通信設定は以下?
38400 8N1
しかし、結局、シリアル通信まではできたが、00000:Task1を表示してとまってしまう問題が解決できず、hos-v4の使用をあきらめた(16.8.26)
最終更新:2016年08月28日 22:21