SSブログ
書籍ITRON本 ブログトップ
- | 次の10件

ダウンロードのリンク [書籍ITRON本]

H8/3048F用のデバックモニタ上でHOSをデバックする時のセクション情報です。

本のサポートの一環として、左のサイドバーにダウンロードのリンクを用意しました。


ITRON本書籍サポートページ [書籍ITRON本]

書籍の内容に関するサポートページです。
質問等はコメント欄に記入していただければ、出来る限り回答いたします。
なお、こちらのリンクもご利用下さい。
http://hamayan.ddo.jp/~hamayan/so-net/book1.html
gccの環境構築再確認編

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

  • 作者: 浜原 和明
  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/25
  • メディア: 単行本



しかし、スイッチの様に押されたとか、押されないとかの状態を取るだけならば

下記の例題はIRQ0に接続されたスイッチの入力で、割り込みハンドラを起動する例ですが、この様に機械的な要素で、単にON/OFFの反応ならば、むしろ優先度を最低にしたタスクでスイッチの状態をポーリングする事をお勧めします。
スイッチをIRQに接続する最大の問題は、いわゆるチャタリングの問題です。チャタリングの出ない、または出難いスイッチなら良いのですが、平気で数回デバウンスするようなスイッチを使った場合、この数だけ割り込みが処理される事となります。処理は一回で良いのにです。
しかも悪い事に無駄な処理をしている割には、処理の優先度が相当に高い。最も優先度を高くしているタスクよりも優先度が高いので、なんとも無駄な・・・。

よくチャタリングを除去した回路(ハードウエアのフィルター)を外付けしたり、ソフトウエアでフィルターを掛けたりしますが、フィルターを掛けるという事は、結局イベントに有る程度の時定数を持たせる事となり、反応は必ず遅れます。
だったら、優先度の低いタスクでdly_tskを使って適当な周期でサンプリングしても同じ事です。
RSラッチを外付けすれば、反応は良くなります。兎に角一発目で処理に入りたい時は有効でしょう。ですがRSラッチの様にフィードバックを持つ回路は、回路規模が増えます。FPGA等でも、この程度の目的の為に、二つのマクロセルを消費する可能性が有ります。つまりコスト高です。

私のお勧めは、リアルタイム性が許容されるなら、タスクでポーリングです。



忘れていた?割り込みハンドラの記述具体例

「割り込みハンドラの具体的な説明が本に記載されていない」と指摘を受けてしまったので、ここで補足して置きます。

割り込みハンドラの記述はそれ程難しくは有りませんが、それ以前にH8での割り込み処理に付いての知識は当然必要となります。また、割り込みスタックにも充分注意して下さい。思った以上に割り込みスタックが必要で、別のタスクのスタックを破壊する事のない様に。

では、ターゲットはH8/3664F、通称Tinyマイコンです。このTinyのIRQ0にスイッチ等を接続し、割り込みを発生させる場合です。
1.初期化処理等で割り込みコントローラー(ICU)等を設定し、割り込みを有効にする。
IO.PMR1.BYTE = 0x1e; /*0001 1110 IRQ0(bit4)割り込み入力として使用する*/
IENR1.BIT.IEN0 = 1; /*IRQ0割り込み許可*/

2.割り込みハンドラの起動関数を記述する。
例えば
void IRQ0Int(VP_INT exinf )
{
IRR1.BIT.IRRI0 = 0; /*割り込み要因クリア*/
/*以下、割り込み処理*/
}
ってな感じで、まず割り込み要因のクリアを行ってから、割り込み処理を記述します。

