As a workaround I use the following function as a substitute for R_FLASH_Write: flash_err_t My_R_FLASH_Write(uint32_t src_address, uint32_t dest_address, uint32_t num_bytes) { flash_err_t result; if (num_bytes = 64) { if ((result = R_FLASH_Write(src_address, dest_address, num_bytes)) != FLASH_SUCCESS) { //DBG_PRINTF0("FLASH write failure!"); return result; } if (memcmp((void*)src_address, (void*)dest_address, num_bytes) != 0) { //PRINTF0("Comparison error!"); return FLASH_ERR_FAILURE; } return FLASH_SUCCESS; } while (num_bytes) { uint32_t n = (num_bytes = 64) ? num_bytes : 64; if ((result = My_R_FLASH_Write(src_address, dest_address, n)) != FLASH_SUCCESS) return result; src_address += n; dest_address += n; num_bytes -= n; } return FLASH_SUCCESS; }
↧