« オカマバー | トップページ | 音色キャッシュ »

2016年1月 9日 (土)

RAMの節約

今回のアルゴリズムで、演奏のもたつきは解決すると思うが、RAMが足りないため実装が難しい。
アルゴリズムを試す前に、どうやってキャッシュメモリを用意するか。
残っているRAMはすでに512bytesを切っていて、コンパイルの度に警告が出ている。
音階の処理は軽いとみて、音階データをEEPROMに置くことにした。

const char KeyCodeTable[] = {
	0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09,0x0a,0x0c,0x0d,0x0e,
	0x10,0x11,0x12,0x14,0x15,0x16,0x18,0x19,0x1a,0x1c,0x1d,0x1e,
		:
};

という部分を、こんな感じにする。

PROGMEM const char KeyCodeTable[] = {
	0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09,0x0a,0x0c,0x0d,0x0e,
	0x10,0x11,0x12,0x14,0x15,0x16,0x18,0x19,0x1a,0x1c,0x1d,0x1e,
		:
};

AVRマイコンは、通常の変数(RAM)とEEPROMではアクセスする方法が違う。テーブルの参照も以下のようになる。

write(0x28 + ch, KeyCodeTable[ offset_note ] );
        ↓
write(0x28 + ch, pgm_read_byte_near(KeyCodeTable + offset_note))

これで12音階×8オクターブ=96bytesのRAMが節約できた。
似たようなコードをすべて、EEPROMに放り出すと、さらに145bytesを空けることができた。
プリフェッチキューのサイズを半分にして16bytesを空けた。
これで96+145+16=257bytesの余裕ができた。なんとかなるだろうか。

« オカマバー | トップページ | 音色キャッシュ »

お仕事」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/63394549

この記事へのトラックバック一覧です: RAMの節約:

« オカマバー | トップページ | 音色キャッシュ »

最近のトラックバック