前回は標準的なGR-SAKURA/SDMMCクラス(FILEクラス)の使い方を確認しましたが、今回はバイナリデータの書き込みについて確認してみようと思います。
テキストでデータを持つのであれば、sprintf()を利用してテキスト化(ASCII化/文字列化)してからFILE.print()、もしくは直接FILE.print()でいいのですが、数値そのものを書き込みたい時はFILE.write()を利用します。
実際に検証してみます。ソースは以下の通りです。
/*GR-SAKURA Sketch Template Version: V1.08*/ #include <rxduino.h> #include <sdmmc.h> /* for SDC */ #define INTERVAL 100 /* ----- System define ------ */ #define PC Serial #define DATFILE "data.dat" /* ------------------------------ Global Instance -------------------------------- */ SDMMC SD; File file = SD.open(false); /* ------------------------------ System Interface -------------------------------- */ void setup() { pinMode(PIN_SW, INPUT); /* SW port is input */ PC.begin(9600, SCI_USB0); /* PC UART Setting usb-vcom */ SD.begin(); } void loop() { byte ucChr; if(digitalRead(PIN_SW) == LOW){ file = SD.open(DATFILE, FILE_WRITE); if(file != false){ for(ucChr = 0x00; ucChr != 0xff; ucChr++) file.write(ucChr); file.close(); } delay(2000); } }
スイッチを押す毎に0x00~0xFEを書き込む単純なものです。
では書きこんだファイルstirlingのようなバイナリエディタで開いてみましょう。
画像は途中で切れていますが、0x00~0xFEまで書きこめていることが確認できました。
これでバイナリファイルの取り扱いも安心してできます。
問題が1点。ファイル日時(タイムスタンプ)です。
SDMMCクラスはライブラリ化されているため、内部を調査することはできませんが、おそらくどこかのRAMが割り当てられているのでしょう。どこか、が特定できていないので新規ファイルを作成する度にファイル作成日が異なり、とんでもない日付になったりしています。
RTCが稼働するようになれば、タイムスタンプ問題は解消されるのでしょうか。