mirror of https://github.com/ARMmbed/mbed-os.git
Support erasing of more than one erase unit in the exhaustible block device
parent
2c4a868734
commit
dc3092fd9a
|
@ -68,7 +68,6 @@ int ExhaustibleBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_
|
||||||
MBED_ASSERT(is_valid_program(addr, size));
|
MBED_ASSERT(is_valid_program(addr, size));
|
||||||
|
|
||||||
if (_erase_array[addr / get_erase_size()] == 0) {
|
if (_erase_array[addr / get_erase_size()] == 0) {
|
||||||
// TODO possibly something more destructive here
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,17 +78,25 @@ int ExhaustibleBlockDevice::erase(bd_addr_t addr, bd_size_t size)
|
||||||
{
|
{
|
||||||
MBED_ASSERT(is_valid_erase(addr, size));
|
MBED_ASSERT(is_valid_erase(addr, size));
|
||||||
|
|
||||||
// use an erase cycle
|
bd_size_t eu_size = get_erase_size();
|
||||||
if (_erase_array[addr / get_erase_size()] > 0) {
|
while (size) {
|
||||||
_erase_array[addr / get_erase_size()] -= 1;
|
// use an erase cycle
|
||||||
|
if (_erase_array[addr / eu_size] > 0) {
|
||||||
|
_erase_array[addr / eu_size] -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_erase_array[addr / eu_size] > 0) {
|
||||||
|
int err = _bd->erase(addr, eu_size);
|
||||||
|
if (err) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addr += eu_size;
|
||||||
|
size -= eu_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_erase_array[addr / get_erase_size()] == 0) {
|
return 0;
|
||||||
// TODO possibly something more destructive here
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return _bd->erase(addr, size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_size_t ExhaustibleBlockDevice::get_read_size() const
|
bd_size_t ExhaustibleBlockDevice::get_read_size() const
|
||||||
|
|
Loading…
Reference in New Issue