Open biqi2 opened 8 months ago
用API函数fdb_tsdb_control禁止ts数据库覆盖后发现在4K字节的TS分区的情况下确实只能容纳98条记录,因此重新分析fdb数据记录格式,发现: 每个扇区的扇区头结构体(sector_hdr_data)大小为80字节,每条数据的数据头结构体(log_idx_data)大小为32字节,因此 整个TSdb分区可以储存TS记录的数量 = (分区大小 - 扇区数*80) / (32 + 每条记录的数据对应的大小 ),由这个公式可计算对应大小TSdb分区所能包含的记录的条数,于是有了下面我的这个记录表格。由表格记录可见随着TSdb分区的增大,每多增加10K字节就会发生TS记录减少1条的情况(我的每条记录数据大小为8字节),推测可能TSdb分区每多10K产生了额外的空间占用(没有详细去分析源码了),或者我上面的公式不够精确?
用API函数fdb_tsdb_control禁止ts数据库覆盖后发现在4K字节的TS分区的情况下确实只能容纳98条记录,因此重新分析fdb数据记录格式,发现: 每个扇区的扇区头结构体(sector_hdr_data)大小为80字节,每条数据的数据头结构体(log_idx_data)大小为32字节,因此 整个TSdb分区可以储存TS记录的数量 = (分区大小 - 扇区数*80) / (32 + 每条记录的数据对应的大小 ),由这个公式可计算对应大小TSdb分区所能包含的记录的条数,于是有了下面我的这个记录表格。由表格记录可见随着TSdb分区的增大,每多增加10K字节就会发生TS记录减少1条的情况(我的每条记录数据大小为8字节),推测可能TSdb分区每多10K产生了额外的空间占用(没有详细去分析源码了),或者我上面的公式不够精确?
你这表格计算有问题,记录条数应该取整,按照你的公式,每个扇区可以存储的条数为49.2,取整为49。否则0.2的小数累计下来就会多出来
1、用的例程为‘stm32f103ve’,STM32单片机型号为STM32F105RBT6,其FLASH=128Kbyte,RAM=64Kbyte,其blk_size=2K,相关配置如下 从上面可见tsdb的缓存范围为对应SMT32内部FLASH的第50K地址处开始直到54K-1地址处结束. 2、在main函数中两个例子/ KVDB Sample /、/ TSDB Sample /之后增加了while循环反复执行这两个例子中的核心函数kvdb_basic_sample(&kvdb)及tsdb_sample(&tsdb);main代码如下: int temp_int; int main(void) { fdb_err_t result;
// print_stm32_ic_information();//打印STM32芯片信息
ifdef FDB_USING_KVDB
endif / FDB_USING_KVDB /
ifdef FDB_USING_TSDB
endif / FDB_USING_TSDB /
// HAL_Delay(500);//延时1000ms; // soft_reset();//执行软件复位; while(1) { / run basic KV samples / kvdb_basic_sample(&kvdb);
}
3、增加了一个全局变量int temp_int来保存kvdb_basic_sample(&kvdb)函数中计数变量boot_count的值。代码如下: extern int temp_int; void kvdb_basic_sample(fdb_kvdb_t kvdb) { struct fdb_blob blob; int boot_count = 0;
temp_int=boot_count; } 4、同时对tsdb_sample(&tsdb)函数进行了删减,让其每调用一次都只执行两个动作。动作一:用temp_int来给status.temp和status.humi赋予相同的值,然后追加一条ts数据;动作二:执行fdb_tsl_iter(tsdb, query_cb, tsdb)函数打印所有保存的ts数据;代码如下: extern int temp_int; void tsdb_sample(fdb_tsdb_t tsdb) { struct fdb_blob blob;
// status.temp = 38; // status.humi = 90;
status.temp = temp_int; status.humi = temp_int; fdb_tsl_append(tsdb, fdb_blob_make(&blob, &status, sizeof(status))); FDB_INFO("append the new status.temp (%d) and status.humi (%d)\n", status.temp, status.humi);
// status.temp = 38; // status.humi = 90; // fdb_tsl_append(tsdb, fdb_blob_make(&blob, &status, sizeof(status))); // FDB_INFO("append the new status.temp (%d) and status.humi (%d)\n", status.temp, status.humi); }
//mktime,作用是,将时间转换为自1970年1月1日以来持续时间的秒数,发生错误时返回-1 size_t count; / query all TSL in TSDB by time / // fdb_tsl_iter_by_time(tsdb, from_time, to_time, query_by_time_cb, tsdb); / query all FDB_TSL_WRITE status TSL's count in TSDB by time / // count = fdb_tsl_query_count(tsdb, from_time, to_time, FDB_TSL_WRITE); // FDB_INFO("query count is: %zu\n", count); }
// fdb_tsl_iter(tsdb, set_status_cb, tsdb); }
} 5、发现的问题: 通过串口打印的信息发现当boot_count的值由1累计到98次时输出的全部ts数据正常,但值累计到第99次后输出的全部ts数据 的开头第一个数据变为先前的第50个数据了(也就是丢失了最早的第1~第49个数据)。请各位大神帮忙分析一下原因。 如下: [FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ==================== [FlashDB][sample][kvdb][basic] get the 'boot_count' value is 97 [FlashDB][sample][kvdb][basic] set the 'boot_count' value to 98 [FlashDB][sample][kvdb][basic] =========================================================== [FlashDB][sample][tsdb] ==================== tsdb_sample ==================== [FlashDB][sample][tsdb] append the new status.temp (98) and status.humi (98) [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 1, temp: 1, humi: 1 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 2, temp: 2, humi: 2 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 3, temp: 3, humi: 3 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 4, temp: 4, humi: 4 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 5, temp: 5, humi: 5 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 6, temp: 6, humi: 6 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 7, temp: 7, humi: 7 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 8, temp: 8, humi: 8 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 9, temp: 9, humi: 9 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 10, temp: 10, humi: 10 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 11, temp: 11, humi: 11 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 12, temp: 12, humi: 12 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 13, temp: 13, humi: 13 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 14, temp: 14, humi: 14 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 15, temp: 15, humi: 15 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 16, temp: 16, humi: 16 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 17, temp: 17, humi: 17 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 18, temp: 18, humi: 18 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 19, temp: 19, humi: 19 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 20, temp: 20, humi: 20 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 21, temp: 21, humi: 21 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 22, temp: 22, humi: 22 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 23, temp: 23, humi: 23 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 24, temp: 24, humi: 24 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 25, temp: 25, humi: 25 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 26, temp: 26, humi: 26 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 27, temp: 27, humi: 27 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 28, temp: 28, humi: 28 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 29, temp: 29, humi: 29 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 30, temp: 30, humi: 30 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 31, temp: 31, humi: 31 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 32, temp: 32, humi: 32 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 33, temp: 33, humi: 33 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 34, temp: 34, humi: 34 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 35, temp: 35, humi: 35 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 36, temp: 36, humi: 36 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 37, temp: 37, humi: 37 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 38, temp: 38, humi: 38 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 39, temp: 39, humi: 39 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 40, temp: 40, humi: 40 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 41, temp: 41, humi: 41 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 42, temp: 42, humi: 42 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 43, temp: 43, humi: 43 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 44, temp: 44, humi: 44 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 45, temp: 45, humi: 45 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 46, temp: 46, humi: 46 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 47, temp: 47, humi: 47 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 48, temp: 48, humi: 48 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 49, temp: 49, humi: 49 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 50, temp: 50, humi: 50 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 51, temp: 51, humi: 51 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 52, temp: 52, humi: 52 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 53, temp: 53, humi: 53 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 54, temp: 54, humi: 54 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 55, temp: 55, humi: 55 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 56, temp: 56, humi: 56 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 57, temp: 57, humi: 57 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 58, temp: 58, humi: 58 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 59, temp: 59, humi: 59 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 60, temp: 60, humi: 60 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 61, temp: 61, humi: 61 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 62, temp: 62, humi: 62 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 63, temp: 63, humi: 63 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 64, temp: 64, humi: 64 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 65, temp: 65, humi: 65 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 66, temp: 66, humi: 66 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 67, temp: 67, humi: 67 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 68, temp: 68, humi: 68 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 69, temp: 69, humi: 69 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 70, temp: 70, humi: 70 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 71, temp: 71, humi: 71 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 72, temp: 72, humi: 72 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 73, temp: 73, humi: 73 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 74, temp: 74, humi: 74 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 75, temp: 75, humi: 75 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 76, temp: 76, humi: 76 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 77, temp: 77, humi: 77 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 78, temp: 78, humi: 78 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 79, temp: 79, humi: 79 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 80, temp: 80, humi: 80 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 81, temp: 81, humi: 81 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 82, temp: 82, humi: 82 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 83, temp: 83, humi: 83 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 84, temp: 84, humi: 84 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 85, temp: 85, humi: 85 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 86, temp: 86, humi: 86 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 87, temp: 87, humi: 87 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 88, temp: 88, humi: 88 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 89, temp: 89, humi: 89 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 90, temp: 90, humi: 90 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 91, temp: 91, humi: 91 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 92, temp: 92, humi: 92 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 93, temp: 93, humi: 93 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 94, temp: 94, humi: 94 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 95, temp: 95, humi: 95 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 96, temp: 96, humi: 96 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 97, temp: 97, humi: 97 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 98, temp: 98, humi: 98 [FlashDB][sample][tsdb] =========================================================== [FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ==================== [FlashDB][sample][kvdb][basic] get the 'boot_count' value is 98 [FlashDB][sample][kvdb][basic] set the 'boot_count' value to 99 [FlashDB][sample][kvdb][basic] =========================================================== [FlashDB][sample][tsdb] ==================== tsdb_sample ==================== [FlashDB][sample][tsdb] append the new status.temp (99) and status.humi (99) [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 50, temp: 50, humi: 50 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 51, temp: 51, humi: 51 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 52, temp: 52, humi: 52 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 53, temp: 53, humi: 53 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 54, temp: 54, humi: 54 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 55, temp: 55, humi: 55 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 56, temp: 56, humi: 56 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 57, temp: 57, humi: 57 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 58, temp: 58, humi: 58 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 59, temp: 59, humi: 59 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 60, temp: 60, humi: 60 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 61, temp: 61, humi: 61 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 62, temp: 62, humi: 62 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 63, temp: 63, humi: 63 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 64, temp: 64, humi: 64 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 65, temp: 65, humi: 65 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 66, temp: 66, humi: 66 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 67, temp: 67, humi: 67 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 68, temp: 68, humi: 68 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 69, temp: 69, humi: 69 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 70, temp: 70, humi: 70 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 71, temp: 71, humi: 71 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 72, temp: 72, humi: 72 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 73, temp: 73, humi: 73 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 74, temp: 74, humi: 74 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 75, temp: 75, humi: 75 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 76, temp: 76, humi: 76 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 77, temp: 77, humi: 77 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 78, temp: 78, humi: 78 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 79, temp: 79, humi: 79 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 80, temp: 80, humi: 80 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 81, temp: 81, humi: 81 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 82, temp: 82, humi: 82 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 83, temp: 83, humi: 83 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 84, temp: 84, humi: 84 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 85, temp: 85, humi: 85 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 86, temp: 86, humi: 86 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 87, temp: 87, humi: 87 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 88, temp: 88, humi: 88 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 89, temp: 89, humi: 89 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 90, temp: 90, humi: 90 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 91, temp: 91, humi: 91 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 92, temp: 92, humi: 92 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 93, temp: 93, humi: 93 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 94, temp: 94, humi: 94 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 95, temp: 95, humi: 95 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 96, temp: 96, humi: 96 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 97, temp: 97, humi: 97 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 98, temp: 98, humi: 98 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 99, temp: 99, humi: 99 [FlashDB][sample][tsdb] =========================================================== [FlashDB][sample][kvdb][basic] ==================== kvdb_basic_sample ==================== [FlashDB][sample][kvdb][basic] get the 'boot_count' value is 99 [FlashDB][sample][kvdb][basic] set the 'boot_count' value to 100 [FlashDB][sample][kvdb][basic] =========================================================== [FlashDB][sample][tsdb] ==================== tsdb_sample ==================== [FlashDB][sample][tsdb] append the new status.temp (100) and status.humi (100) [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 50, temp: 50, humi: 50 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 51, temp: 51, humi: 51 [FlashDB][sample][tsdb] [query_cb] queried a TSL: time: 52, temp: 52, humi: 52