リンクの仕方
    

【LINKとは?】

LINKとは何でしょうか? これはPICで大きなプログラムを作成する時に、
プログラムを複数のモジュールに分割して作成し、後からそれらを
オブジェクトの段階でつなぎ合わせて一つのプログラムにする時、この
つなぐことを言います。
MPLABには、このリンクのためのツールである「MPLINK」が含まれて
います。

さらにMPLINKはアセンブラだけでなく、C言語(MPLAB-C)もアセンブラ
と同じ扱いでリンクすることが出来ますので、都合の良い言語を使って
モジュールを別々に作成し、あとでリンクしてつないで使うということ
も出来ます。


しかし、このようにモジュール分割してプログラムを作る時には、次の
ような大きな問題があります。

 (1)各モジュールをどのようにメモリに配置すれば良いのでしょうか?
 (2)お互いに変数を共有するにはどうすれば良いのでしょうか?
 (3)別のモジュールにジャンプしたり、サブルーチンを使いたい時には
   どうすれば良いのでしょうか?

このような問題を解決するために、「リロケータブル」にするというテク
ニックを使います。

【リロケータブルとは?】

リロケータブルというのは何のことでしょうか? これは大きなプログラム
を作る時に必要とされるもので、下記のような特徴を持ったプログラムの
作り方を言い、MPASMはこの機能を内蔵しています。

(1) 別々に作成したプログラムモジュールで共有する変数やジャンプする
  ラベルを互いに関連付けする。

(2) 分割して作成したプログラムを、各々メモリ内の場所に重ならない様に
  適当に配置する。そしてアドレスが変わった変数やラベルを自動的に
  定義し直す。

(3) 繰り返し使うサブルーチン群をまとめて「ライブラリ」としておき、
  何時でもリンクして使えるように、ラベルの関連付けができる。

(4) アセンブラだけでなく、C言語や他の言語でできたプログラムも
  リンクして使うことができる。
  このリンクにはMPLAB内では、「MPLINK」が使われています。

【MPLABのリロケータブルな使い方】

MPLABでリロケータブルなプログラムを作成するには、「プロジェクト」を
使います。
このプロジェクトの定義を下記の手順で作成すれば、リロケータブルな
複数のソースファイルから、自動的にリンクをして1つの実行オブジェクト
ファイルを生成し、PICライタで書き込めるHEXファイルを生成します。

(1)手順1  新規プロジェクトを作成します。
  ★ Project → NewProject として下記ダイアログでプロジェクト名を指定
    します。(下記例では「relocate.prj」とした)




(2)手順2 プロパティでMPLINKを選択指定する。
  ★ 下記 Edit Projectダイアログで nodeを選択→Propertyとします。




そうすると下記の"Node Property"ダイアログが開くので、ここで
Language Toolで、MPLINKを指定します。 この指定をすることで
複数ソースファイルで自動リンクが実行されるようになります。



 (3) 手順3 複数ソースファイルの指定
   上記MPLINKを指定して戻った Edit Projectダイアログで、
   Add Nodeを実行することで複数のソースファイルを指定出来ます。
   下図では、relo1とrelo2の2個のソースファイルを指定した所です。


(4) 手順4  リンクファイルの指定
 ソースファイルを全て加えるのが完了したら、さらにリンクファイルを
 加えます。このリンクファイルはMPLABのディレクトリにあらかじめ
 標準ファイルが用意されていますので、それを指定して加えます。

 ★ Edit Projectダイアログで
     Add Node → ファイルの種類で Linker Scripts(*.lkr)を選択
      → MPLABのディレクトリを選択すると一覧が表示される。
       → 適当なPICのlkrを選択する → OK

 下図はPIC16F84用のリンクファイルを選択した所です。




 (5)手順5  出力HEXファイルのフォーマット指定
   戻ったEdit Projectダイアログで
    [.hex]を選択して → Node Properties とする
   これで開く下記ダイアログでINHEX8Mを選択してOK。
  



(6) 手順6  Edit Project終了
  これで最後にEdit ProjectのOKを押せば、プロジェクトが開始され
  ます。
  以下で、ソースファイルの入力、編集をしたあと、Make Projectを
  実行すれば、自動的にリンクが実行されます。
  エラーがあれば、その内容を表示し、リンクは実行されませんので
  エラーを完全に無くして再度Makeをします。



(参考)MPLINKの詳細

MPLINKを単独で使う時の使い方です。 MPLINKはDOSのプログラム
となっているので、起動にはMS-DOS窓から実行する必要があります。


【MPLINKの起動方法】

MPLINKはDOSのコマンドファイルとして起動する必要があります。
起動コマンドは下記フォーマットです。


  mplink { cmdfile | [objfile] | [libfile] | [option]}・・・・

    cmdfile:MPLINKを動かす為のコマンドをまとめた起動用
         ファイルでバッチ処理に使う
         (拡張子は .lkr)
    objfile:リンクするオブジェクトファイル
         (拡張子は .o)
    libfile:ライブラリとして作成したファイル
         (拡張子は .lib)
    option :MPLINKのコマンドラインオプションで下表

   

Option

機能、動作

 /o <filename> 出力するリンク後オブジェクトファイル名の指定
指定無しのときは、"a.out"というファイル名
 /m <filename> マップファイルの出力とファイル名指定
 /L <pathlist> libraryやobjectを探すパスの指定、’,’で区切って
複数指定が可能
 /K <pathlist> コマンドファイルのパス指定
 /n <length> 1ページ当たりの行数指定
 /h 、/? ヘルプ表示指定
 /a <hexformat> 出力HEXファイルのフォーマット指定
INHX8M、INHX8S、INHX32のいずれかを指定
 /q 終了
  (注) / は - でも同じです。  


【生成されるファイル】

実際にMPLINKでリンクした結果生成されるファイルは下記のような
種類のものとなります。

 (1) COFFファイル(拡張子 .out)
    出力ファイル
 (2) CODファイル(拡張子 .cod)
    MPLABでのデバッグ用ファイル
 (3) HEXファイル(拡張子 .hex)
    PICへの書き込み用ファイル
 (4) MAPファイル(拡張子 .map)
    リンクマップリスト

 《コマンド例》
   下記はコマンドの実例です。

    mplink -o c.out -m c.map a.o b.o lnk17C44.lkr

     a.o と b.o という2個のオブジェクトファイルをリンクする。
     さらにlnk17C44.lkrというコマンドファイル内の記述で math.libを
     リンクする。リンク結果は c.out という名称で、リンクマップは、
     c.mapという名称で出力する。
     ただしすべてのファイルがmplinkと同じディレクトリ内にあるものとします。
 
  このコマンドの出力ファイルは下記4個となります。
     
     c.out    c.cod    c.hex     c.map




  次のページへ    目次ページへ