[H8-ML(2520)] Re: 20KB を超えると転送できない??
From: hamayan <hamayan@xxxxxxxxxxxxxxx>
Date: 2002年12月06日(金)23時05分54秒
hamayan です。

"Fujisawa> セクションに関しては、図書館でトラ技のバックナンバーを探してみました。
"Fujisawa> 2002年3月号の「特集 H8マイコン活用テクニック」に期待して、特集部分を
"Fujisawa> 何度も読みましたが、セクションの書き方に関する情報には辿りつけませんでし
"Fujisawa> た。
"Fujisawa> (収穫といえば、秋月のCコンパイラマニュアルPDFの20ページにセクション名の
"Fujisawa>  意味が書いてあったぐらいで・・・)

うーん、そうですねー、トラ技のバックナンバーのページを見たら、2002年3月号はアセンブラ
までですね。
どうも、2001年6月号の SH2の記事とごちゃごちゃに成っていました。m(__)m
あれも、日立のコンパイラの話なので、参考に成ります。一部アセンブラで、後はC言語で
DやBセクションの初期化を行う例が掲載されています。

"Fujisawa> > ROM(D,R)
ROM化するので、Dセクションの内容がRセクションにコピーされるよ!って宣言です。

"Fujisawa> > VECTOR(0),P,C,D(100),R,B(0FFEF10)
VECTORは割込みベクター、それに続いて、P、C、DセクションをROM領域に取りま
す。
Dのコピー先のRセクションと、Bセクションを内蔵RAM領域に取っています。
そんなに、難しい話では無いと思います。

Cコンパイラー自体は、ROM化なんてきっと気にしていないのでしょうから、セクションの
処理は、もっぱらアセンブラで行う事に成ります。と言いますか、セクションの初期化が終わ
って初めて、C言語で作成したコードが走る訳ですが。<−前提としてです。

秋月のアセンブラのマニュアル、H8MAN.TXTに、アセンブラで使用できる演算子の説明
が掲載されています。C言語で作成されたセクションのサイズや、開始位置をプログラマが手計
算で求める事は困難なので、STARTOFとか、SIZEOFとかの演算子を利用します。
起動直後、スタックの設定を終えた辺りで、

mov.l	#(STARTOF D),er5
で、Dセクションのアドレスを取得できます。
同様の手順で、
mov.l	#(STARTOF R),er6
で、Rセクションの取得、
mov.l	#(SIZEOF D),er4
で、Dセクションのサイズ、
後はこの二つのアドレス間で、データ−のコピーを行えば良いのです。
クリアは、
mov.l	#(STARTOF B),er5
mov.l	#(SIZEOF B),er4
でクリアするコードが書けると思います。
スレッド概略
[2478(R)](起点)
 └[2519(U)]
   └[表示中]
     └[2523(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]