File tree Expand file tree Collapse file tree 1 file changed +23
-4
lines changed
features/storage/kvstore/tdbstore Expand file tree Collapse file tree 1 file changed +23
-4
lines changed Original file line number Diff line number Diff line change @@ -200,16 +200,35 @@ void TDBStore::calc_area_params()
200
200
201
201
memset (_area_params, 0 , sizeof (_area_params));
202
202
size_t area_0_size = 0 ;
203
-
204
- while (area_0_size < bd_size / 2 ) {
203
+ size_t area_1_size = 0 ;
204
+
205
+ // The size calculations are a bit complex because we need to make sure we're
206
+ // always aligned to an erase block boundary (whose size may not be uniform
207
+ // across the address space), and we also need to make sure that the first
208
+ // area never goes over half of the total size even if bd_size is an odd
209
+ // number of sectors.
210
+ while (true ) {
205
211
bd_size_t erase_unit_size = _bd->get_erase_size (area_0_size);
206
- area_0_size += erase_unit_size;
212
+ if (area_0_size + erase_unit_size <= (bd_size / 2 )) {
213
+ area_0_size += erase_unit_size;
214
+ } else {
215
+ break ;
216
+ }
217
+ }
218
+
219
+ while (true ) {
220
+ bd_size_t erase_unit_size = _bd->get_erase_size (area_0_size + area_1_size);
221
+ if (area_1_size + erase_unit_size <= (bd_size / 2 )) {
222
+ area_1_size += erase_unit_size;
223
+ } else {
224
+ break ;
225
+ }
207
226
}
208
227
209
228
_area_params[0 ].address = 0 ;
210
229
_area_params[0 ].size = area_0_size;
211
230
_area_params[1 ].address = area_0_size;
212
- _area_params[1 ].size = bd_size - area_0_size ;
231
+ _area_params[1 ].size = area_1_size ;
213
232
214
233
// The areas must be of same size
215
234
MBED_ASSERT (_area_params[0 ].size == _area_params[1 ].size );
You can’t perform that action at this time.
0 commit comments