Log system based on external FRAM storage. Allow to collect float values in FRAM, and then store whole collection into file on flash.
Sample code
#include "mbed.h" #include "FRAMLog.h" SPI spi(p5,p6,p7); FRAMLog flog(spi, p8, 4, 2048); Serial pc(USBTX, USBRX); int main() { for( int i=0; i<2048; i++){ flog.log(i/4096.0); flog.log(i/(4096.0+1)); flog.log(i/(4096.0+2)); flog.log(i/(4096.0+3)); } flog.save(); }
Revision 1:4e5cda0920d3, committed 2012-10-21
- Comitter:
- Decimus
- Date:
- Sun Oct 21 20:29:57 2012 +0000
- Parent:
- 0:f211f4870371
- Commit message:
- Upload
Changed in this revision
diff -r f211f4870371 -r 4e5cda0920d3 FRAMLog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FRAMLog.cpp Sun Oct 21 20:29:57 2012 +0000 @@ -0,0 +1,66 @@ +/* Log system for FRAM+FLASH +* Copyright (c) 2012 Oleg Evsegneev +* Released under the MIT License: http://mbed.org/license/mit +* +* Datasheet http://www.ramtron.com/files/datasheets/FM25V02_ds.pdf +*/ + +#include "mbed.h" +#include "FRAMLog.h" + +FRAMLog::FRAMLog( SPI& spi, PinName ncs, short cols, short rows ): _fram(spi, ncs), _local("local") { + _cols = cols; + _rows = rows; + _addr = 0; + _row = 0; +} + +float FRAMLog::fromArray( char *bytes ){ + union { + float f; + unsigned char b[4]; + } v; + + for( char i=0; i<4; i++ ) + v.b[i] = bytes[i]; + + return v.f; +} + +void FRAMLog::toArray( float val, char *bytes ){ + union { + float f; + unsigned char b[4]; + } v; + v.f = val; + + for( char i=0; i<4; i++ ) + bytes[i] = v.b[i]; +} + +void FRAMLog::log( float val ) { + char bytes[4]; + toArray( val, bytes ); + _fram.write(_addr, bytes, 4); + _addr += 4; + if( ( _addr % (_cols*4)) == 0 ) + _row++; +} + +void FRAMLog::save() { + FILE *fp = fopen(LOG_FILE, "w"); + char bytes[4]; + unsigned short addr = 0; + + for( short i=0; i<_row; i++){ + for( short k=0; k<_cols; k++){ + _fram.read(addr, bytes, 4); + addr += 4; + fprintf( fp, "%.4f", fromArray(bytes)); + if( k < _cols-1 ) + fprintf( fp, "\t"); + } + fprintf( fp, "\r\n"); + } + fclose(fp); +}
diff -r f211f4870371 -r 4e5cda0920d3 FRAMLog.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FRAMLog.h Sun Oct 21 20:29:57 2012 +0000 @@ -0,0 +1,63 @@ +/* Log system for FRAM+FLASH +* Copyright (c) 2012 Oleg Evsegneev +* Released under the MIT License: http://mbed.org/license/mit +*/ + +#ifndef MBED_FILELOG_H +#define MBED_FILELOG_H + +#include "mbed.h" +#include "FRAMSPI.h" + +#define LOG_FILE "/local/log.txt" + +/* FRAM log system main class +* +* @code +* #include "mbed.h" +* #include "FRAMLog.h" +* +* SPI spi(p5,p6,p7); +* FRAMLog flog(spi, p8, 4, 2048); +* Serial pc(USBTX, USBRX); +* +* int main() { +* for( int i=0; i<2048; i++){ +* flog.log(i/4096.0); +* flog.log(i/(4096.0+1)); +* flog.log(i/(4096.0+2)); +* flog.log(i/(4096.0+3)); +* } +* flog.save(); +* } +* @endcode +*/ + +class FRAMLog { + +public: + FRAMLog( SPI& spi, PinName ncs, short cols, short rows ); + + /** Set new value to log + * + * @param value Value of log entry. + */ + void log( float val ); + + /** Save log to file on flash + * + */ + void save(); + +protected: + FRAMSPI _fram; + LocalFileSystem _local; + unsigned short _addr; + short _cols; + short _rows; + short _row; + void toArray( float val, char *bytes ); + float fromArray( char *bytes ); +}; + +#endif
diff -r f211f4870371 -r 4e5cda0920d3 FileLog.cpp --- a/FileLog.cpp Mon Oct 15 17:04:49 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* mbed File Log Library - * Copyright (c) 2012 Oleg Evsegneev - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include "mbed.h" -#include "FileLog.h" - -FileLog::FileLog( short cols, short rows ): _local("local") { - _cols = cols; - _rows = rows; - _data_idx = 0; - _data = new float[cols*rows]; -} - -void FileLog::log( float value ) { - _data[_data_idx++] = value; -} - -void FileLog::save() { - FILE *fp = fopen("/local/log.txt", "w"); - for( short i=0; i<_data_idx; i++){ - if( i && (i % _cols == 0)) - fprintf( fp, "\r\n"); - else if( i && i != _data_idx-1 ) - fprintf( fp, "\t"); - fprintf( fp, "%.4f", _data[i]); - } - fclose(fp); - - delete [] _data; - _data = NULL; -}
diff -r f211f4870371 -r 4e5cda0920d3 FileLog.h --- a/FileLog.h Mon Oct 15 17:04:49 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* mbed File Log Library - * Copyright (c) 2012 Oleg Evsegneev - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef MBED_FILELOG_H -#define MBED_FILELOG_H - -#include "mbed.h" - -class FileLog { - -public: - FileLog( short cols, short rows ); - - /** Set new value to log - * - * @param value Value of log entry. - */ - void log( float value ); - - /** Save log to file - * - */ - void save(); - -protected: - short _data_idx; - short _cols; - short _rows; - float* _data; - LocalFileSystem _local; -}; - -#endif