@@ -68,13 +68,18 @@ static int kv_setup = TDBStoreSet;
6868
6969static const int heap_alloc_threshold_size = 4096 ;
7070
71+ static inline uint32_t align_up (uint32_t val, uint32_t size)
72+ {
73+ return (((val - 1 ) / size) + 1 ) * size;
74+ }
75+
7176/* ----------------initialization------------------*/
7277
7378// init the blockdevice
7479static void kvstore_init ()
7580{
7681 int res;
77- size_t erase_size, ul_bd_size, rbp_bd_size;
82+ size_t program_size, erase_size, ul_bd_size, rbp_bd_size;
7883 BlockDevice *sec_bd;
7984
8085 res = bd->init ();
@@ -109,10 +114,17 @@ static void kvstore_init()
109114 flash_bd = new FlashSimBlockDevice (bd);
110115 sec_bd = flash_bd;
111116 }
117+ res = sec_bd->init ();
118+ TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, res);
119+
120+ program_size = sec_bd->get_program_size ();
121+ erase_size = sec_bd->get_erase_size ();
122+ // We must be able to hold at least 10 small keys (20 program sectors) and master record + internal data
123+ ul_bd_size = align_up (program_size * 40 , erase_size);
124+ rbp_bd_size = align_up (program_size * 40 , erase_size);
112125
113- erase_size = sec_bd->get_erase_size ();
114- ul_bd_size = erase_size * 4 ;
115- rbp_bd_size = erase_size * 2 ;
126+ res = sec_bd->deinit ();
127+ TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, res);
116128
117129 ul_bd = new SlicingBlockDevice (sec_bd, 0 , ul_bd_size);
118130 rbp_bd = new SlicingBlockDevice (sec_bd, ul_bd_size, ul_bd_size + rbp_bd_size);
0 commit comments