Speedup write to SD card with various tricks
authorBernie Innocenti <bernie@codewiz.org>
Fri, 25 Mar 2011 20:04:35 +0000 (16:04 -0400)
committerBernie Innocenti <bernie@codewiz.org>
Fri, 25 Mar 2011 20:04:35 +0000 (16:04 -0400)
rmslog/cfg/cfg_ser.h
rmslog/main.c

index b5ce58ae29950655e77416ec649b8ff30afd1c15..b2524ccbeb1818fe0bbee76935216b20f6d70f57 100644 (file)
@@ -49,7 +49,7 @@
  * $WIZ$ type = "int"
  * $WIZ$ min = 2
  */
-#define CONFIG_UART0_TXBUFSIZE  32
+#define CONFIG_UART0_TXBUFSIZE  16
 
 /**
  * Size of the inbound FIFO buffer for port 0 [bytes].
  */
 #define CONFIG_UART0_RXBUFSIZE  512
 
-/**
- * Size of the outbound FIFO buffer for port 1 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "lm3s or lpc2 or (at91 and not atmega8 and not atmega168 and not atmega32)"
- */
-#define CONFIG_UART1_TXBUFSIZE  32
-
-/**
- * Size of the inbound FIFO buffer for port 1 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "lm3s or lpc2 or (at91 and not atmega8 and not atmega168 and not atmega32)"
- */
-#define CONFIG_UART1_RXBUFSIZE  32
-
-/**
- * Size of the outbound FIFO buffer for port 2 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "lm3s or lpc2"
- */
-#define CONFIG_UART2_TXBUFSIZE  32
-
-/**
- * Size of the inbound FIFO buffer for port 2 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "lm3s or lpc2"
- */
-#define CONFIG_UART2_RXBUFSIZE  32
-
-/**
- * Size of the outbound FIFO buffer for port 3 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "lpc2"
- */
-#define CONFIG_UART3_TXBUFSIZE  32
-
-/**
- * Size of the inbound FIFO buffer for port 3 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "lpc2"
- */
-#define CONFIG_UART3_RXBUFSIZE  32
-
-
 /**
  * Size of the outbound FIFO buffer for SPI port [bytes].
  * $WIZ$ type = "int"
  * $WIZ$ min = 2
  * $WIZ$ supports = "avr"
  */
-#define CONFIG_SPI_TXBUFSIZE    32
+#define CONFIG_SPI_TXBUFSIZE    0
 
 /**
  * Size of the inbound FIFO buffer for SPI port [bytes].
  * $WIZ$ min = 2
  * $WIZ$ supports = "avr"
  */
-#define CONFIG_SPI_RXBUFSIZE    32
-
-/**
- * Size of the outbound FIFO buffer for SPI port 0 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "at91"
- */
-#define CONFIG_SPI0_TXBUFSIZE  32
-
-/**
- * Size of the inbound FIFO buffer for SPI port 0 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "at91"
- */
-#define CONFIG_SPI0_RXBUFSIZE  32
-
-/**
- * Size of the outbound FIFO buffer for SPI port 1 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "at91"
- */
-#define CONFIG_SPI1_TXBUFSIZE  32
-
-/**
- * Size of the inbound FIFO buffer for SPI port 1 [bytes].
- * $WIZ$ type = "int"
- * $WIZ$ min = 2
- * $WIZ$ supports = "at91"
- */
-#define CONFIG_SPI1_RXBUFSIZE  32
+#define CONFIG_SPI_RXBUFSIZE    0
 
 /**
  * SPI data order.
index 9f52d5f789ea5e4fe76fad5468140137ba0ab3d4..d4bb6a0a5641796d2cb6fb0e14278ac58d53dd64 100644 (file)
  * console messages.
  */
 
+#define FILE_NAME          "log.txt"
+#define FILE_OVERWRITE     1
+#define FILE_PREALLOC_SIZE 102400
+
+
 #include "hw/hw_led.h"
 
 #define LOG_LEVEL      3
@@ -150,9 +155,6 @@ static void init(void)
        timer_delay(1000);
        kfile_printf(&ser.fd, "Hello, world!\r\n");
 
-#ifdef BERTOS_FAT
-       ser_init(&spi, SER_SPI);
-#else
        DDRB |= BV(PORTB0) | BV(PORTB2) | BV(PORTB3) | BV(PORTB5);
        if (!sd_raw_init())
        {
@@ -168,35 +170,36 @@ int main(void)
 {
        init();
 
-#ifdef BERTOS_FAT
+       size_t size;
+       char buf[256];
+       bool sync_pending = false;
 
-       FRESULT fat_err;
-       if ((fat_err = f_mount(0, &fs)) != FR_OK)
+       /* create file */
+       if(!fat_create_file(dd, FILE_NAME, &dir_entry))
        {
-               LOG_ERR("Error mounting FAT volume: %d\n", fat_err);
+               #if FILE_OVERWRITE
+                       fat_delete_file(fs, &dir_entry);
+                       fat_create_file(dd, FILE_NAME, &dir_entry);
+               #endif
        }
 
-       fat_err = fatfile_open(&file, "foo.txt", FA_WRITE | FA_CREATE_ALWAYS);
-       ASSERT(fat_err == FR_OK);
-
-       size_t count = kfile_write(&file.fd, "Hello, world!", strlen("Hello, world!"));
-       ASSERT(count == strlen("Hello, world!"));
+       fd = open_file_in_dir(fs, dd, FILE_NAME);
 
-#else
-
-       fat_create_file(dd, "log.txt", &dir_entry);
-       fd = open_file_in_dir(fs, dd, "log.txt");
-       int32_t offset = 0;
-       fat_seek_file(fd, &offset, FAT_SEEK_END);
+       /* preallocate file */
+       #if FILE_PREALLOC_SIZE
+       {
+               LED_ON();
+               for (int i = 0; i < (int)(FILE_PREALLOC_SIZE / sizeof(buf)); ++i)
+                       fat_write_file(fd, (void *)buf, sizeof(buf));
 
-#endif
+               int32_t offset = 0;
+               fat_seek_file(fd, &offset, FAT_SEEK_SET);
+               LED_OFF();
+       }
+       #endif
 
        while (1)
        {
-               size_t size;
-               char buf[128];
-               bool sync_pending = false;
-
                if ((size = ser_read(&ser, buf, sizeof(buf))) != 0)
                {
                        LED_ON();