flush flash filesystem once a second

This commit is contained in:
Dan Halbert 2019-03-20 12:21:36 -04:00
parent 8543695f9d
commit 2459eabd66
7 changed files with 45 additions and 7 deletions

View File

@ -27,6 +27,7 @@
#include "audio_dma.h" #include "audio_dma.h"
#include "tick.h" #include "tick.h"
#include "supervisor/filesystem.h"
#include "supervisor/usb.h" #include "supervisor/usb.h"
#include "py/runtime.h" #include "py/runtime.h"
@ -53,6 +54,7 @@ void run_background_tasks(void) {
#if CIRCUITPY_NETWORK #if CIRCUITPY_NETWORK
network_module_background(); network_module_background();
#endif #endif
filesystem_background();
usb_background(); usb_background();
assert_heap_ok(); assert_heap_ok();

View File

@ -25,6 +25,7 @@
*/ */
#include "py/runtime.h" #include "py/runtime.h"
#include "supervisor/filesystem.h"
#include "supervisor/usb.h" #include "supervisor/usb.h"
#include "supervisor/shared/stack.h" #include "supervisor/shared/stack.h"
@ -33,6 +34,7 @@
#endif #endif
void run_background_tasks(void) { void run_background_tasks(void) {
filesystem_background();
usb_background(); usb_background();
#ifdef CIRCUITPY_DISPLAYIO #ifdef CIRCUITPY_DISPLAYIO

View File

@ -27,6 +27,7 @@
#include "tick.h" #include "tick.h"
#include "supervisor/shared/autoreload.h" #include "supervisor/shared/autoreload.h"
#include "supervisor/filesystem.h"
#include "shared-module/gamepad/__init__.h" #include "shared-module/gamepad/__init__.h"
#include "shared-bindings/microcontroller/Processor.h" #include "shared-bindings/microcontroller/Processor.h"
#include "nrf.h" #include "nrf.h"
@ -39,14 +40,17 @@ void SysTick_Handler(void) {
// (every millisecond). // (every millisecond).
ticks_ms += 1; ticks_ms += 1;
#ifdef CIRCUITPY_AUTORELOAD_DELAY_MS #if CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS > 0
autoreload_tick(); filesystem_tick();
#endif #endif
#ifdef CIRCUITPY_GAMEPAD_TICKS #ifdef CIRCUITPY_AUTORELOAD_DELAY_MS
autoreload_tick();
#endif
#ifdef CIRCUITPY_GAMEPAD_TICKS
if (!(ticks_ms & CIRCUITPY_GAMEPAD_TICKS)) { if (!(ticks_ms & CIRCUITPY_GAMEPAD_TICKS)) {
gamepad_tick(); gamepad_tick();
} }
#endif #endif
} }
void tick_init() { void tick_init() {

View File

@ -592,6 +592,7 @@ void run_background_tasks(void);
#define MICROPY_VM_HOOK_RETURN run_background_tasks(); #define MICROPY_VM_HOOK_RETURN run_background_tasks();
#define CIRCUITPY_AUTORELOAD_DELAY_MS 500 #define CIRCUITPY_AUTORELOAD_DELAY_MS 500
#define CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS 1000
#define CIRCUITPY_BOOT_OUTPUT_FILE "/boot_out.txt" #define CIRCUITPY_BOOT_OUTPUT_FILE "/boot_out.txt"
#endif // __INCLUDED_MPCONFIG_CIRCUITPY_H #endif // __INCLUDED_MPCONFIG_CIRCUITPY_H

View File

@ -31,6 +31,10 @@
#include "extmod/vfs_fat.h" #include "extmod/vfs_fat.h"
extern volatile bool filesystem_flush_requested;
void filesystem_background(void);
void filesystem_tick(void);
void filesystem_init(bool create_allowed, bool force_create); void filesystem_init(bool create_allowed, bool force_create);
void filesystem_flush(void); void filesystem_flush(void);
bool filesystem_present(void); bool filesystem_present(void);

View File

@ -29,9 +29,10 @@
#include "py/mphal.h" #include "py/mphal.h"
#include "py/reload.h" #include "py/reload.h"
volatile uint32_t autoreload_delay_ms = 0; static volatile uint32_t autoreload_delay_ms = 0;
bool autoreload_enabled = false; static bool autoreload_enabled = false;
static bool autoreload_suspended = false; static bool autoreload_suspended = false;
volatile bool reload_requested = false; volatile bool reload_requested = false;
inline void autoreload_tick() { inline void autoreload_tick() {

View File

@ -37,6 +37,30 @@
static mp_vfs_mount_t _mp_vfs; static mp_vfs_mount_t _mp_vfs;
static fs_user_mount_t _internal_vfs; static fs_user_mount_t _internal_vfs;
static volatile uint32_t filesystem_flush_interval_ms = CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS;
volatile bool filesystem_flush_requested = false;
void filesystem_background(void) {
if (filesystem_flush_requested) {
filesystem_flush();
filesystem_flush_requested = false;
}
}
inline void filesystem_tick(void) {
if (filesystem_flush_interval_ms == 0) {
// 0 means not turned on.
return;
}
if (filesystem_flush_interval_ms == 1) {
filesystem_flush_requested = true;
filesystem_flush_interval_ms = CIRCUITPY_FILESYSTEM_FLUSH_INTERVAL_MS;
} else {
filesystem_flush_interval_ms--;
}
}
static void make_empty_file(FATFS *fatfs, const char *path) { static void make_empty_file(FATFS *fatfs, const char *path) {
FIL fp; FIL fp;
f_open(fatfs, &fp, path, FA_WRITE | FA_CREATE_ALWAYS); f_open(fatfs, &fp, path, FA_WRITE | FA_CREATE_ALWAYS);