バイナリファイルの書込み。

mbedで2kByte程度のバイナリデータをfwriteでファイルに書込もうとしたら、途中からデータが正しく書込めない。
調査したら、フォーラムのfwrite and bufferhttp://mbed.org/forum/mbed/topic/2106/に、
mbedのバッファは512バイトであると書かれていて、大きなデータを一気に書込むうまい方法が見当たらなかったので、ちょっと汚いコードだが、

#define		DATA_SIZE	2048			// Data Size
#define		MBED_BUFF	256

	FILE			*fp;
	unsigned char	dataBuffer[DATA_SIZE];
	unsigned char	*bufferIndex
	unsigned int	storeSize;
	
	if ( NULL == (fp = fopen("/sd/hoge.dat", "wb" )) ) {
        error( "" );                                			// Error LED brinking.
        return 1;
    }

	bufferIndex = dataBuffer;
	for(storeSize = DATA_SIZE; storeSize > MBED_BUFF; storeSize -= MBED_BUFF) {
		fwrite(bufferIndex, 1, MBED_BUFF, fp);
		bufferIndex += MBED_BUFF;
	}
	fwrite(bufferIndex, 1, storeSize, fp);

で、漏れなく書込めた。


1 comment on バイナリファイルの書込み。:

06 Jan 2012

Localでは割込みが無視される


Localへ fwrite() データを書込んでいる最中は割込みが無視されているようなので、InterruptInを使う場合はSDなどの外部記憶装置を使用する。(前出コードはsdを利用)
fread() も多分同様。

Please log in to post comments.