From 6c126a1869e636d99ae7a52babed426b9c9fce2b Mon Sep 17 00:00:00 2001 From: smilesmile-250 <347862574@qq.com> Date: Fri, 27 Feb 2026 20:20:41 +0800 Subject: [PATCH 01/14] [kvdb] Support 256bit write granularity for kvdb --- inc/fdb_cfg_template.h | 2 +- src/fdb_kvdb.c | 13 +++++++------ src/fdb_tsdb.c | 7 +++++++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/inc/fdb_cfg_template.h b/inc/fdb_cfg_template.h index f8bde78..ee96d92 100644 --- a/inc/fdb_cfg_template.h +++ b/inc/fdb_cfg_template.h @@ -34,7 +34,7 @@ #ifdef FDB_USING_FAL_MODE /* the flash write granularity, unit: bit - * only support 1(nor flash)/ 8(stm32f2/f4)/ 32(stm32f1)/ 64(stm32f7)/ 128(stm32h5) */ + * only support 1(nor flash)/ 8(stm32f2/f4)/ 32(stm32f1)/ 64(stm32f7)/ 128(stm32h5)/ 256(stm32h7) */ #define FDB_WRITE_GRAN /* @note you must define it for a value */ #endif diff --git a/src/fdb_kvdb.c b/src/fdb_kvdb.c index 56426b2..7dac419 100644 --- a/src/fdb_kvdb.c +++ b/src/fdb_kvdb.c @@ -27,8 +27,8 @@ #error "Please configure flash write granularity (in fdb_cfg.h)" #endif -#if FDB_WRITE_GRAN != 1 && FDB_WRITE_GRAN != 8 && FDB_WRITE_GRAN != 32 && FDB_WRITE_GRAN != 64 && FDB_WRITE_GRAN != 128 -#error "the write gran can be only setting as 1, 8, 32, 64 and 128" +#if FDB_WRITE_GRAN != 1 && FDB_WRITE_GRAN != 8 && FDB_WRITE_GRAN != 32 && FDB_WRITE_GRAN != 64 && FDB_WRITE_GRAN != 128 && FDB_WRITE_GRAN != 256 +#error "the write gran can be only setting as 1, 8, 32, 64, 128 and 256" #endif /* magic word(`F`, `D`, `B`, `1`) */ @@ -109,6 +109,8 @@ struct sector_hdr_data { uint32_t reserved; #if (FDB_WRITE_GRAN == 64) || (FDB_WRITE_GRAN == 128) uint8_t padding[4]; /**< align padding for 64bit and 128bit write granularity */ +#elif (FDB_WRITE_GRAN == 256) + uint8_t padding[20]; /**< align padding for 256bit write granularity */ #endif }; typedef struct sector_hdr_data *sector_hdr_data_t; @@ -121,10 +123,9 @@ struct kv_hdr_data { uint8_t name_len; /**< name length */ uint32_t value_len; /**< value length */ #if (FDB_WRITE_GRAN == 64) - uint8_t padding[4]; /**< align padding for 64bit write granularity */ -#endif -#if (FDB_WRITE_GRAN == 128) - uint8_t padding[12]; /**< align padding for 128bit write granularity */ + uint8_t padding[7]; /**< align padding for 64bit write granularity */ +#elif (FDB_WRITE_GRAN == 128) || (FDB_WRITE_GRAN == 256) + uint8_t padding[15]; /**< align padding for 128bit and 256bit write granularity */ #endif }; typedef struct kv_hdr_data *kv_hdr_data_t; diff --git a/src/fdb_tsdb.c b/src/fdb_tsdb.c index 42c3f7a..4b4aa78 100644 --- a/src/fdb_tsdb.c +++ b/src/fdb_tsdb.c @@ -25,6 +25,13 @@ #if defined(FDB_USING_TSDB) +<<<<<<< HEAD +======= +#if (FDB_WRITE_GRAN == 64) || (FDB_WRITE_GRAN == 128) || (FDB_WRITE_GRAN == 256) +#error "Flash 64 or 128 or 256 bits write granularity is not supported in TSDB yet!" +#endif + +>>>>>>> 89c3a6c ([kvdb] Support 256bit write granularity for kvdb) /* magic word(`T`, `S`, `L`, `0`) */ #define SECTOR_MAGIC_WORD 0x304C5354 From c27d133d09462fff324fe46b78eea677f8155a18 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Thu, 12 Mar 2026 12:00:02 +0800 Subject: [PATCH 02/14] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/fdb_kvdb.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/fdb_kvdb.c b/src/fdb_kvdb.c index 7dac419..07ab4c7 100644 --- a/src/fdb_kvdb.c +++ b/src/fdb_kvdb.c @@ -123,9 +123,11 @@ struct kv_hdr_data { uint8_t name_len; /**< name length */ uint32_t value_len; /**< value length */ #if (FDB_WRITE_GRAN == 64) - uint8_t padding[7]; /**< align padding for 64bit write granularity */ -#elif (FDB_WRITE_GRAN == 128) || (FDB_WRITE_GRAN == 256) - uint8_t padding[15]; /**< align padding for 128bit and 256bit write granularity */ + uint8_t padding[8]; /**< align padding for 64bit write granularity */ +#elif (FDB_WRITE_GRAN == 128) + uint8_t padding[8]; /**< align padding for 128bit write granularity */ +#elif (FDB_WRITE_GRAN == 256) + uint8_t padding[8]; /**< align padding for 256bit write granularity */ #endif }; typedef struct kv_hdr_data *kv_hdr_data_t; From 3dc922220da6ed30bd8787303663de45a927cb91 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:30:36 +0800 Subject: [PATCH 03/14] Adjust padding sizes for write granularity alignment --- src/fdb_kvdb.c | 6 +++--- src/fdb_tsdb.c | 7 ------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/fdb_kvdb.c b/src/fdb_kvdb.c index 07ab4c7..8559f52 100644 --- a/src/fdb_kvdb.c +++ b/src/fdb_kvdb.c @@ -123,11 +123,11 @@ struct kv_hdr_data { uint8_t name_len; /**< name length */ uint32_t value_len; /**< value length */ #if (FDB_WRITE_GRAN == 64) - uint8_t padding[8]; /**< align padding for 64bit write granularity */ + uint8_t padding[4]; /**< align padding for 64bit write granularity */ #elif (FDB_WRITE_GRAN == 128) - uint8_t padding[8]; /**< align padding for 128bit write granularity */ + uint8_t padding[12]; /**< align padding for 128bit write granularity */ #elif (FDB_WRITE_GRAN == 256) - uint8_t padding[8]; /**< align padding for 256bit write granularity */ + uint8_t padding[15]; /**< align padding for 256bit write granularity */ #endif }; typedef struct kv_hdr_data *kv_hdr_data_t; diff --git a/src/fdb_tsdb.c b/src/fdb_tsdb.c index 4b4aa78..42c3f7a 100644 --- a/src/fdb_tsdb.c +++ b/src/fdb_tsdb.c @@ -25,13 +25,6 @@ #if defined(FDB_USING_TSDB) -<<<<<<< HEAD -======= -#if (FDB_WRITE_GRAN == 64) || (FDB_WRITE_GRAN == 128) || (FDB_WRITE_GRAN == 256) -#error "Flash 64 or 128 or 256 bits write granularity is not supported in TSDB yet!" -#endif - ->>>>>>> 89c3a6c ([kvdb] Support 256bit write granularity for kvdb) /* magic word(`T`, `S`, `L`, `0`) */ #define SECTOR_MAGIC_WORD 0x304C5354 From 99ad090c59ff266d05acc2e8f17f7e06d733793f Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Tue, 17 Mar 2026 19:16:46 +0800 Subject: [PATCH 04/14] Update fdb_tsdb.c From 01a5e5f65329c84ab2105607db2f95e6b03c7650 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Thu, 19 Mar 2026 19:46:30 +0800 Subject: [PATCH 05/14] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 43e60d6..339d546 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,7 +7,7 @@ jobs: strategy: fail-fast: false matrix: - write_gran: [1, 8, 32, 64, 128] + write_gran: [1, 8, 32, 64, 128, 256] env: TEST_BSP_ROOT: ../AutoTestBsp UTEST_RUNNER_PATH: ../UtestRunner From 55e5de41191b33e584de7da05cfafb27af835f89 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 13:32:23 +0800 Subject: [PATCH 06/14] Add workflow_dispatch trigger to AutoTestCI --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 339d546..881cdab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,5 @@ name: AutoTestCI -on: [push, pull_request] +on: [push, pull_request, workflow_dispatch] jobs: test: name: "AutoTest (GRAN=${{ matrix.write_gran }})" From 6c03123204169a2f69dace4434a644c181a380c1 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 13:47:30 +0800 Subject: [PATCH 07/14] Update main.yml --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 881cdab..6dd7308 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,5 +33,5 @@ jobs: scons --global-macros="FDB_WRITE_GRAN=${{ matrix.write_gran }}" -j$(nproc) -C $TEST_BSP_ROOT - name: Start test run: | - python3 $UTEST_RUNNER_PATH/qemu_runner.py --elf $TEST_BSP_ROOT/rtthread.elf --sd $TEST_BSP_ROOT/sd.bin - cat rtt_console.log + python3 $UTEST_RUNNER_PATH/qemu_runner.py --elf $TEST_BSP_ROOT/rtthread.elf --sd $TEST_BSP_ROOT/sd.bin || true + cat rtt_console.log || true From fc524d5e3d80c90765d67babb748a81a14b9b041 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:08:05 +0800 Subject: [PATCH 08/14] Store query count in variable for clarity Refactor test to store query count in a variable before assertion. --- tests/fdb_tsdb_tc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/fdb_tsdb_tc.c b/tests/fdb_tsdb_tc.c index a95701f..c2fcc76 100644 --- a/tests/fdb_tsdb_tc.c +++ b/tests/fdb_tsdb_tc.c @@ -153,9 +153,14 @@ static void test_fdb_tsl_iter_by_time(void) static void test_fdb_tsl_query_count(void) { fdb_time_t from = 0, to = TEST_TS_COUNT * TEST_TIME_STEP; + uint32_t count; fdb_reboot(); - uassert_true(fdb_tsl_query_count(&test_tsdb, from, to, FDB_TSL_WRITE) == TEST_TS_COUNT); + count = fdb_tsl_query_count(&test_tsdb, from, to, FDB_TSL_WRITE); + rt_kprintf("query_count from=%d to=%d => %u, expected=%u\n", + (int)from, (int)to, (unsigned)count, TEST_TS_COUNT); + + uassert_true(count == TEST_TS_COUNT); } static bool est_fdb_tsl_set_status_cb(fdb_tsl_t tsl, void *arg) From f6831dfbfd77960cbf445215c2d00937a0343385 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:27:35 +0800 Subject: [PATCH 09/14] Update fdb_tsdb_tc.c --- tests/fdb_tsdb_tc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/fdb_tsdb_tc.c b/tests/fdb_tsdb_tc.c index c2fcc76..272176f 100644 --- a/tests/fdb_tsdb_tc.c +++ b/tests/fdb_tsdb_tc.c @@ -110,6 +110,9 @@ static void test_fdb_tsl_append(void) i += TEST_TIME_STEP; rt_snprintf(logbuf, sizeof(logbuf), "%d", i); uassert_true(fdb_tsl_append(&test_tsdb, fdb_blob_make(&blob, logbuf, rt_strnlen(logbuf, sizeof(logbuf)))) == FDB_NO_ERR); + + fdb_tsl_iter(&test_tsdb, test_fdb_tsl_clean_cb, &count); + printf("iter count = %d\n", count); } } From 01b4c8a78af0da0ea44c4f6270abb908a9dd923a Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:30:38 +0800 Subject: [PATCH 10/14] Remove iteration and print from test case Removed unnecessary iteration and print statement from test. --- tests/fdb_tsdb_tc.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/fdb_tsdb_tc.c b/tests/fdb_tsdb_tc.c index 272176f..c2fcc76 100644 --- a/tests/fdb_tsdb_tc.c +++ b/tests/fdb_tsdb_tc.c @@ -110,9 +110,6 @@ static void test_fdb_tsl_append(void) i += TEST_TIME_STEP; rt_snprintf(logbuf, sizeof(logbuf), "%d", i); uassert_true(fdb_tsl_append(&test_tsdb, fdb_blob_make(&blob, logbuf, rt_strnlen(logbuf, sizeof(logbuf)))) == FDB_NO_ERR); - - fdb_tsl_iter(&test_tsdb, test_fdb_tsl_clean_cb, &count); - printf("iter count = %d\n", count); } } From be838a510e953c537ec3db0e497b90beb29e6814 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:07:11 +0800 Subject: [PATCH 11/14] Update fdb_tsdb_tc.c --- tests/fdb_tsdb_tc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/fdb_tsdb_tc.c b/tests/fdb_tsdb_tc.c index c2fcc76..3738654 100644 --- a/tests/fdb_tsdb_tc.c +++ b/tests/fdb_tsdb_tc.c @@ -46,6 +46,14 @@ #define TEST_ITER1_SECTORS 5 #define TEST_ITER1_COUNT (TEST_ITER1_SECTORS * _TSIL_PER_SECTOR) +/* TSLs per sector when blob is logbuf-sized string (vs. int-sized blob used by _TSIL_PER_SECTOR) */ +#define _TSIL_LOGBUF_ALIGN_SZ FDB_WG_ALIGN(sizeof(logbuf)) +#define _TSIL_PER_SECTOR_STR ((TEST_SECTOR_SIZE - _TSIL_SEC_HDR_SZ) \ + / (_TSIL_IDX_DATA_SZ + _TSIL_LOGBUF_ALIGN_SZ)) +/* Use 14 sectors out of 16 (2-sector margin) so no ring-buffer wrap-around occurs */ +#define TEST_TS_COUNT (14 * _TSIL_PER_SECTOR_STR) + + struct test_tls_data { int data; fdb_time_t time; From 651708ea2e978b428c604974ba123c7897fa7e66 Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:27:32 +0800 Subject: [PATCH 12/14] Update main.yml --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6dd7308..881cdab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,5 +33,5 @@ jobs: scons --global-macros="FDB_WRITE_GRAN=${{ matrix.write_gran }}" -j$(nproc) -C $TEST_BSP_ROOT - name: Start test run: | - python3 $UTEST_RUNNER_PATH/qemu_runner.py --elf $TEST_BSP_ROOT/rtthread.elf --sd $TEST_BSP_ROOT/sd.bin || true - cat rtt_console.log || true + python3 $UTEST_RUNNER_PATH/qemu_runner.py --elf $TEST_BSP_ROOT/rtthread.elf --sd $TEST_BSP_ROOT/sd.bin + cat rtt_console.log From 3b145723386a9db86c48fb707873f65c69ed24fa Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:39:23 +0800 Subject: [PATCH 13/14] Update fdb_tsdb_tc.c --- tests/fdb_tsdb_tc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/fdb_tsdb_tc.c b/tests/fdb_tsdb_tc.c index 3738654..d7ceaef 100644 --- a/tests/fdb_tsdb_tc.c +++ b/tests/fdb_tsdb_tc.c @@ -46,12 +46,16 @@ #define TEST_ITER1_SECTORS 5 #define TEST_ITER1_COUNT (TEST_ITER1_SECTORS * _TSIL_PER_SECTOR) -/* TSLs per sector when blob is logbuf-sized string (vs. int-sized blob used by _TSIL_PER_SECTOR) */ +/* TSLs per sector when blob is logbuf-sized string */ #define _TSIL_LOGBUF_ALIGN_SZ FDB_WG_ALIGN(sizeof(logbuf)) #define _TSIL_PER_SECTOR_STR ((TEST_SECTOR_SIZE - _TSIL_SEC_HDR_SZ) \ / (_TSIL_IDX_DATA_SZ + _TSIL_LOGBUF_ALIGN_SZ)) -/* Use 14 sectors out of 16 (2-sector margin) so no ring-buffer wrap-around occurs */ -#define TEST_TS_COUNT (14 * _TSIL_PER_SECTOR_STR) + +/* Cap at 256 to avoid timeout on small write granularities (e.g. gran=1/8/32), + * while still being dynamic enough to avoid ring-buffer wrap-around on large + * granularities (e.g. gran=64/128/256). */ +#define TEST_TS_COUNT ((_TSIL_PER_SECTOR_STR * 14) < 256 \ + ? (_TSIL_PER_SECTOR_STR * 14) : 256) struct test_tls_data { From bef74f451bf9179a38c3aa51826987adbd730dce Mon Sep 17 00:00:00 2001 From: Baseline <72494629+Baseline-K@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:20:28 +0800 Subject: [PATCH 14/14] Update main.yml --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 881cdab..339d546 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,5 +1,5 @@ name: AutoTestCI -on: [push, pull_request, workflow_dispatch] +on: [push, pull_request] jobs: test: name: "AutoTest (GRAN=${{ matrix.write_gran }})"