From 0de45d1986f06925c34d5c11737eaa7dbcce26d0 Mon Sep 17 00:00:00 2001 From: faBi292 <128408093+faBi292@users.noreply.github.com> Date: Fri, 31 May 2024 07:54:08 +0200 Subject: [PATCH 1/2] Optimize Flash write function to avoid redundant writes --- src/FlashStorage.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/FlashStorage.cpp b/src/FlashStorage.cpp index cb7dcf6..963c82b 100644 --- a/src/FlashStorage.cpp +++ b/src/FlashStorage.cpp @@ -93,10 +93,14 @@ void FlashClass::write(const volatile void *flash_ptr, const void *data, uint32_ while (NVMCTRL->INTFLAG.bit.READY == 0) { } #endif - // Fill page buffer + // Fill page buffer uint32_t i; for (i=0; i<(PAGE_SIZE/4) && size; i++) { - *dst_addr = read_unaligned_uint32(src_addr); + uint32_t current_value = *dst_addr; // When Buffer already contains Value do not overwrite + uint32_t new_value = read_unaligned_uint32(src_addr); + if (current_value != new_value) { + *dst_addr = new_value; + } src_addr += 4; dst_addr++; size--; From 244168e442bd72adf4aeb01d17be169b9f3825e9 Mon Sep 17 00:00:00 2001 From: faBi292 <128408093+faBi292@users.noreply.github.com> Date: Fri, 31 May 2024 08:00:38 +0200 Subject: [PATCH 2/2] Optimized Flash write function to avoid redundant writes --- src/FlashStorage.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/FlashStorage.cpp b/src/FlashStorage.cpp index 963c82b..44b215c 100644 --- a/src/FlashStorage.cpp +++ b/src/FlashStorage.cpp @@ -93,12 +93,13 @@ void FlashClass::write(const volatile void *flash_ptr, const void *data, uint32_ while (NVMCTRL->INTFLAG.bit.READY == 0) { } #endif - // Fill page buffer + // Fill page buffer uint32_t i; - for (i=0; i<(PAGE_SIZE/4) && size; i++) { - uint32_t current_value = *dst_addr; // When Buffer already contains Value do not overwrite + for (i = 0; i < (PAGE_SIZE / 4) && size; i++) + { uint32_t new_value = read_unaligned_uint32(src_addr); - if (current_value != new_value) { + if (*dst_addr != new_value) + { *dst_addr = new_value; } src_addr += 4;