■ BASCOM-AVR (DEMO) の使用方法 ■

メモリーの種類と使用方法
 
BASCOM-AVRでは、SRAM、XRAM、ERAMと言う名称で、3種類のメモリーを扱えます。

SRAM
 
 ・内蔵SRAMが搭載されているデバイスで、汎用として使用できるメモリーです。
 ・変数や配列の格納と、フレーム領域、スタック領域に使用されます。

 
 ○ 変数と配列
 
  ・プログラム全体で使用される、グローバルな変数や配列が宣言されると、SRAMエリアの
   若いアドレスから宣言された順に、メモリーが割り当てられて行きます。
  ・DIM命令を参照して下さい。
  ・宣言できる変数の数は、変数の型と、フレームやスタックの使用量、そしてデバイスの
   SRAM容量によって変わります。
 
型 式 使用
メモリー
扱える数値の範囲 備  考
Bit 1/8 byte 0 or 1  0または1だけを保持
Byte 1 byte 0 〜 255 符号無 8ビットの整数型
Word 2 byte 0 〜 65535 符号無 16ビットの整数型
Integer 2 byte -32,768 〜 +32,767 符号付 16ビットの整数型
Dword 4 byte 0 〜 4,294,967,295 符号無 32ビットの整数型
Long 4 byte -2,147,483,648 〜 2,147,483,647 符号付 32ビットの整数型
Single 4 byte 1.5×10の-45乗 〜 3.4×10の38乗 符号付 32ビット 浮動小数点型
Double 8 byte 5.0×10の-324乗 〜 1.7×10の308乗 符号付 64ビット 浮動小数点型
String Max
254byte
 1文字1バイトの文字列。
 10文字の文字列は、終了コード00を付けて11バイト必要。
 ($BIGSTRINGS命令により、最大65535バイトまで使用可能)

 
 ○ ハードウェア・スタック領域
 
  ・AVRのスタック ポインタ(SP)が使用するメモリー領域です。
 
  ・GOSUBまたはCALL命令を使用する場合に、戻りのアドレスを記憶するため、ハードウェア
   スタック領域のメモリーを2バイト使用します。
  ・2つのGOSUB命令を入れ子にする場合は、2X2=4バイトを使用します。
  ・RETURN命令により、ハードウェア スタックは戻され、プログラムはもとのアドレスから継続して
   処理を再開します。
 
  ・また、ほとんどの命令文でも、ハードウェア スタックが使われます。
  ・ハードウェア スタック領域は、$HWSTACK命令で設定する必要があります。
   (初期値では、40バイトに設定されています)
 
  ・割り込み処理を使用する場合には、割り込み処理ルーチン用に最低32バイトを必要とします。
  ・よって、メインルーチン用と、割り込みルーチン用を合わせた64バイトを、最低限確保して
   下さい。

 
 ○ ソフトウェア・スタック領域
 
  ・ソフトウェア スタック領域は、ローカル変数、および、サブ ルーチンに受け渡される変数が
   格納されている、メモリーのアドレスを記憶するために使用されます。
  ・これらは、アドレスを記憶するために、変数ごとに2バイトのスタック領域を使用します。
 
  ・たとえば、サブ ルーチンに受け渡す変数が3つあり、新たにサブ ルーチン内でローカル変数を
   5つ宣言した場合、(3X2)+(5X2)=16バイトのソフトウェア スタック領域を、$SWSTACK命令で
   設定する必要があります。
   (初期値では、16バイトに設定されています)
 
  ・さらに、安全策として、内部で使用されるローカル変数のために、もう4バイトを加えて下さい。

 
 ○ フレーム領域
 
  ・サブ ルーチンまたは関数内で使用される、一時的なローカル変数は、フレーム領域として
   確保されたメモリーに格納されます。
   (ローカルでは、Bit型変数と配列、ERAM、XRAMへの宣言はできません)
 
  ・たとえば、サブ ルーチン内で、インテジャー型変数が3つと、10文字の文字変数を宣言
   した場合、(2X3)+(10+1)=17バイトのフレーム領域が必要となります。
  ・さらに、INPUT、STR(x)、VAL(x) などの命令を使用すると、内部の変換ルーチンが最大で
   16バイトのフレームメモリーを使用します。
  ・よって、この場合は17+16=33バイトの領域を、$FRAMESIZE命令で設定する必要があります。
   (初期値では、32バイトに設定されています)
 
  ・サブ ルーチンまたは関数プログラムが終了した時、フレーム領域のメモリーは解放されます。


 
メモリーマップ例 (ATmega8515)
アドレス 用   途
0000 R0 レジスター
ファイル
001F R31
0020 $00 I/O
レジスター
005F $3F
0060 ↓ 変数・配列 内蔵
SRAM
↑ フレーム領域
↑ ソフトウェア スタック領域
025F ↑ ハードウェア スタック領域
0260 ↓ XRAM オプション
外部メモリー

※ フレームおよびスタック領域は、多めに確保することに越したことはありませんが、内蔵
  SRAMも決して豊富な量ではありませんので、変数や配列の数とのバランスを考えて、
  領域の値を決めて下さい。
※ フレームおよびスタック領域は、上記解説のように初期値が自動的に設定されますが、
  各自のプログラム冒頭で、設定を記述する習慣を付けて下さい。

  (例)
        $hwstack = 64     'ハードウェア・スタックの容量を設定。
        $swstack = 10      'ソフトウェア・スタックの容量を設定。
        $framesize = 24    'フレーム領域の容量を設定。


XRAM
 
 ・AVRデバイスによっては、I/Oポートをアドレスバスとデーターバスに利用して、簡単に
  外部メモリー(XRAM)を接続することができます。
 
 ・32KB RAMを追加する場合は、メモリー自身のスタートアドレスは0000番地ですが、レジスターや
  SRAMが使用するエリアは重複するため使用できません。
 ・レジスターやSRAMの最終番地以降のエリアが、XRAMとして使用されます。
  (たとえばAVR8515では、SRAMの最終アドレスが025F番地なので0260番地からになります)

参照 $XA , $XRAMSIZE , $XRAMSTART , $WAITSTATE , CONFIG XRAM


ERAM
 
 ・ほとんどのAVRデバイスは、内部EEPROMを持っています。
 ・BASCOM-AVRでは、このEEPROMをERAMと呼びます。
 
 ・ERAMには、単純なデータの読み書きの他に、変数を割り当てることもできます。
 ・ただし、EEPROMには100.000回の書き換え制限がありますから、書き換えが頻発する
  ループのような変数を割り当てることはしないで下さい。(EEPROMが使用できなくなります)
 
(例)
Dim Edat1 As Eram Byte ' EEPROMの先頭番地から順に割り当てられます。
Dim Edat2 As Eram Byte At $10 ' EEPROMの$10番地に宣言されます。

参照 DIM , $EEPROM , $DATA , $DEFAULT , READEEPROM , WRITEEEPROM

 



   電子工作の部屋 Top へ 前のページへ戻る