RAM不足となりますが、どうすれが良いでしょうか?
以下の例のように#device *=16を入れてください(デバイスの持つRAMをフルに使用できるようになります)。 以下を参考にプログラムを作成ください。
コンパイラーは、多くのRAMを使用しないように努力します。ぜひとも理解してほし
いことは、プログラムのデザイン(書き方の方法でなくアルゴリズムとでも言った方
がいいのでしょうか)によりRAMの使用量は大きく変化します。最も良い方法は、全
て変数をローカルに使用することです。ローカル変数とすることによりRAMは一時的
に使用されますが、関数を抜けた時点で解放されるからです。ここにあるサンプルプ
ログラムでは、勿論、RAM不足のエラーは発生しません。 RAMは、複雑な構文や式を
評価、実行するとき比較的多く使用されます。また、コンパイラーは複雑な式や構文
を展開するとき、出力コードの品質が低下するかもしれません。 RAMの割り当ては、
関数で宣言された要素だけでなく、式の展開や評価の際も行なわれます。関数で必要
とするRAMの合計は、パラメーター、ローカル変数、関数内の大きな式の展開、評価
を行なうために必要なRAMの和となります。 RAMは、コールツリー表示のRAM=のとこ
ろに必要な量が計算されて表示されます。また、新しい関数をコールするために新し
いRAMが必要となる場合もあります。関数がreturnで戻るとき、呼び出した関数のRAM
は開放されますが、シーケンシャルにいつもコールとリターンを行なっているわけで
はないので、大きな関数を使用する場合は、効率よくRAMを利用することが難しくな
ります。
SHORT INT(1bit)型の変数をフラグや論理型(Boolean)に使用することはRAMの節約に
つながります。コンパイラーは、これらのビットをまとめて1バイトのRAMに割り当
てようとします。 SHORT INTと宣言して使う変数は、自動的にコンパイラーが割り当
てます。これはRAMサイズとROMサイズの圧縮につながり、大変効果的です。 最後に
外部にメモリ・デバイスを接続したときのことを述べます。外部に8ピンのEEPROMや
RAMを接続するためには、最低2本の信号線が必要です。そしてデータ容量が増えるこ
とになります。コンパイラーのパッケージにはこれらのデバイスのアクセスに必要な
サンプルプログラムが入っています。これらのメモリの第一の欠点はリード/ライト
のアクセスタイムが遅いことです。(PICの内蔵のRAMに対して)SRAMを使うとリード
/ライトアクセスは比較的高速にできますが、電源がなくなると内容も消えます。
(バッテリー・バックアップで補えますが、ハードウェアに負担が必要)また、
EEPROMは電源を切っても内容は保持されますが書き込み時間が大変多く必要としま
す。(10mS程度)
#device *=16
尚プログラムの作成の仕方で使用するRAMの量が大きく変わります。