Sfoglia il codice sorgente

【增加】临时设置/修改分区表功能。

Signed-off-by: armink <armink.ztl@gmail.com>
armink 7 anni fa
parent
commit
8ebbcaa2b8
3 ha cambiato i file con 33 aggiunte e 5 eliminazioni
  1. 16 5
      README.md
  2. 1 0
      inc/fal.h
  3. 16 0
      src/fal_partition.c

+ 16 - 5
README.md

@@ -85,7 +85,18 @@ RT-Thread online packages
 | len    | 分区表的长度 |
 | return | 分区表   |
 
-### 3.1.4 从分区读取数据
+### 3.1.4 临时设置分区表
+
+FAL 初始化时会自动装载默认分区表。使用该设置将临时修改分区表,重启后会 **丢失** 该设置
+
+`void fal_set_partition_table_temp(struct fal_partition *table, size_t len)`
+
+| 参数    | 描述                      |
+| :----- | :----------------------- |
+| table  | 分区表 |
+| len    | 分区表的长度 |
+
+### 3.1.5 从分区读取数据
 
 `int fal_partition_read(const struct fal_partition *part, uint32_t addr, uint8_t *buf, size_t size)`
 
@@ -97,7 +108,7 @@ RT-Thread online packages
 | size   | 待读取数据的大小 |
 | return | 返回实际读取的数据大小   |
 
-### 3.1.5 往分区写入数据
+### 3.1.6 往分区写入数据
 
 `int fal_partition_write(const struct fal_partition *part, uint32_t addr, const uint8_t *buf, size_t size)`
 
@@ -109,7 +120,7 @@ RT-Thread online packages
 | size   | 待写入数据的大小 |
 | return | 返回实际写入的数据大小   |
 
-### 3.1.6 擦除分区数据
+### 3.1.7 擦除分区数据
 
 `int fal_partition_erase(const struct fal_partition *part, uint32_t addr, size_t size)`
 
@@ -120,7 +131,7 @@ RT-Thread online packages
 | size   | 擦除区域的大小 |
 | return | 返回实际擦除的区域大小   |
 
-### 3.1.7 擦除整个分区数据
+### 3.1.8 擦除整个分区数据
 
 `int fal_partition_erase_all(const struct fal_partition *part)`
 
@@ -129,7 +140,7 @@ RT-Thread online packages
 | part   | 分区对象 |
 | return | 返回实际擦除的区域大小   |
 
-### 3.1.8 打印分区表
+### 3.1.9 打印分区表
 
 `void fal_show_part_table(void)`
 

+ 1 - 0
inc/fal.h

@@ -44,6 +44,7 @@ const struct fal_flash_dev *fal_flash_device_find(const char *name);
 /* partition operator API */
 const struct fal_partition *fal_partition_find(const char *name);
 const struct fal_partition *fal_get_partition_table(size_t *len);
+void fal_set_partition_table_temp(struct fal_partition *table, size_t len);
 int fal_partition_read(const struct fal_partition *part, uint32_t addr, uint8_t *buf, size_t size);
 int fal_partition_write(const struct fal_partition *part, uint32_t addr, const uint8_t *buf, size_t size);
 int fal_partition_erase(const struct fal_partition *part, uint32_t addr, size_t size);

+ 16 - 0
src/fal_partition.c

@@ -282,6 +282,22 @@ const struct fal_partition *fal_get_partition_table(size_t *len)
     return partition_table;
 }
 
+/**
+ * set partition table temporarily
+ * This setting will modify the partition table temporarily, the setting will be lost after restart.
+ *
+ * @param table partition table
+ * @param len partition table length
+ */
+void fal_set_partition_table_temp(struct fal_partition *table, size_t len)
+{
+    assert(init_ok);
+    assert(table);
+
+    partition_table_len = len;
+    partition_table = table;
+}
+
 /**
  * read data from partition
  *