Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uint32_t pstorage_clear_block(pstorage_handle_t * storage_handle, uint16_t size){
- static uint8_t page_swap[PAGE_SIZE];
- if((storage_handle->block_id % PAGE_SIZE) == 0) // this is a page start
- if(size == PAGE_SIZE) // this block fits the whole page
- return pstorage_clear(storage_handle, PAGE_SIZE);
- uint32_t retval, page_start, page_end, page, offset, storage_addr = storage_handle->block_id;
- page_start = (storage_addr / PSTORAGE_FLASH_PAGE_SIZE);
- page_end = ((storage_addr + size) / PSTORAGE_FLASH_PAGE_SIZE);
- for(page = page_start; page <= page_end; page++){
- storage_handle->block_id = page * PAGE_SIZE;
- // get page
- memcpy(page_swap, (uint32_t *)(page * PSTORAGE_FLASH_PAGE_SIZE), PSTORAGE_FLASH_PAGE_SIZE);
- // first page
- if(page == page_start){
- offset = (storage_addr - (page * PSTORAGE_FLASH_PAGE_SIZE)); // distance from page start
- if((size + offset) > PSTORAGE_FLASH_PAGE_SIZE){ // if it goes to another page, delete from this page to the end
- memset(page_swap + offset, 0xFF, PSTORAGE_FLASH_PAGE_SIZE - offset);
- }
- else // if not, delete from offset to size
- memset(page_swap + offset, 0xFF, size);
- } else if(page == page_end){ // second page
- memset(page_swap, 0xFF, size - (PSTORAGE_FLASH_PAGE_SIZE - offset)); // delete the remaining size
- }
- pstorage_clear(storage_handle, PAGE_SIZE);
- retval = pstorage_store(storage_handle,
- (uint8_t *) page_swap,
- PAGE_SIZE,
- 0);
- }
- return retval;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement