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