X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Farm%2Fdrv%2Fflash_lpc2.c;h=6a8cc69ba9b04d68acfaeade0d9990682b9d04a5;hb=cd31b2db0e5fc1aacb52c5acab53fdb89e6e7211;hp=99cf91e89a4ccb66beba63233d7348e29405cbf8;hpb=2b74d29e47161c81ee4f055072a63a54310249c8;p=bertos.git diff --git a/bertos/cpu/arm/drv/flash_lpc2.c b/bertos/cpu/arm/drv/flash_lpc2.c index 99cf91e8..6a8cc69b 100644 --- a/bertos/cpu/arm/drv/flash_lpc2.c +++ b/bertos/cpu/arm/drv/flash_lpc2.c @@ -94,7 +94,8 @@ struct FlashHardware #define FLASH_PAGE_CNT FLASH_MEM_SIZE / FLASH_PAGE_SIZE_BYTES -ALLOC_BITARRAY(page_dirty, FLASH_PAGE_CNT); +BITARRAY_ALLOC(page_dirty, FLASH_PAGE_CNT); +static BitArray lpc2_bitx; uint8_t erase_group[] = { @@ -216,7 +217,7 @@ static size_t lpc2_flash_writeDirect(struct KBlock *blk, block_idx_t idx, const goto flash_error; if ((fls->blk.priv.flags & KB_WRITE_ONCE) && - bitarray_blockFull(idx_sector, erase_group[sector], page_dirty, FLASH_PAGE_CNT)) + bitarray_isRangeFull(&lpc2_bitx, idx_sector, erase_group[sector])) { kputs("blocchi pieni\n"); ASSERT(0); @@ -225,7 +226,7 @@ static size_t lpc2_flash_writeDirect(struct KBlock *blk, block_idx_t idx, const bool erase = false; if ((fls->blk.priv.flags & KB_WRITE_ONCE) && - bitarray_blockEmpty(idx_sector, erase_group[sector], page_dirty, FLASH_PAGE_CNT)) + bitarray_isRangeEmpty(&lpc2_bitx, idx_sector, erase_group[sector])) erase = true; if (!(fls->blk.priv.flags & KB_WRITE_ONCE)) @@ -252,13 +253,13 @@ static size_t lpc2_flash_writeDirect(struct KBlock *blk, block_idx_t idx, const if (fls->blk.priv.flags & KB_WRITE_ONCE) { - if (bitarray_check(idx, page_dirty, FLASH_PAGE_CNT)) + if (bitarray_test(&lpc2_bitx, idx)) { ASSERT(0); goto flash_error; } else - bitarray_set(idx, page_dirty, FLASH_PAGE_CNT); + bitarray_set(&lpc2_bitx, idx); } cmd.cmd = COPY_RAM_TO_FLASH; @@ -340,6 +341,8 @@ static void common_init(Flash *fls) fls->blk.blk_size = FLASH_PAGE_SIZE_BYTES; fls->blk.blk_cnt = FLASH_MEM_SIZE / FLASH_PAGE_SIZE_BYTES; + + bitarray_init(&lpc2_bitx, FLASH_PAGE_CNT, page_dirty, sizeof(page_dirty)); } void flash_hw_init(Flash *fls, int flags)