@@ -264,32 +264,29 @@ int NVStore::flash_erase_area(uint8_t area)
264
264
265
265
void NVStore::calc_validate_area_params ()
266
266
{
267
- int num_sectors = 0 ;
268
-
269
- size_t flash_addr = _flash->get_flash_start ();
267
+ size_t flash_start_addr = _flash->get_flash_start ();
270
268
size_t flash_size = _flash->get_flash_size ();
269
+ size_t flash_addr;
271
270
size_t sector_size;
272
- int max_sectors = flash_size / _flash->get_sector_size (flash_addr) + 1 ;
273
- size_t *sector_map = new size_t [max_sectors];
274
271
275
272
int area = 0 ;
276
273
size_t left_size = flash_size;
277
274
278
275
memcpy (_flash_area_params, initial_area_params, sizeof (_flash_area_params));
279
- int user_config = (_flash_area_params[0 ].size != 0 );
280
- int in_area = 0 ;
276
+ bool user_config = (_flash_area_params[0 ].size != 0 );
277
+ bool in_area = false ;
281
278
size_t area_size = 0 ;
282
279
283
- while (left_size) {
284
- sector_size = _flash->get_sector_size (flash_addr);
285
- sector_map[num_sectors++] = flash_addr;
280
+ if (user_config) {
281
+ flash_addr = flash_start_addr;
282
+ while (left_size) {
283
+ sector_size = _flash->get_sector_size (flash_addr);
286
284
287
- if (user_config) {
288
285
// User configuration - here we validate it
289
286
// Check that address is on a sector boundary, that size covers complete sector sizes,
290
287
// and that areas don't overlap.
291
288
if (_flash_area_params[area].address == flash_addr) {
292
- in_area = 1 ;
289
+ in_area = true ;
293
290
}
294
291
if (in_area) {
295
292
area_size += sector_size;
@@ -298,42 +295,34 @@ void NVStore::calc_validate_area_params()
298
295
if (area == NVSTORE_NUM_AREAS) {
299
296
break ;
300
297
}
301
- in_area = 0 ;
298
+ in_area = false ;
302
299
area_size = 0 ;
303
300
}
304
301
}
302
+ flash_addr += sector_size;
303
+ left_size -= sector_size;
305
304
}
306
-
307
- flash_addr += sector_size;
308
- left_size -= sector_size;
309
- }
310
- sector_map[num_sectors] = flash_addr;
311
-
312
- if (user_config) {
313
305
// Valid areas were counted. Assert if not the expected number.
314
306
MBED_ASSERT (area == NVSTORE_NUM_AREAS);
315
307
} else {
316
308
// Not user configuration - calculate area parameters.
317
309
// Take last two sectors by default. If their sizes aren't big enough, take
318
310
// a few consecutive ones.
319
311
area = 1 ;
320
- _flash_area_params[area].size = 0 ;
321
- int i;
322
- for (i = num_sectors - 1 ; i >= 0 ; i--) {
323
- sector_size = sector_map[i + 1 ] - sector_map[i];
312
+ flash_addr = flash_start_addr + flash_size;
313
+ _flash_area_params[0 ].size = 0 ;
314
+ _flash_area_params[1 ].size = 0 ;
315
+ while (area >= 0 ) {
316
+ MBED_ASSERT (flash_addr > flash_start_addr);
317
+ sector_size = _flash->get_sector_size (flash_addr - 1 );
318
+ flash_addr -= sector_size;
324
319
_flash_area_params[area].size += sector_size;
325
320
if (_flash_area_params[area].size >= min_area_size) {
326
- _flash_area_params[area].address = sector_map[i] ;
321
+ _flash_area_params[area].address = flash_addr ;
327
322
area--;
328
- if (area < 0 ) {
329
- break ;
330
- }
331
- _flash_area_params[area].size = 0 ;
332
323
}
333
324
}
334
325
}
335
-
336
- delete[] sector_map;
337
326
}
338
327
339
328
0 commit comments