3.システムコンフィギュレーションファイル(system.cfg)に割り込みハンドラの登録を行う。
ATT_ISR({TA_HLNG, 0, 14, IRQ0Int(});
この静的APIの引数は、左から言語属性、ハンドラ起動時の引数、割り込みベクター番号、起動関数名です。14は3664FのIRQ0のベクター番号です。簡単ですね。

4.おそらくこれが最後の要素
上記ATT_ISRで掛かれた内容をコンフィギュレータが解釈し、それをkernel_cfg.cと言うC言語のソースファイルに展開します。読者の方ならご存知ですね。
kernel_cfg.cをエディタで開くと
/* object initialize */
void kernel_cfg_init(void)
{
int i;

/*途中は省く*/

/* initialize interrupt table */
kernel_intcb_tbl[14-14].exinf = (VP_INT)(0);
kernel_intcb_tbl[14-14].isr = (FP)(IRQ0Int);
}
こんな感じで展開されています。当然IRQ0Intと言う名前は解決しなければならない事となりますが、これもシステムコンフィギュレーションファイルに
INCLUDE("\"sample.h\"");
と書く事で、このヘッダーファイルをkernel_cfg.cで参照出来る様になります。
このsample.hの中に、IRQ0Intのプロトタイプ宣言である
void IRQ0IntVP_INT exinf);
を記述すれば、割り込みハンドラとして使える様になります。
是非、やってみて下さい。



HEWツールバージョンに合わせたコンフィギュレータの改造!

本の執筆時のHEWのツールバージョンは6.0.0でしたが、現在ルネサスからダウンロードすると、もっとバージョンが上がっています。間違いなく今後もどんどん上がるでしょう。
そこで、オーム社のダウンロードページから落とせるワークスペースの対応方法を以下に記載して置きます。

まず、HEWを起動後、ワークスペースを読み込みます。多分ここでHEWワークスペースバージョンや、ツールバージョンを上げるか聞いていきますから、そのまま指示される通りにバージョンを上げて置きます。

次に、使用したいプロジェクトをアクティブにして、ビルド(B)→ビルドフェーズ(P)に進みますと、ビルドフェーズの編集用ダイアログが開きますので、PreConfigureを選択し、変更(M)ボタンをクリックします。

下の画面のコマンドの入力欄で"6_0_0"となっている所を、実際に使っているバージョンのフォルダー名に変更して下さい。例えば6.1.1ならば、"6_1_1"となります。



HOSカーネルをデバックしてみたい

ICEを使った話とか、printfデバックをしてみるとか、根性で逆アセンブル出力を見ながらデバックしたい!という話ではなく、HEWとHTERMを使ったソースレベルデバックの話です。

まずHOS-V4では、カーネルはライブラリ化して利用するのが基本となっていて、書籍でもその方法で利用しています。

ライブラリは勿論HEWから作成できますが、作成する時のオプション指定で、デバックコードを付加するようにして下さい。ツールチェインのコンパイラタグから、デバック情報出力にチェックを入れればOKです。



または、デフォルトセッションにDebugを選択してビルドします。

あとは、ユーザーアプリケーションを作成したプロジェクトをアクティブにして、デバック情報を付加したカーネルライブラリをプロジェクトメンバーに変更し、ユーザーアプリケーションをビルドします。
これで作成されたABSファイル(ELF/DWARF形式)をHTERMに読み込ませれば、ソースウインドウの選択項目に、HOSカーネルのファイルが選択出来るようになります。

但し、注意が有ります。
ユーザーアプリケーションをロードしている最中に、HTERMはファイルの情報からソースコードにアクセスします。当然この様な場合、ファイルへのアクセスは絶対パスで行われるので、このファイルパスが無効になるような操作はできません。つまり、出来上がったABSだけを別のマシンに持って行って、そこでソースレベルデバックを行う事はできないと言う事です。
また、ロード中にソースコードを書き換える事も駄目です。HTERMは、ABSファイル中の行情報を元に、ソースコードと対比を行っているので、行が変更されてしまうと、実際のプログラムとソースコードが一致せず、ブレークを正しく掛けられなくなります。ロード中の編集は、我慢しましょう。

