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

Q&A

OAKS8シリーズ

質問
int led[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

の設定について。

コンパイラエラーは出なくなりましたが、配列変数でLEDを駆動すると点灯するLEDのポジションがでたらめとなります。
確認のため同じことを直接データセットで駆動すると本来のLEDが点灯します。

回答
初期値をもつ変数を使用する場合、ROM領域からRAMのワーク領域への初期値の転送はスタートアッププログラムの中で行なわなければなりません。
(これがされていない為、値の不定なRAMからデータを読むので
点灯に不具合が生じています。)

対策として2つ挙げておきます。

その@
スタートアッププログラム中にROM領域(初期値)からRAM領域へのデータ転送処理を入れる。

そのA
配列の記述を
const int led[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
とし(固定データとする)、

スタートアップのセクション定義を
;/***ここから***/
.SECTION rom_FE,ROMDATA(ROM固定データ,偶数);
.org 0f0000h
.SECTION rom_FO,ROMDATA;(ROM固定データ,奇数)
; /***ここまで***/

とする。
(どちらかを選択)

なお、標準スタートアッププログラムではこれらの処理をしていますので是非そちらをお使いください。

それから、ポートの定義をbyteで行なっていますので配列データは“int”ではなく“char”の方が良いように思います。
(どちらでも動作しますが。)

更新日:2002.10.01

Copyright (C) oaks-ele, Inc.