ホーム > OAKSボード > OAKSボードQ&A > OAKS16Q&A

Q&A

OAKS16シリーズ

質問
OAKS16のsampleプログラムを元にプログラムを作成していますが
次のような変数を使用するとリンク時にERRがでます。
int led[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

回答
int led[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
このように、初期値をもつ変数を設定した場合初期値はROM上のDATA_Iセクションに変数領域はRAM上のdataセクションに取られます。
その為、DATA_I、dataセクションの定義がスタートアッププログラムの中でされている必要があります。

スタートアッププログラムの中に次の記述(4行分)を入れてください。

;/***ここから***/
.SECTION data_NE,DATA ;/* 初期値をもつ変数データ領域(RAM) */
.org 0400h
.SECTION data_NEI,ROMDATA ;/* 初期値領域(ROM) */
.org 0fd000h
;/***ここまで***/

NE:Near領域、データサイズが偶数(enen)

NO:near領域、データサイズが奇数(odd)
(char型のデータを使用するときに必要)

.orgの番地はユーザ領域であれば変更可能です。
これで、batファイルを起動していたけばリンク時のエラーは消え、フラッシュスタートで書き込むときにアドレス0FC000から0FFFFFまで書き込むデータが示されるとおもいます。

なお、ご使用いただいているスタートアッププログラムはsampleプログラム用の簡易版ですので全てのセクション定義がされているわけではありません。
(今ご説明いたしました他にも、細かくセクションが定義されます。)
「OAKS16プログラミングテキスト」内に三菱標準スタートアップをOAKS16用に変更する方法を記述しております。
できましたらそちらのOAKS16用スタートアッププログラムをご利用いただいたほうが今後のプログラミングがしやすいと思います。
(この中ではNC30で使用する全てのセクションの定義がされています。)
http://www.oaks-ele.com/oaks_board/oaks16/text.html
テキストをダウンロードしていただきますと一緒に例題のプログラムフォルダがついてきます。
その中に変更後のスタートアッププログラムを入れてありますのでそちらをそのままご利用ください。

更新日:2002.9.25

Copyright (C) oaks-ele, Inc.