2013年5月25日土曜日

PIC C18 メモ(内蔵のEEPROMを使う)

-----------------------------
EEPROMを使う
2006.09.24, 2009.05.05, 2013.05.25
-----------------------------
  • 書き換え回数制限がある
  • EEPROM 書き込み前に割り込みを無効化しておくこと
  • 書き込むデータをバイトアクセス可能なように「共用体」で定義しておく
  • 書き換えるときの事を考えた(For文で簡単にできるような)データの並びにしておく
-----------------------------
EEPROM プログラム時に初期値を書込む
2009.05.21
-----------------------------
#pragma romdata ee=0xF00000
const rom struct {
int Term[ 5 ];
char No;
}ee_Data[ 3 ] = {
{ 200,130,400,260,100,3, },
{ 130,70,320,200,100,2, },
{ 100,0,450,320,100,1, },
};
#pragma romdata
プログラミング時に直接EEPROMに書き込める。上は構造体の配列の定義と代入をしているが、共用体でバイト単位にFOR文で一気にEEPROMの読み書きができるようにしておいたほうがいい。
その必要がなければ、ずらずら書けばいい。要は、#pragma romdata ee=0xF00000 でEEPPROM 領域の指定ができるということ。
-----------------------------
EEPROM アドレス計算
2012.08
-----------------------------
unsigned int e_adr = eDATA_HEAD;    //EEPROM領域の書き込み開始アドレス
unsigned int max = sizeof( sData );      //書き込むRAM領域データ本体のサイズ
char *s_adr = ( char * )&sData;          //sData本体の先頭アドレスをキャストして取得(*1)

#define したデータ個数などの定数を足したり掛けたりして求めていたが、これだと一発。 for 文で読み書きする。また、(*1)の方法をとれば、sData をバイト単位で読み出せるような共用体の定義をしておく必要はない。

初めの頃の作品は、直接EEPROMのアドレスに初期値を書き込む方法がわからず、リセット時に EEPROM から読み込んだ先頭番地が FF (プログラミング前)なら、ROMデータとして作成したデフォルト値をその時点で書き込むという、手の込んだ方法を採っている。(笑)