Advertisement
Guest User

Untitled

a guest
Jul 10th, 2015
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. uint32_t pstorage_clear_block(pstorage_handle_t * storage_handle, uint16_t size){
  2.     static uint8_t page_swap[PAGE_SIZE];
  3.     if((storage_handle->block_id % PAGE_SIZE) == 0) // this is a page start
  4.         if(size == PAGE_SIZE) // this block fits the whole page
  5.             return pstorage_clear(storage_handle, PAGE_SIZE);
  6.        
  7.        
  8.     uint32_t retval, page_start, page_end, page, offset, storage_addr = storage_handle->block_id;
  9.         page_start =  (storage_addr / PSTORAGE_FLASH_PAGE_SIZE);
  10.     page_end =  ((storage_addr + size) / PSTORAGE_FLASH_PAGE_SIZE);
  11.     for(page = page_start; page <= page_end; page++){
  12.         storage_handle->block_id = page * PAGE_SIZE;
  13.         // get page
  14.         memcpy(page_swap, (uint32_t *)(page * PSTORAGE_FLASH_PAGE_SIZE), PSTORAGE_FLASH_PAGE_SIZE);
  15.         // first page
  16.         if(page == page_start){
  17.             offset = (storage_addr - (page * PSTORAGE_FLASH_PAGE_SIZE)); // distance from page start
  18.             if((size + offset) > PSTORAGE_FLASH_PAGE_SIZE){ // if it goes to another page, delete from this page to the end
  19.             memset(page_swap + offset, 0xFF, PSTORAGE_FLASH_PAGE_SIZE - offset);
  20.             }
  21.             else // if not, delete from offset to size
  22.                 memset(page_swap + offset, 0xFF, size);
  23.         } else if(page == page_end){ // second page
  24.             memset(page_swap, 0xFF, size - (PSTORAGE_FLASH_PAGE_SIZE - offset)); // delete the remaining size
  25.         }
  26.                                
  27.         pstorage_clear(storage_handle, PAGE_SIZE);
  28.                                
  29.         retval = pstorage_store(storage_handle,
  30.         (uint8_t *) page_swap,
  31.         PAGE_SIZE,
  32.         0);
  33.     }
  34.     return retval;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement