armink / FlashDB

An ultra-lightweight database that supports key-value and time series data | 一款支持 KV 数据和时序数据的超轻量级数据库
Apache License 2.0
1.83k stars 420 forks source link

测试用例 fdb_tsdb_init 报错!求教大神 #42

Open yangyugw opened 3 years ago

yangyugw commented 3 years ago

1、系统信息 1.1 rt-thread stm32-207spi-nor_flash 1.2 fal信息 No flash device or partition was probed. Usage: fal probe [dev_name|part_name] - probe flash device o[I/FAL] ==================== FAL partition table ==================== [I/FAL] | name | flash_dev | offset | length | [I/FAL] ------------------------------------------------------------- [I/FAL] | onchip_flash | onchip_flash_16k | 0x00000000 | 0x00040000 | [I/FAL] | bootloader | nor_flash0 | 0x00000000 | 0x00020000 | [I/FAL] | filesystem | nor_flash0 | 0x00020000 | 0x00020000 | [I/FAL] | fdb_tsdb1 | nor_flash0 | 0x00040000 | 0x000a0000 | [I/FAL] | fdb_kvdb1 | nor_flash0 | 0x000e0000 | 0x00020000 | [I/FAL] ============================================================= 1.3 fal 测试信息

fal probe fdb_tsdb1 Probed a flash partition | fdb_tsdb1 | flash_dev: nor_flash0 |msh />

msh />fal bench 4096 yes Erasing 655360 bytes data, waiting... Erase benchmark success, total time: 0.828S. Writing 655360 bytes data, waiting... Write benchmark success, total time: 2.564S. Reading 655360 bytes data, waiting... Read benchmark success, total time: 2.010S.

1.4 fal 擦除写入读取测试针对 tsbd的 最后8byte进行 bench测试后第一次读取 msh />fal read 655352 8 Read data success. Start from 0x0009FFF8, size is 8. The data Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F [0009FFF8] F8 F9 FA FB FC FD FE FF ........ 擦除测试 msh />fal read 655352 8 Read data success. Start from 0x0009FFF8, size is 8. The data Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F [0009FFF8] F8 F9 FA FB FC FD FE FF ........ 写入测试 fal write 655352 1 2 3 4 5 6 7 Write data success. Start from 0x0009FFF8, size is 7. Write data: 1 2 3 4 5 6 7 . msh />fal read 655352 8 Read data success. Start from 0x0009FFF8, size is 8. The data Offset (h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F [0009FFF8] 01 02 03 04 05 06 07 FF ........

2、调试断点: main 函数增加测试代码 运行到这句出错 result = fdb_tsdb_init(&tsdb, "log", "fdb_tsdb1", get_time, 128, NULL); 3、shell提示信息如下:

\ | /

thread pri status sp stack size max used left tick-------- --- ------- ---------- ---------- ------ ---------- --- dl645_th 20 init 0x00000044 0x00000800 03% 0x00000014 000 key_thre 20 suspend 0x00000044 0x00000200 13% 0x0000000a 000 rx8025_t 20 init 0x00000044 0x00000400 06% 0x00000014 000 led_thre 20 suspend 0x00000044 0x00000200 13% 0x00000014 000 tshell 20 suspend 0x00000110 0x00001000 06% 0x0000000a 000 ppprecv 9 suspend 0x000000b8 0x00000800 08% 0x00000014 000 sys 23 suspend 0x00000188 0x00000800 19% 0x0000000a -01 tcpip 10 suspend 0x000000c0 0x00001000 15% 0x00000014 000 etx 12 suspend 0x0000009c 0x00000400 15% 0x00000010 000 erx 12 suspend 0x00000084 0x00000400 42% 0x0000000f 000 tidle0 31 suspend 0x00000040 0x00000100 31% 0x0000001f -01 main 10 suspend 0x00000248 0x00000800 42% 0x00000011 -02 usage fault: SCB_CFSR_UFSR:0x02 INVSTATE

yangyugw commented 3 years ago

补充说明挂了一个分区 littlefs 应该没有冲突吧

yangyugw commented 3 years ago

static void lock(fdb_db_t db) { //__disable_irq(); }

static void unlock(fdb_db_t db) { // __enable_irq(); } 因为我的kv数据库表现正常,没有以为是加锁问题 将这两个注释掉可以运行了,在rtthread里面

已经更改如下 static void lock(fdb_db_t db) { //__disable_irq();

    rt_mutex_take(mutex, RT_WAITING_FOREVER);/* 获取互斥量,一直等直到获取到 */

}

static void unlock(fdb_db_t db) { / 释 放 互 斥 锁 / rt_mutex_release(mutex);

// __enable_irq(); }