[H8-ML(418)] Re: リンカーのエラー??
From: Kenji Arai <kenjia@xxxxxxxxxxxx>
Date: 1999年10月24日(日)09時06分40秒
新井です。

On Sun, 24 Oct 1999 03:00:52 +0900
"amalthea" <amalthea@xxxxxxxxxxxxxxxxx> wrote:

> おこんばんわぁ〜〜〜〜〜アマルテアこと 小野@千葉です。
> 
> 原因がさっぱりわからないリンカーのエラー??が出るん
> ですが、わかる方いらっしゃいますか??。
> 
> ** 117 ADDRESS SPACE DUPLICATE
> 
> なんですが、プログラム的なエラーは無いはずなんですけど
> 、エラーの内容を知りたくて、マニュアル類を探したんですが
> どこにもエラー類の解説が見当たらなくて、困ってしまいました。

日立製であろうと秋月製であろうと、リンカーはアドレスを明示的に指定しない
限り、リンク時にアドレスを重複して割り付ける事は有りません。例えば、リン
ク時のバッチファイル(*.sub File)の中に、

START   P,C,D,ROM(100),EXRAM(05000),CR,DR,B,RAM(0FEF10),USER(0FF200),SCI(0FFF
FB8)

の様に記述すると、プログラム(秋月のCコンパイラでは、コントロールプログラ
ム領域のセクション名は、自動的にPとなる)は、下記の様に16進で100番地から割
付が始まります。

P       H'00000100    -    H'00000257 H'00000158 ad9851
	H'00000258    -    H'000002B7 H'00000060 adc
	H'000002B8    -    H'000004DF H'00000228 lcd_drv
	H'000004E0    -    H'00000993 H'000004B4 rtm_h8

幾つかのOBJファイルをリンクする際は、Pの領域は、順次割り付けられ決して重
複する事は有りません。Pが終われば、その後にC、D、ROMセクションが順次続き
ます(上記の例では)。
しかし、上記例では、EXRAM領域が再び絶対アドレスで指定されています。そこで、
P(C,D,ROMを含む)セクションが大きくなり、H'5000番地を越えると、EXRAM領域と
重なって
** 117 ADDRESS SPACE DUPLICATE
が出る可能性があります。

そこで、アマルテアこと小野@千葉さんの場合は、私の予想では、例外処理のベ
クター領域(0番地から順次)とP領域の重複辺りが一番可能性があると思います。
明示的にアドレスを宣言しなければ、この部分は動作しませんのでよく起きるパ
ターンと思われます。
他に、初めてリンクを実行したのでなければ、どの時点で出るようになったのか
を分析し、その時点で追加した部分を分析する事が重要です。追加部分できっと
プログラムやデータ領域が増えた事に起因している可能性があります。
更に、リンカー用バッチファイル(*.sub)で、上記の様なSTART指定部分で、下記
の様に
START   P,C,D,ROM,EXRAM,CR,DR,B,RAM,USER,SCI(100)
番地指定を一個にして、リンクします。もちろんこれでは、H8ボードにローディ
ングしても動きませんが、何処が悪いかを調査する方法としては使えます。
** 117 ADDRESS SPACE DUPLICATE
がでなくなれば、順次アドレス指定を復活して確かめていけば、たどりつくでしょ
う。
リンカーが生成するMAPファイルの中で、アドレスの割付状況を見る事が出来ます。
良く調査すると悪い部分が読めるでしょう。リンクモジュールが多いと大変です
が、一度挑戦してみては?

新井
-------------------------------------------
Kenji Arai / JH1PJL
E-mail:  arai876@xxxxxxxxxxx
         kenjia@xxxxxxxxxxxx
         jh1pjl@xxxxxxxx 
URL http://www.page.sannet.ne.jp/kenjia/
スレッド概略
[415(R)](起点)
 └[表示中]
   ├[419(1)]
   └[420(2)]


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


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