H8プログラムの作成

 

1.H8プログラム作成の流れ

 H8プログラム作成の流れを以下に示す。

 

 

ソースコード
 アッセンブラ言語、C言語でデータと処理が記述されたテキストファイル。ソースプログラムともいう。
C言語の場合、main()という関数が一個存在する。

リロケータブル・オブジェクトファイル
 
ソースコードからコンパイルして生成されたファイル。
ソースコードに特にメモリ番地の指定が無いとき、H8マイコン内での変数の番地(絶対番地)はまだ確定していない。このため「再配置が可能」という意味で「リローケータブル 」という。 なお、ソースコード上で、この変数はこの番地に指定する、などの番地指定があるとき、変数番地が確定しているため、リロケータブルとは呼ばない。

ライブラリ
 
先のオブジェクトファイルを集めたもの。

コンパイル
 ソースコードからオブジェクトファイルを生成する処理。

ロードモジュール
 
リンクによって生成されるH8マイコンにダウンロードできるプログラムファイル。通常、H8マイコンのプログラムを作成するというとき、プログラムはこのロードモジュールを指す。
拡張子が、。MOTであるものと、。ABSであるものの2種類のファイル形態がある。

リンク
 オブジェクトファイルとライブラリを組み合わせて編集・結合処理をしてロードモジュールを生成する処理。このリンク処理でプログラムと変数のメモリ配置が確定する。 すなわちロードモジュールではプログラムと変数のH8マイコン内でメモリ配置番地が確定している。

ダウンロード
 
ロードモジュールをH8マイコンのメモリに書き込むこと。 ロードモジュール内に、この部分はメモリの何番地に配置する、という情報があるからこの情報に従ってマイコンのメモリに書き込む。

 

2.プログラムと変数のメモリ割付
  プログラムと変数をH8マイコンメモリ内へどう配置するかの指定は、(1)ソースコード内に記述する、(2)リンクのときに指定する、という2つの方法で行われる。
また、どちらの方法をとっても、モリ 配置作業はコンパイラとリンカーの共同作業で、以下の2つのステップで行われる。

(1)メモリブロックへのセクション名割付(コンパイラ)
 論理的に、プログラムをメモリブロックの集まりであると見なす。このメモリブロックを「セクション」とよび、これに名前(「セクション名」)を付ける。 テーブル、変数、プログラムなどのメモリブロックへの割付単位はこの「セクション」単位で行なわれる。
セクションの指定には2つの方法がある。
(1)ソースコード上で指定する。
ソースコード上でメモリ割付単位としての「セクション」の名前を記述する。作成されるオブジェクトファイルの内部にセクション名が埋め込まれる。
(2)コンパイルの時に指定する。
コンパイルのとき、特別な指定がなければ、プログラムはPセクション、初期値無し変数はBセクション、初期値あり変数はDセクションとして作成される。
また、 コンパイルのときに、特別にプログラムコード、定数、初期値あり定数などにセクション名を指定する。
作成されるリロケータブル・オブジェクトファイルの内部にセクション名が埋め込まれ て、以下のようになっている。

    section_a
       table1
       table2

    section_b
        data1
        data2
 

(2)セクション名に対して絶対番地割り付け(リンカ)
  リンクのときに、セクションをどのメモリ番地(H8マイコン内の物理メモリ番地)に割り付けるかを指定する。この指定に基づいてリンクのプログラムがメモリ割付をする。


3.ROM版とRAM版プログラムの作成
  プログラムが、再配置可能なリロケータブルオブジェクトだけ作成されていれば、ROM版とRAM版の2つの版が欲しい場合には、上記(2)リンクのときのセクション割付 で番地指定を変えるだけでできる。

ROM版プログラム作成
    
割り込みテーブル     ROM番地へ
   割り込み処理関数  ROM番地へ
     main()関数       ROM番地へ
   定数           ROM番地へ
   初期値あり変数    ROM番地へ
   初期値なし変数    RAM番地へ

 

RAM版プログラム作成
    
割り込みテーブル     RAM番地へ
   割り込み処理関数  RAM番地へ
     main()関数       RAM番地へ
   定数           RAM番地へ
   初期値あり変数    RAM番地へ
   初期値なし変数    RAM番地へ


しかし、ソースコード上で「セクション」での番地 指定が既になされているときは、オブジェクトファイルはリロケータブルではなくなっている。この場合にはリンクでメモリ番地に割り付けることができない。

(例)
ソースコード上で、以下のアッセンブラの特殊な命令を使って、「セクション」での番地指定をする場合がある。
  LOCALE
  ORG
この場合、作成されるオブジェクトファイルの内部にセクション名と同時にメモリの絶対番地が埋め込まれている。
すなわち、 オブジェクトファイルはリロケータブル(再配置可能)でなくなっている。 こうしたモジュールが混入していると、リンクプログラムはプログラムを自由に再配置できない。

 今回の実験で使用するHEWでは、ベクタテーブルの指定にはこの方法が採用されている。したがって、HEWではROM版とRAM版のプログラムを リンク時の設定変更だけで簡単に作成できない。 別別のソースコードを作成する必要がある。