デバック中の注意点としては、
別にHOSに限らない話ですが、タイマー割り込みを使用していると、ステップ実行が出来ない点です。
これは、ステップ実行と言うのが、次に実行するプログラムの位置にトラップ命令を仕掛ける為に起こる問題です。つまりユーザーがあれこれ操作している間にも、タイマー割り込みは継続して動いており、ステップを実行する前に次に実行すべき命令が、割り込み処理になっているからです。もし、タイマー割り込みを使用している状態でステップ実行を行いたいなら、面倒でもブレークを掛けた直後にペリフェラルウインドウから割り込みを停止しておく必要が有ります。

でも私の場合はそんな面倒な操作はせず、ブレークポイントを細かく設定して、ステップもどきでデバックしています。まあ、こっちも面倒といえるかもしれませんが。


秋月のH8 LAN基板(3069F版)のROM上に配置して動かす時のリンカースクリプトの参考、、、上手く表示できるかな
OUTPUT_FORMAT("coff-h8300")
OUTPUT_ARCH(h8300h)
ENTRY("_startup")
MEMORY
{
	vectors : o = 0x0000, 	l = 0x100
	rom    	: o = 0x0100, 	l = 0x20000 -0x100
	ram    	: o = 0x400000, l = 0x10000
	stack	: o = 0xffff20, l = 0x4
}
SECTIONS 				
{ 					
.vectors : {
	*(.vectors)
	FILL(0xff)
        }  > vectors
.text  : {
	*(.text) 				
	*(.strings)
	*(.rodata) 				
   	 _etext = . ; 
	} > rom
.tors : {
	___ctors = . ;
	*(.ctors)
	___ctors_end = . ;
	___dtors = . ;
	*(.dtors)
	___dtors_end = . ;
	}  > rom
.data : AT ( ADDR(.tors) + SIZEOF(.tors) ){
	___data = . ;
	*(.data)
	*(.tiny)
	 _edata = .;
	} > ram
	data_size = SIZEOF(.data);
.bss : {
	 _bss_start = . ;
	*(.bss)
	*(COMMON)
	 _end = . ;  
	}  > ram
	bss_size = SIZEOF(.bss);
.stack : {
	 _stack = . ; 
	*(.stack)
	}  > stack
.stab 0 (NOLOAD) : {
	[ .stab ]
	}
.stabstr 0 (NOLOAD) : {
	[ .stabstr ]
	}
}

秋月のH8 LAN基板(3069F版)のRAM上に配置して動かす時のリンカースクリプトの参考、、、上手く表示できるかな。 この場合デバックモニタのLOADコマンドを使ってRAM上に展開しますが、vectorsの配置は必ずデバックモニタのUSER領域に一致する必要があると言う事です。
OUTPUT_FORMAT("coff-h8300")
OUTPUT_ARCH(h8300h)
ENTRY("_startup")
MEMORY
{
	vectors : o = 0xFFC040,	l = 0x100
	ram    	: o = 0x400000,	l = 0x200000
	stack	: o = 0xFFFF20, l = 0x4
}
SECTIONS 				
{ 					
.vectors : {
	*(.vectors)
	FILL(0xff)
        }  > vectors
.text  : {
	*(.text) 				
	*(.strings)
	*(.rodata) 				
   	 _etext = . ; 
	} > ram
.tors : {
	___ctors = . ;
	*(.ctors)
	___ctors_end = . ;
	___dtors = . ;
	*(.dtors)
	___dtors_end = . ;
	}  > ram
.data : {
	___data = . ;
	*(.data)
	*(.tiny)
	 _edata = .;
	} > ram
	data_size = SIZEOF(.data);
.bss : {
	 _bss_start = . ;
	*(.bss)
	*(COMMON)
	 _end = . ;  
	}  > ram
	bss_size = SIZEOF(.bss);
.stack : {
	 _stack = . ; 
	*(.stack)
	}  > stack
.stab 0 (NOLOAD) : {
	[ .stab ]
	}
.stabstr 0 (NOLOAD) : {
	[ .stabstr ]
	}
}

HOSを手軽に試したい時のお勧め [書籍ITRON本]


