Hi,
On nRF52840, on example https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/subsys/mgmt/mcumgr/smp_svr bluetooth stack configurations
I am calling fs_write( less than 512bytes) and I have the main thread frozen for ~130ms.
I tried calling fs_write from a different thread and I have now the main thread frozen for ~90ms:
static void saveFlashThread(void* p1, void* p2, void* p3) { while(true) { k_msleep(10); if(flag) { flag = false; debugPinHighLow(); fs_open(&file, path, FS_O_WRITE); fs_write(&file, array, size); fs_close(&file); debugPinHighLow(); } } } K_THREAD_DEFINE(saveFlashThreadId, 1024, saveFlashThread, NULL, NULL, NULL, 7, 0, 0); static void mainThread() { ... flag=true; ... while(true) { k_msleep(5); debugPinToggle(); ... } }
Please kindly advise, you know of an asynchronous flash write function? Or is other way to write the thread so that fs_write() will not cause freeze in other threads?
The curious thing is that only part of fs_write call is blocking: may you know if the low level function code is public? If yes, where can be found for board nRF52840?
ssize_t fs_write(struct fs_file_t *zfp, const void *ptr, size_t size) { ... rc = zfp->mp->fs->write(zfp, ptr, size); fs_file_system_t /* File operations */ { ... ssize_t (*write)(struct fs_file_t *filp, const void *src, size_t nbytes);
Kind Regards,
Iulian
MSc.MEd. Software Engineer and Trainer
"But God demonstrates His own love for us in this: While we were still sinners, Christ died for us." (Romans 5:8)