X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fstmf0%2Fao_storage_stm.c;h=c6f1defe8e67b3f8efe97a3424804e9eac470126;hp=1a6198a79308cd66808629ec999521113ed3c2b6;hb=c4b8aff07d5366cef2c7209729f6cd22fa67de0c;hpb=475940cb8032c76622c64dd0bd30f31c0b0f6cf4 diff --git a/src/stmf0/ao_storage_stm.c b/src/stmf0/ao_storage_stm.c index 1a6198a7..c6f1defe 100644 --- a/src/stmf0/ao_storage_stm.c +++ b/src/stmf0/ao_storage_stm.c @@ -127,9 +127,24 @@ _ao_flash_write(uint32_t pos, void *sv, uint16_t len) stm_flash.cr &= ~(1 << STM_FLASH_CR_PG); } +static bool +ao_storage_is_erased(uint32_t pos) +{ + uint16_t *flash = _ao_flash_addr(pos); + uint32_t i = ao_storage_block >> 1; + + while (i--) + if (*flash++ != 0xffff) + return false; + return true; +} + uint8_t ao_storage_erase(uint32_t pos) { + if (ao_storage_is_erased(pos)) + return 1; + ao_arch_block_interrupts(); ao_flash_unlock(); @@ -157,7 +172,7 @@ ao_storage_device_write(uint32_t pos, void *v, uint16_t len) } uint8_t -ao_storage_device_read(uint32_t pos, __xdata void *d, uint16_t len) __reentrant +ao_storage_device_read(uint32_t pos, void *d, uint16_t len) { if (pos >= ao_storage_total || pos + len > ao_storage_total) return 0; @@ -166,7 +181,7 @@ ao_storage_device_read(uint32_t pos, __xdata void *d, uint16_t len) __reentrant } void -ao_storage_flush(void) __reentrant +ao_storage_flush(void) { } @@ -179,7 +194,7 @@ ao_storage_setup(void) } void -ao_storage_device_info(void) __reentrant +ao_storage_device_info(void) { printf ("Using internal flash, page %d bytes, total %d bytes\n", ao_storage_block, ao_storage_total);