[H8-ML(588)] Re: 変数の外部定義のバグ?
From: KenjiNishimura <k_nishimura@xxxxxxxxxxxxxxx>
Date: 2000年04月12日(水)23時51分33秒
西村@中央大学です。
久しぶりに書き込みます、よろしくお願いします。

> 私はリンクするときに使うサブミットファイル(リンカに手で入力する

くだらない質問なのですが、拡張子subのファイルはサブミットファイルと言うのですか?
何の略だかわからなかったのでこれまではドットサブファイルと呼んでました。

> 代わりにファイルで入力するもの)の中身に下記のように指定しています。
> 
>        start P,C,D(0),B(0FFEF10)
> 
> (詳しくはマニュアルに書いてあるのではないかとおもいます。)
> 
> こうすると外部変数領域は 0xFFEF10 からになります。
> 注)初期化した外部変数( int xxx = 0; )は、定数としてコンパイラは
> 処理するのでROM領域に置かれます。

一つ質問です。
0番地から100(?)番地までは割り込みの領域だと思うのですが、
このようにP,C,D(0)と指定した場合プログラムは0番地から書き込まれるのでしょうか?
割り込みを使わないと決めてしまえば割り込み領域も普通のプログラムとして使えるのでしょうか?

注の部分でちょっと補足です。
例としてかなり簡略化したプログラムを書きます。

#include <3048f.h>

int xxx = 10;

main(){
 xxx = 5;
}

こうした場合、外部変数(内部変数でも同じです)xxxの初期値10はROM上に必要ですが、
メイン関数の中で5という数値を代入しているのでRAM上に変数xxxが必要です。
こうしたときにROM化支援機能というのを使いまして、以下のようにすると便利です。

まずアセンブラでRという空のデータセクションを作成します(Rは適当なセクション名)。
 > .section R,DATA
それからサブミットファイル(?)を以下のように変更します。
 > ROM (D,R)
 > START P,C,D(0),B,R(0FFEF10)
こうすると初期化変数領域であるセクションDと同じサイズをRAM上に確保してくれて
セクションDの内容を実行時にコピーしてくれるはずです。

この機能を使ったときと使ってないときの違いとかを意識したことはないので
無責任な書き込みで恐縮ですが、どなたかレスをつけてくれると助かります。

♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪
    中央大学理工学部精密機械工学科3年 
          西村賢治        
     k_nishimura@xxxxxxxxxxxxxxx    
♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪

スレッド概略
[586(R)](起点)
 └[表示中]
   └[589(1)]


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


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