説明
EEPROMのメモリを巨大な配列として利用することができるライブラリです。1要素=32ビット=4バイトとして扱います。これはIchigoLatteの変数が32ビットという仕様によるものです。
使い方を説明します。まず、以下の様にBigArrayオブジェクトを生成します。その際、パラメーターにはEEPROMのアドレスを指定します。以下の場合はEEPROMアドレスの0番を指定しています。
var myAry=new BigAry(0);
配列に値を書き込むにはset()メソッドを使います。set()メソッドのパラメーターは2つあり、最初にインデックス番号を指定し、次に書き込む値を指定します。以下の場合はmyAry配列のインデックス番号4に123という値を書き込みます。
myAry.set(4,123);
配列から値を読み出すにはget()メソッドを使います。get()メソッドのパラメーターにはインデックス番号を指定します。以下の場合はインデックス番号99の値を読み出し変数nに入れます。
var n=myAry.get(99);
配列の長さを求めるにはlengthプロパティを参照します。以下の場合はmyAry配列の長さが表示されます。
log(myAry.length,"\n");
BigArrayはset()メソッドにより配列要素の長さを調整します。書き込むインデックス番号が既存の配列の長さより大きい場合は、その番号をlengthプロパティにセットします。BigArrayは配列の内容が疎であってもundefinedは返さずインデックス番号で示されるEEPROMの値を読み出します。
BigArrayはインデックス番号がEEPROMのメモリサイズを超えているかどうかはチェックしません。このため、複数のBigArrayオブジェクトを使用した場合、同じメモリにデータを書き込んでしまう可能性があります。この部分に関しては制作者が対処する必要があります。
1MbitのEEPROMを全て配列として使った場合、インデックス番号は0〜32767になります。
// BigArray(adrs)
function BigAry(a){
this.adrs=a; // EEPROM Address
this.length=0; // Length
this.set=function(idx,n){ // Set Data
var adrs=this.adrs+idx*4; // EEPROM Address+Index
i2cw(0x50|(((adrs>>16)&1)<<2), (adrs&0xff00)>>8,adrs&0xff, (n&0xFF000000)>>24,(n&0xFF0000)>>16,(n&0xFF00)>>8,n&0xFF);
if ((idx+1)>this.length){ this.length=idx+1; }
};
this.get=function(idx){ // Get Data
var adrs=this.adrs+idx*4; // EEPROM Address+Index
var t1,t2,t3,t4,d=0x50|(((adrs>>16)&1)<<2);
i2cw(d,(adrs&0xff00)>>8,adrs&255);
i2cr(d,t1,t2,t3,t4);
return (t1<<24)|(t2<<16)|(t3<<8)|t4;
};
}
// Sample Code
var myAry=new BigAry(10*2048);
while(1){
log("index\n");
var p=input();
log("value (0-0xFFffFFff)\n");
var n=input();
myAry.set(p,n);
var n=myAry.get(p);
log("data=",n," __ len:",myAry.length,"\n");
}
目次に戻る