いや別に私は秋月の回し者ではないのですが、現実的にH8マイコンで遊ぼうとなると、頼りにしています秋月さん!って事になるので、やはり紹介します。
H8マイコンを初めて触るかなりの方が、秋月のAE-3048F基板(H8/3048F)を手にするようで、しかしこの基板、ボードのみ購入すると、その後が大変。書き込み用の特殊なライターを作らないと、にっちもさっちも行かないので、ここでいきなりつまづく人も居るようです。昔はともかく、今時書き込みに12V必要と言うのも辛い、失敗するとH8ごと壊す危険性も有るし。

そこでお勧めなのがこの基板。記事の一部には、姉妹品のLANタイプを使用しています。
http://akizukidenshi.com/catalog/items2.php?q=K-171&s=score&p=1&r=1&page=#K-00171
同じボードで3048Fにも、3052Fにも対応可能だし、私が購入した時は、+12Vを生成してくれるMAX662も、SRAMも付属していました。一応、別にACアダプターを用意しなくても、パソコンのUSBからバスパワーで電源供給できます。書き込みモードへの移行は、スイッチ一つでOKです。
LCDは残念ながら付属していないのかな?、取り合えずCコンパイラは無料で幾らでも入手可能なので、個別に、必要なものだけ買ってみて下さい。
これに、やはり秋月のRS232Cストレートケーブルを購入するのが一番無難です。
昔のモデムのストレートケーブルは使えません。

勿論、購入前に秋月に必要なものを良く聞いて下さいね。

追伸!
組み立ては、ちょっと癖があるので、マニュアルを良く読んで下さい。回路図はかなり見難いです。




ルネサスのサイト変更に伴い、新しいコンパイラの入手手順です [書籍ITRON本]

書籍販売後、いきなりルネサスのサイト構成が変更され、じゃああの付録の取得手順はなんなの!って、ちょっと淋しい事となっていますが、新しいサイトはなんだか使い難く、かなり迷ってしまうのも事実なので、その手順を書いておきます。
まずはここから、
http://japan.renesas.com/homepage.jsp
製品の中の「開発環境」をクリックし、
左側の「ダウンロード」をクリックし、
ダウンロード検索結果の中のH8SX, H8S, H8ファミリ用「コンパイラパッケージ」をクリックします。
すると、ログイン画面となりますので、ユーザー登録を済ませていない方は、ここでユーザー登録を済ませて下さい。ユーザー登録の確認は、確認用メールが送られてくる事で完了しますので、その場合は、手順の最初からやり直す事となるでしょう。
ログイン後は、ダウンロードが可能となります。

ところで、HEWとコンパイラ等のツールは、別のプログラムです。と言っても、上の手順で取得すれば、漏れなくHEWも付いて来るのですが、HEW=コンパイラでは無い事を覚えておいて下さい。
後から追加したコンパイラは、ツールチェインと言う形で管理されます。UPDATEを行った場合は、そのバージョン毎にインストールホルダーが用意され、HEWのアドミニストレーションで、どのバージョンのツールチェインを使用するのか選択する事となります。
だから、UPDATEしたから、新しいコンパイラを使っていると思っていると、それが落とし穴であったりして、実は以前のバージョンのツールチェインを使っていたりするので、注意して下さい。




一部のサンプルプログラムが動かなかった [書籍ITRON本]

オーム社のサーバー
http://www.ohmsha.co.jp/data/link/4-274-06604-5/index.htm
からダウンロードできるサンプルプログラムの内、GCC向けのサンプルのチュートリアル11の3で、正常に動作しない事に気付きました。

結局原因は、Project HOSのサイト
https://sourceforge.jp/projects/hos/
から落とせるHOSのリリースバージョンへ、幾つかあてたパッチに失敗していたらしく、再度パッチをあて直したら動く様になりました。

リリースバージョンとパッチの関係について、いづれサポートページ
http://hamayan.ddo.jp/~hamayan/so-net/book1.html
に書きますね。



ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

  • 作者: 浜原 和明
  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/25
  • メディア: 単行本


- | 次の10件 書籍ITRON本 ブログトップ

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