Demonstrating bug in fat file system code. Fix is documented at http://mbed.org/forum/mbed/topic/2273/
Dependencies: SDHCFileSystem mbed
Diff: main.cpp
- Revision:
- 0:227ab928d22c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jan 11 14:53:43 2012 +0000 @@ -0,0 +1,62 @@ +#include <mbed.h> +#include "SDHCFileSystem.h" + +#define DEBUG_LINE printf("%d\n", __LINE__); + +Serial console(USBTX, USBRX); + +void exitmsg(const char* message, int lineno) +{ + fprintf(stderr, "%s at line# %d\n", message, lineno); + exit(1); +} + +const int buffersize=1024; +char buffer[buffersize]; + +int main() +{ + SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs, mount point + + console.baud(921600); // mbed to pc usb serial supports: 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200, 230400, 460800, 921600 + + console.puts( + "\x1b[2J\x1b[H" + __FILE__ "\r\n" + __DATE__ " " __TIME__ "\r\n" + "\r\n"); + + remove("/sd/sector.bin"); + FILE* fp = fopen("/sd/sector.bin", "w+"); + + char *p = buffer; + for (unsigned int i=0; i<buffersize/2; ++i) + { + *(p++) = i & 0xFF; + *(p++) = i >> 8; + } + if (fwrite(buffer, sizeof(char), buffersize, fp) != buffersize) + exitmsg("failed to write", __LINE__); + + fseek(fp, 0, SEEK_SET); + if (fread(buffer, sizeof(char), buffersize, fp) != buffersize) + exitmsg("failed to read", __LINE__); + + p = buffer; + for (unsigned int i=0; i<buffersize/2; ++i) + { + unsigned char lo = (*p++); + unsigned char hi = (*p++); + unsigned int value = lo | ((int)hi << 8); + + if (value != i) + { + fprintf(stderr, "expected %d, got %d\n", i, value); + exitmsg("failed", __LINE__); + } + } + + fprintf(stderr, "success\n"); + + fclose(fp); +}