wakuさん こんばんは。小坂です。 ---- Original message From: "Yuki WAKUDA"---- >これによると,例えば,X[500]は今,main内で >####### >int X[500]; >for(i=0;i<500;i++){ >X[i] = ○○; >} >####### >というような使い方をしていますが,これはRセクションとBセクシ ョンのどちらなのでしょうか. main() { int x[500]; : } この記述で,配列xは自動変数なのでスタック領域に実行時に作られ ます。 > mov.l #H'0FFF10,er7 でしたので,スタック領域は0FFF10からアドレスの若い方に向かっ て確保されます。xはリンク時に作られる変数ではないので,Rとか Bセクションにはなりません。それでmapファイルにはなにも表示さ れないのです。 この例ではスタック領域が内部RAM(4kbyteだったかな)におかれる 設定になっているので,大きな配列はとれません。 CASE1 外部RAM領域にスタックを置きたいならer7に外部RAMの最終 アドレス+1以下で最大の2の倍数を設定します。こうすると大きな 配列をスタックに取ることができます。(このようなスタイルは好 まれないと思いますが) CASE2 スタックの置き場を変更せずに,大きな配列をBセクション に置きたいなら main() { static int x[2000]; : } のように記述します。(この方法が自然だと思います) static変数は隠蔽された変数なのでmapファイルには現れませんが, Bセクションのサイズが大きくなってそれとわかると思います。 CASE3 他の関数からこの配列をアクセスすることがあるのなら関数 の外部に int x[2000]; main() { : } と記述します。 この記述では変数xがmapファイルに現れます。 蛇足ですが,500個の定数を記述するなら 関数の内部外部を問わず const int x[500]={ 123,345,654,23,123,...........500個の定数 } のように記述するとCセクション(ROM領域)に配置され,貴重なRAM 資源を無駄にしません。 外部RAMが1Mもある場合には関係ないかもしれませんが。 東京高専 情報工学科 小坂敏文