projects
/
rmslog.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Speedup write to SD card with various tricks
[rmslog.git]
/
rmslog
/
main.c
diff --git
a/rmslog/main.c
b/rmslog/main.c
index 9f52d5f789ea5e4fe76fad5468140137ba0ab3d4..d4bb6a0a5641796d2cb6fb0e14278ac58d53dd64 100644
(file)
--- a/
rmslog/main.c
+++ b/
rmslog/main.c
@@
-10,6
+10,11
@@
* console messages.
*/
* 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
#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");
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())
{
DDRB |= BV(PORTB0) | BV(PORTB2) | BV(PORTB3) | BV(PORTB5);
if (!sd_raw_init())
{
@@
-168,35
+170,36
@@
int main(void)
{
init();
{
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)
{
while (1)
{
- size_t size;
- char buf[128];
- bool sync_pending = false;
-
if ((size = ser_read(&ser, buf, sizeof(buf))) != 0)
{
LED_ON();
if ((size = ser_read(&ser, buf, sizeof(buf))) != 0)
{
LED_ON();