C

GR-SAKURAでEEPROM操作

GR-SAKURAでは搭載マイコン(RX63N)データフラッシュを利用してEEPROMのような取り扱いが可能です。

利用方法は簡単。

eeprom.hをインクルードするだけ。あとはread/write関数で自在に読み書きできます。

read
 概要    EEPROMの内容を1バイト読みます。
 文法    unsigned char EEPROM.read(unsigned long address)
 引数    address:アドレス(0~0x7FFF)
 戻値    読みだしたデータ
write
 概要    EEPROMの内容を1バイト書き込みます。
 文法    int EEPROM.write(unsigned long address, unsigned char data)
 引数    address:アドレス(0~0x7FFF)
         data: 書き込むデータ
 戻値    成功時は1、失敗時は-1

上記説明はSAKURAスケッチリファレンスから引用しました。

以下にテストプログラムを書きます。
概略ですが、setup()でEEPROM(データフラッシュ)に“123456789ABCDEF”が記述されているか確認し、記述がなければ書き込みます。
loop()ではfor文を回して1文字ずつ読み出し、シリアル送信しています。文字列終端はシリアル送信しても反映されないので、改行に変換して送っています。

/*GR-SAKURA Sketch Template Version: V1.08*/
#include <rxduino.h>
#include <eeprom.h>

#define INTERVAL 100

void setup()
{
    unsigned long adr;
    unsigned char hoge[16];

    pinMode(PIN_LED0,OUTPUT);
    Serial.begin(9600, SCI_USB0);
    for(adr = 0; adr < 16; adr++)
        hoge[adr] = EEPROM.read(adr);
    if(memcmp(hoge, "123456789ABCDEF", 16)){
        memcpy(hoge, "123456789ABCDEF", 16);
        for(adr = 0; adr < 16; adr++){
            EEPROM.write(adr, hoge[adr]);
        }
    }
}

void loop()
{
    unsigned long adr;
    unsigned char hoge[16];

    for(adr = 0; adr < 16; adr++){
        hoge[adr] = EEPROM.read(adr);
        digitalWrite(PIN_LED0, adr%2);
        delay(500);
        if(hoge[adr] == '\0')
            hoge[adr] = '\r';
        Serial.write(&hoge[adr], 1);
    }
}

TeraTermで受信するとこのようになります。
eeprom

機器パラメータや内部情報、利用者情報など外部に取り出す必要のない情報や消えると困る情報に使えますね。
注意点ですが、リファレンスにもある通り書き換え可能回数は50000回程度と制約がありますので頻繁に書き換えが発生するのならSDカードを利用する方法を検討されたほうがいいでしょう。

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!