AKI-SH2/7045のCクロスコンパイラ環境でのはじめてのプログラミング
CYGWIN+GCC
Copyright(C)30Nov2002
coskx
A YAMASHITA
1.はじめに
この文書は,Windows2000パソコンにAKI-SH2/7045のC言語クロスコンパイル環境での,コンパイル作業のための方法を記述しています。あらかじめ指導者あるいはパソコン管理者が構築したC言語クロスコンパイラ環境で,C言語によるSH2/7045プログラミングを学ぼうとする方がプログラミングを行ない,AKI-SH2/7045でプログラムが動作するまでを解説します。C言語のプログラミングについては別の文書で学んでください。
図1.1 AKI-SH2/7045とマザーボード(山下) 電源部,LED部,Write-Runスイッチは独自仕様 マザーボード拡張は以下の通り |
本文書で記述してある作業の特徴
Cプログラムソースファイルが出来上がったら,windowsのドラッグ&ドロップでコンパイルしフラッシュメモリ書き込みする手順。
前提
(1)Cygwinのシステムがc:\cygwinに導入されているものとします。「C:\cygwin\bin」に「cygwin1.dll」があること。
(2)gccの環境が整い,「sh-hms-coff-gcc」「sh-hms-coff-objcopy」が利用できるようになっているものとします。「C:\cygwin\usr\local\sh\bin」に置かれているものとします。もし設定が異なっていたら,コンパイル用コマンド「H8gcc.cmd」をカスタマイズします。
(3)コンパイル用コマンドは「各作業ファイル」に入っているものとします。
(4)転送ソフト「h8write.exe」を利用します。ご自身でダウンロードして,gccコンパイラと同じフォルダに入れてください。
●転送ソフト「h8write.exe」はみついわゆきお氏のオープンツールです。次の場所から入手できます。
http://mes.sourceforge.jp/h8/writer-j.html
注意
この文書で扱っているshgcc.cmdはWindows2000,WindowsXP,WindowsVista,Windows7で使用可能です。
残念ながらWindows95/98では動作しません。
コンパイラ群の名前やインストールフォルダ名が異なる場合は,使用者の責任において「shgcc.cmd」を変更してください。
SH2-7045マニュアルを読む時の注意
マニュアル中に「Aマスク」という表現が出てくるが,SH2-7045はAマスク製品である。
(検索キーワード Aマスク,Aマスク)
2.プログラムの作成から実行まで
シングルボードマイコンAKI-SH2/7045内で動作するプログラムはパソコン上で開発され、シングルボードマイコンAKI-SH2/7045にフラッシュメモリ書き込みされます。パソコンで開発されるソースプログラムはC言語で記述され、クロスコンパイラにより、オブジェクトプログラムに変換され、最後はダウンロード形式(xxxxxx.mot)になります。
シングルボードマイコンAKI-SH2/7045を動作させるまでの大きな流れは以下のようになります。
(1)パソコン上で作業用のフォルダの用意
(2)パソコン上でCソースプログラムの作成
(3) パソコン上でダウンロード形式ファイル(実行プログラム)の作成(クロスコンパイル、コード変換)
(4)パソコン上の転送ソフトによる,ダウンロード形式ファイル(実行プログラム)のAKI-SH2/7045への書き込み操作
これら四つの作業によりシングルボードマイコン内で動作させることが出来ます。
3.テンプレートフォルダの実行
(1)図3.1に示すテンプレートフォルダでの実行の様子を確かめてみよう。テンプレートフォルダのダウンロードは 「 ここ 」 です。
図3.1 小坂のテンプレートフォルダ
このテンプレートの内容は次の通り
ファイル | 内容 |
7040S.H |
SH7045のレジスタのアドレス配置ヘッダファイル |
sh_7045.h | 小坂の標準ヘッダ |
shgcc.cmd | コンパイルコマンド |
startup.s | スタートアップルーチンアッセンブリソース |
romsh7045.x | リンカスクリプト |
xxxxxx.c | Cプログラム |
to_H8.ht | ハイパーターミナルファイル(ダブルクリック |
(2)テンプレートフォルダがダウンロードできたら,解凍し,「xxxxxx.c」の内容をエディタで確かめてみてください。
プログラムは,AKI-SH2/7045拡張マザーボード上のLEDを点滅させるものです。プログラムの内容には深入りしないことにしましょう。
リスト プログラムソースファイル"xxxxxx.c"
#include "7040S.H" //IOポートアドレス定義
#include "sh_7045.h" //基本関数群 sh_7045.hの先頭に説明がある
void msecwait(int msec)
/*msec間なにもしない時間稼ぎ関数*/
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<9450;j++); /*9450は実測によって求めた値*/
}
}
int main(void)
{
initLed();
while(1){
turnOnLed(0); /*LED0の点灯*/
turnOffLed(1); /*LED1の消灯*/
msecwait(500);
turnOnLed(1); /*LED1の点灯*/
turnOffLed(0); /*LED0の消灯*/
msecwait(500);
}
}
(3)この後の作業は次のようになります。
ただし,図3.1のテンプレートフォルダは「デスクトップ」あるいは「マイドキュメント」の中にあるとします。
表3.1 フラッシュメモリ書き込み形式ファイルの作成とROMライター書き込み操作から実行までの手順
パソコン側 |
マイコンSH2/7045側 | |||||||||
(1) |
|
<1>AKI-SH2/7045のマザーボード上の電源スイッチをOFFにします。 | ||||||||
(2) |
「xxxxxx.c」を「shgcc.cmd」にドラッグ&ドロップする。 「h8write」を表示して止まるようであれば,シリアルケーブルの結線あるいはスイッチや電源が異常 「h8write この時,次のようなファイルができます。
|
|||||||||
(3) |
<1>転送が終了したら、AKI-SH2/7045のマザーボード上の電源スイッチをOFFにします。 |
(4)ここまでの作業が順調に出来ていたら,AKI-SH2/7045マザーボード上の2つのLEDが点滅して動作が確認できるはずです。
4.新規プログラムの開発手順
4.1 パソコン上で作業用のフォルダの用意
テンプレートフォルダの複製を作ってフォルダ名をled00と,xxxxxx.cのみ消去し,新しいファイルled00.cを作成します。
4.2 プログラムの作成
Windowsマシン上のエディタ上で、C言語で記述されているソースプログラムを作成します。
例えばled00.cを作るという仮定で以下の説明にはいります。リストにあるファイルを作成してください。
このリストをコピー&ペーストするとよいでしょう。
リスト プログラムソースファイル"led00.c"
#include "7040S.H" //IOポートアドレス定義
#include "sh_7045.h" //基本関数群 sh_7045.hの先頭に説明がある
void msecwait(int msec)
/*msec間なにもしない時間稼ぎ関数*/
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<9450;j++); /*9450は実測によって求めた値*/
}
}
int main(void)
{
initLed();
while(1){
turnOnLed(0); /*LED0の点灯*/
turnOnLed(1); /*LED1の点灯*/
msecwait(500);
turnOffLed(0); /*LED0の消灯*/
turnOffLed(1); /*LED1の消灯*/
msecwait(500);
}
}
4.3 フラッシュメモリ書き込み形式ファイルの作成とROMライター書き込み操作
Cプログラムソースファイル「led00.c」が出来ましたら,次の手順で実行してください。
表4.1 フラッシュメモリ書き込み形式ファイルの作成とROMライター書き込み操作から実行までの手順
パソコン側 |
マイコンSH2/7045側 | |||||||||
(1) | もしハイパーターミナルなどCOMポートを使用しているソフトがパソコン上で動作している時はそれらのソフトを中止します。 | |||||||||
(2) |
<1>AKI-SH2/7045のマザーボード上の電源スイッチをOFFにします。 (注意:SHは,電源スイッチONの瞬間に,状態選択スイッチの状態を検査しますので,必ず<1><2><3>の手順が必要です) | |||||||||
(3) |
「led00.c」を「shgcc.cmd」にドラッグ&ドロップする。 「h8write」を表示して止まるようであれば,シリアルケーブルの結線あるいはスイッチや電源が異常 「h8write この時,次のようなファイルができます。
|
| ||||||||
(4) | <1>転送が終了したら、AKI-SH2/7045のマザーボード上の電源スイッチをOFFにします。 <2>AKI-SH2/7045のマザーボード上の状態選択スイッチをラン(Run)モードにします。 | |||||||||
(5) | 必要ならパソコン側で「to_H8.ht」をダブルクリックしてターミナルアプリケーション「ハイパーターミナル」を立ち上げます。 | |||||||||
(6) | AKI-SH2/7045のマザーボード上の電源スイッチをONにすると転送したプログラムが作動します。 |
4.4 プログラムの実行
「led00.mot」がマイコンにフラッシュメモリ書き込みされて,実行します。正常に作業が終えていれば,マザーボード上の2つのLEDが点滅します。
参考1 コマンドスクリプトファイルshgcc.cmdの内容
shgcc.cmdの内容を参考リスト1に示します。
参考リスト1 コマンドスクリプトファイル「shgcc.cmd」 |
@echo
off rem
*************** カスタマイズ領域 begin ******************* %~d1 |
参考2 スタートアップルーチン「startup.S」の内容
スタートアップルーチン「startup.S」 |
!***************************************************************************** _start:
!
プログラム開始位置 !----------------------------------------------------------------------------- !-----------------------------------------------------------------------------! !----------------------------------------------------------------------------- ! 万が一mainが終了して戻ってきても無限ループにして停止させる
.align
4
! 4Byte =
32Bit固定 STACK_ROOT:
.long
0x0
!スタックポインタの初期値 .align
4 D_BCR1: .short 0x202f !
CS0/CS2/CS3 are 16bit-bus,CS is 32 bit ! void setIntMask(int mask)
r4:mask r2:work r1:srreg ! この関数はIntMaskを返します。 .align
4 ! 次の関数はリンカがデフォルト関数群をつけるのを防ぎます
.end |
付録1 coffファイルの逆アッセンブル
ファイルrasm.batをダウンロードして
「rasm.bat」に「xxxxxx.coff」をドラッグ&ドロップすればよい。
付録2 motファイルの逆アッセンブル
ファイルmotrasm.batをダウンロードして
「motrasm.bat」に「xxxxxx.mot」をドラッグ&ドロップすればよい。
付録3 Cファイルのアッセンブルファイル出力
ファイルCtoAsm.batをダウンロードして
「CtoAsm.bat」に「xxxxxx.c」をドラッグ&ドロップすればよい。
その際,インクルードファイルは,読み込めるようにしておくこと。