浏览代码

update:去掉不定长数组

Dozingfiretruck 5 月之前
父节点
当前提交
4936c59c23
共有 2 个文件被更改,包括 41 次插入42 次删除
  1. 36 36
      components/little_flash/inc/little_flash_define.h
  2. 5 6
      components/little_flash/src/little_flash.c

+ 36 - 36
components/little_flash/inc/little_flash_define.h

@@ -184,42 +184,42 @@ typedef struct {
         };
         uint32_t pt9;
     };
-    union{
-        struct {
-            uint32_t Erase_Time_Multiplier:4;       /**< Multiplier from typical erase time to maximum erase time */
-            uint32_t Erase_Type_1_Time:7;           /**< Erase Type 1 Erase, Typical time */
-            uint32_t Erase_Type_2_Time:7;           /**< Erase Type 2 Erase, Typical time */
-            uint32_t Erase_Type_3_Time:7;           /**< Erase Type 3 Erase, Typical time */
-            uint32_t Erase_Type_4_Time:7;           /**< Erase Type 4 Erase, Typical time */
-        };
-        uint32_t pt10;
-    };
-    union{
-        struct {
-            uint32_t Page_Program_Time_Multiplier:4;        /**< Multiplier from typical time to max time for Page or byte program*/
-            uint32_t Page_Size:4;                           /**< Page Size */
-            uint32_t Page_Program_Type_1_Time:6;            /**< Page Program Typical time */
-            uint32_t Page_Program_Type_2_Time:5;            /**< Byte Program Typical time, first byte */
-            uint32_t Page_Program_Type_3_Time:5;            /**< Byte Program Typical time, additional byte */
-            uint32_t Erase_Chip_Type_Time:7;                /**< Chip Erase, Typical time */
-            uint32_t :1;
-        };
-        uint32_t pt11;
-    };
-    // ...
-    uint32_t pt12;
-    uint32_t pt13;
-    uint32_t pt14;
-    uint32_t pt15;
-    uint32_t pt16;
-    uint32_t pt17;
-    uint32_t pt18;
-    uint32_t pt19;
-    uint32_t pt20;
-    uint32_t pt21;
-    uint32_t pt22;
-    uint32_t pt23;
-    // ...
+    // union{
+    //     struct {
+    //         uint32_t Erase_Time_Multiplier:4;       /**< Multiplier from typical erase time to maximum erase time */
+    //         uint32_t Erase_Type_1_Time:7;           /**< Erase Type 1 Erase, Typical time */
+    //         uint32_t Erase_Type_2_Time:7;           /**< Erase Type 2 Erase, Typical time */
+    //         uint32_t Erase_Type_3_Time:7;           /**< Erase Type 3 Erase, Typical time */
+    //         uint32_t Erase_Type_4_Time:7;           /**< Erase Type 4 Erase, Typical time */
+    //     };
+    //     uint32_t pt10;
+    // };
+    // union{
+    //     struct {
+    //         uint32_t Page_Program_Time_Multiplier:4;        /**< Multiplier from typical time to max time for Page or byte program*/
+    //         uint32_t Page_Size:4;                           /**< Page Size */
+    //         uint32_t Page_Program_Type_1_Time:6;            /**< Page Program Typical time */
+    //         uint32_t Page_Program_Type_2_Time:5;            /**< Byte Program Typical time, first byte */
+    //         uint32_t Page_Program_Type_3_Time:5;            /**< Byte Program Typical time, additional byte */
+    //         uint32_t Erase_Chip_Type_Time:7;                /**< Chip Erase, Typical time */
+    //         uint32_t :1;
+    //     };
+    //     uint32_t pt11;
+    // };
+    // // ...
+    // uint32_t pt12;
+    // uint32_t pt13;
+    // uint32_t pt14;
+    // uint32_t pt15;
+    // uint32_t pt16;
+    // uint32_t pt17;
+    // uint32_t pt18;
+    // uint32_t pt19;
+    // uint32_t pt20;
+    // uint32_t pt21;
+    // uint32_t pt22;
+    // uint32_t pt23;
+    // // ...
 }little_flash_sfdp_pt_t;
 
 typedef struct {

+ 5 - 6
components/little_flash/src/little_flash.c

@@ -196,12 +196,12 @@ lf_err_t little_flash_sfdp_probe(little_flash_t *lf){
     }
     LF_DEBUG("Parameter Header is OK. The Parameter ID is 0x%04X, Revision is V%d.%d, Length is %d,Parameter Table Pointer is 0x%06lX.",
             sfdp.parameter_id, recv_data[1],recv_data[2],sfdp.parameter_length, sfdp.parameter_pointer);
-    if (sfdp.parameter_length * 4 > sizeof(little_flash_sfdp_pt_t)){
-        LF_WARNING("Table Revision %d.%d parameter_length is too long", sfdp.parameter_major_rev, sfdp.parameter_minor_rev);
-        sfdp.parameter_length = sizeof(little_flash_sfdp_pt_t) / 4;
+
+    if (sfdp.parameter_length < sizeof(little_flash_sfdp_pt_t)/4){
+        LF_WARNING("Table Revision %d.%d parameter_length %d is too short", sfdp.parameter_major_rev, sfdp.parameter_minor_rev,sfdp.parameter_length);
+        return LF_ERR_SFDP_PARAMETER;
     }
-    uint8_t parameter_table[sfdp.parameter_length * 4];
-    little_flash_sfdp_read(lf, sfdp.parameter_pointer, parameter_table, sfdp.parameter_length);
+    little_flash_sfdp_read(lf, sfdp.parameter_pointer, &sfdp.pt, sizeof(little_flash_sfdp_pt_t));
 
     //      [1] = 0xE5    0x20    0xF1    0xFF
     //      [2] = 0xFF    0xFF    0xFF    0x07
@@ -213,7 +213,6 @@ lf_err_t little_flash_sfdp_probe(little_flash_t *lf){
     //      [8] = 0x01    0x00    0x00    0x00
     //      [9] = 0x09    0x00    0x00    0x00
 
-    memcpy(&sfdp.pt, parameter_table, sfdp.parameter_length*4);
     // LF_DEBUG("sfdp.pt Flash_Memory_Density 0x%08X",sfdp.pt.Flash_Memory_Density);
 
     if (sfdp.pt.Flash_Memory_Density & 0x80000000){