Переглянути джерело

add lora transmission protocol

haitao 1 рік тому
батько
коміт
d27572d32b
43 змінених файлів з 7304 додано та 13067 видалено
  1. 2 2
      app/CORE/startup_stm32f2xx.s
  2. 2 2
      app/HARDWARE/sources/malloc.c
  3. 1 1
      app/HARDWARE/sources/nandflash.c
  4. 40 0
      app/MDKProject/.vscode/keil-assistant.log
  5. 6 1
      app/MDKProject/.vscode/settings.json
  6. 3279 8501
      app/MDKProject/JLinkLog.txt
  7. 1315 1470
      app/MDKProject/Listings/lora_gateway.map
  8. 49 52
      app/MDKProject/Listings/startup_stm32f2xx.lst
  9. 264 219
      app/MDKProject/lora_gateway.uvguix.16936
  10. 99 70
      app/MDKProject/lora_gateway.uvoptx
  11. 6 1
      app/MDKProject/lora_gateway.uvprojx
  12. BIN
      app/OBJ/diskio.crf
  13. BIN
      app/OBJ/gateway_message.crf
  14. 4 2
      app/OBJ/gateway_message.d
  15. BIN
      app/OBJ/lora_gateway.axf
  16. 31 2
      app/OBJ/lora_gateway.build_log.htm
  17. 1416 2401
      app/OBJ/lora_gateway.htm
  18. 1 0
      app/OBJ/lora_gateway.lnp
  19. 1 4
      app/OBJ/lora_gateway.sct
  20. 62 23
      app/OBJ/lora_gateway_Target 1.dep
  21. 4 1
      app/OBJ/lora_gateway_sct.Bak
  22. BIN
      app/OBJ/main.crf
  23. BIN
      app/OBJ/malloc.crf
  24. BIN
      app/OBJ/myfile.crf
  25. BIN
      app/OBJ/nandflash.crf
  26. BIN
      app/OBJ/node_message.crf
  27. 37 0
      app/OBJ/node_message.d
  28. BIN
      app/OBJ/protocol.crf
  29. 2 1
      app/OBJ/protocol.d
  30. BIN
      app/OBJ/system_stm32f2xx.crf
  31. BIN
      app/OBJ/task.crf
  32. 1 1
      app/OBJ/task.d
  33. 9 13
      app/SYSTEM/includes/gateway_message.h
  34. 1 0
      app/SYSTEM/includes/myFile.h
  35. 64 0
      app/SYSTEM/includes/node_message.h
  36. 12 0
      app/SYSTEM/includes/protocol.h
  37. 270 38
      app/SYSTEM/source/gateway_message.c
  38. 53 0
      app/SYSTEM/source/myFile.c
  39. 44 0
      app/SYSTEM/source/node_message.c
  40. 194 123
      app/SYSTEM/source/protocol.c
  41. 27 134
      app/SYSTEM/source/task.c
  42. 1 1
      app/USER/FatFS/src/diskio.c
  43. 7 4
      app/USER/main.c

+ 2 - 2
app/CORE/startup_stm32f2xx.s

@@ -37,13 +37,13 @@ Stack_Size      EQU     0x00004000
 
                 AREA    STACK, NOINIT, READWRITE, ALIGN=3
 Stack_Mem       SPACE   Stack_Size
-__initial_sp    EQU     0x20000000 + Stack_Size
+__initial_sp
 
 ; <h> Heap Configuration
 ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 ; </h>
 
-Heap_Size       EQU     0x00020000
+Heap_Size       EQU     0x00004000
 
                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3
 __heap_base

+ 2 - 2
app/HARDWARE/sources/malloc.c

@@ -1,7 +1,7 @@
 #include "malloc.h"	    
 
 
-#if 0
+
 //内存池(32字节对齐)
 __align(32) uint8_t mem1base[MEM1_MAX_SIZE];													//内部SRAM内存池
 __align(32) uint8_t mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));					//外部SRAM内存池
@@ -214,7 +214,7 @@ void *myrealloc(uint8_t memx,void *ptr,uint32_t size)
 	
 }
 
-#endif
+
 
 
 

+ 1 - 1
app/HARDWARE/sources/nandflash.c

@@ -923,7 +923,7 @@ uint8_t NAND_Init(void)
 	Status = NAND_BuildLUT();	/* 建立块管理表 LUT = Look up table */
 	if(Status==NAND_FAIL)     //其可能导致的原因是nandflash没有初始化进行格式化
 	{
-   	//NAND_Format();
+   	NAND_Format();
 		NAND_ReadID();
 	}
 	return Status;

+ 40 - 0
app/MDKProject/.vscode/keil-assistant.log

@@ -55,3 +55,43 @@
 
 [info] Log at : 2023/8/7|08:34:28|GMT+0800
 
+[info] Log at : 2023/8/7|10:15:06|GMT+0800
+
+[info] Log at : 2023/8/7|14:01:32|GMT+0800
+
+[info] Log at : 2023/8/7|14:01:37|GMT+0800
+
+[info] Log at : 2023/8/7|16:00:31|GMT+0800
+
+[info] Log at : 2023/8/8|08:34:53|GMT+0800
+
+[info] Log at : 2023/8/8|08:35:17|GMT+0800
+
+[info] Log at : 2023/8/8|08:51:25|GMT+0800
+
+[info] Log at : 2023/8/8|09:02:57|GMT+0800
+
+[info] Log at : 2023/8/8|09:03:00|GMT+0800
+
+[info] Log at : 2023/8/8|11:19:54|GMT+0800
+
+[info] Log at : 2023/8/8|11:20:42|GMT+0800
+
+[info] Log at : 2023/8/9|08:43:38|GMT+0800
+
+[info] Log at : 2023/8/9|08:43:58|GMT+0800
+
+[info] Log at : 2023/8/9|08:44:02|GMT+0800
+
+[info] Log at : 2023/8/9|09:37:01|GMT+0800
+
+[info] Log at : 2023/8/9|10:07:56|GMT+0800
+
+[info] Log at : 2023/8/9|15:57:25|GMT+0800
+
+[info] Log at : 2023/8/10|08:32:26|GMT+0800
+
+[info] Log at : 2023/8/10|11:13:48|GMT+0800
+
+[info] Log at : 2023/8/11|08:29:18|GMT+0800
+

+ 6 - 1
app/MDKProject/.vscode/settings.json

@@ -1,5 +1,10 @@
 {
     "files.associations": {
-        "bsp.h": "c"
+        "bsp.h": "c",
+        "node_message.h": "c",
+        "gateway_message.h": "c",
+        "limits": "c",
+        "memory": "c",
+        "protocol.h": "c"
     }
 }

Різницю між файлами не показано, бо вона завелика
+ 3279 - 8501
app/MDKProject/JLinkLog.txt


Різницю між файлами не показано, бо вона завелика
+ 1315 - 1470
app/MDKProject/Listings/lora_gateway.map


+ 49 - 52
app/MDKProject/Listings/startup_stm32f2xx.lst

@@ -61,42 +61,40 @@ ARM Macro Assembler    Page 1
 =3
    39 00000000         Stack_Mem
                                SPACE            Stack_Size
-   40 00004000 20004000 
-                       __initial_sp
+   40 00004000         __initial_sp
+   41 00004000         
 
 
 
 ARM Macro Assembler    Page 2 
 
 
-                               EQU              0x20000000 + Stack_Size
-   41 00004000         
    42 00004000         ; <h> Heap Configuration
    43 00004000         ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
    44 00004000         ; </h>
    45 00004000         
-   46 00004000 00020000 
+   46 00004000 00004000 
                        Heap_Size
-                               EQU              0x00020000
+                               EQU              0x00004000
    47 00004000         
    48 00004000                 AREA             HEAP, NOINIT, READWRITE, ALIGN=
 3
    49 00000000         __heap_base
    50 00000000         Heap_Mem
                                SPACE            Heap_Size
-   51 00020000         __heap_limit
-   52 00020000         
-   53 00020000                 PRESERVE8
-   54 00020000                 THUMB
-   55 00020000         
-   56 00020000         
-   57 00020000         ; Vector Table Mapped to Address 0 at Reset
-   58 00020000                 AREA             RESET, DATA, READONLY
+   51 00004000         __heap_limit
+   52 00004000         
+   53 00004000                 PRESERVE8
+   54 00004000                 THUMB
+   55 00004000         
+   56 00004000         
+   57 00004000         ; Vector Table Mapped to Address 0 at Reset
+   58 00004000                 AREA             RESET, DATA, READONLY
    59 00000000                 EXPORT           __Vectors
    60 00000000                 EXPORT           __Vectors_End
    61 00000000                 EXPORT           __Vectors_Size
    62 00000000         
-   63 00000000 20004000 
+   63 00000000 00000000 
                        __Vectors
                                DCD              __initial_sp ; Top of Stack
    64 00000004 00000000        DCD              Reset_Handler ; Reset Handler
@@ -128,14 +126,14 @@ ARM Macro Assembler    Page 2
    81 00000040 00000000        DCD              WWDG_IRQHandler ; Window WatchD
                                                             og                 
                                                                                
+                                                                
+   82 00000044 00000000        DCD              PVD_IRQHandler ; PVD through EX
 
 
 
 ARM Macro Assembler    Page 3 
 
 
-                                                                
-   82 00000044 00000000        DCD              PVD_IRQHandler ; PVD through EX
                                                             TI Line detection  
                                                                                
                                                                
@@ -193,14 +191,14 @@ ARM Macro Assembler    Page 3
                                                             Stream 4           
                                                                                
                                                                  
+   97 00000080 00000000        DCD              DMA1_Stream5_IRQHandler ; DMA1 
+                                                            Stream 5           
 
 
 
 ARM Macro Assembler    Page 4 
 
 
-   97 00000080 00000000        DCD              DMA1_Stream5_IRQHandler ; DMA1 
-                                                            Stream 5           
                                                                                
                                                                  
    98 00000084 00000000        DCD              DMA1_Stream6_IRQHandler ; DMA1 
@@ -258,14 +256,14 @@ ARM Macro Assembler    Page 4
                                                                                
                                                                    
   113 000000C0 00000000        DCD              I2C1_ER_IRQHandler ; I2C1 Error
+                                                                               
+                                                                               
 
 
 
 ARM Macro Assembler    Page 5 
 
 
-                                                                               
-                                                                               
                                                                    
   114 000000C4 00000000        DCD              I2C2_EV_IRQHandler ; I2C2 Event
                                                                                
@@ -323,14 +321,14 @@ ARM Macro Assembler    Page 5
   129 00000100 00000000        DCD              FSMC_IRQHandler ; FSMC         
                                                                                
                                                                             
+  130 00000104 00000000        DCD              SDIO_IRQHandler ; SDIO         
+                                                                               
 
 
 
 ARM Macro Assembler    Page 6 
 
 
-  130 00000104 00000000        DCD              SDIO_IRQHandler ; SDIO         
-                                                                               
                                                                             
   131 00000108 00000000        DCD              TIM5_IRQHandler ; TIM5         
                                                                                
@@ -388,14 +386,14 @@ ARM Macro Assembler    Page 6
   146 00000144 00000000        DCD              CAN2_RX1_IRQHandler ; CAN2 RX1 
                                                                                
                                                                                
+                                                                    
+  147 00000148 00000000        DCD              CAN2_SCE_IRQHandler ; CAN2 SCE 
 
 
 
 ARM Macro Assembler    Page 7 
 
 
-                                                                    
-  147 00000148 00000000        DCD              CAN2_SCE_IRQHandler ; CAN2 SCE 
                                                                                
                                                                                
                                                                     
@@ -453,14 +451,14 @@ ARM Macro Assembler    Page 7
   163 00000184         
   164 00000184 00000184 
                        __Vectors_Size
+                               EQU              __Vectors_End - __Vectors
+  165 00000184         
 
 
 
 ARM Macro Assembler    Page 8 
 
 
-                               EQU              __Vectors_End - __Vectors
-  165 00000184         
   166 00000184                 AREA             |.text|, CODE, READONLY
   167 00000000         
   168 00000000         ; Reset handler
@@ -518,14 +516,14 @@ K]
   210 00000014         DebugMon_Handler
                                PROC
   211 00000014                 EXPORT           DebugMon_Handler           [WEA
+K]
+  212 00000014 E7FE            B                .
 
 
 
 ARM Macro Assembler    Page 9 
 
 
-K]
-  212 00000014 E7FE            B                .
   213 00000016                 ENDP
   214 00000016         PendSV_Handler
                                PROC
@@ -583,14 +581,14 @@ K]
    [WEAK]
   244 0000001A                 EXPORT           CAN1_TX_IRQHandler             
    [WEAK]
+  245 0000001A                 EXPORT           CAN1_RX0_IRQHandler            
+   [WEAK]
 
 
 
 ARM Macro Assembler    Page 10 
 
 
-  245 0000001A                 EXPORT           CAN1_RX0_IRQHandler            
-   [WEAK]
   246 0000001A                 EXPORT           CAN1_RX1_IRQHandler            
    [WEAK]
   247 0000001A                 EXPORT           CAN1_SCE_IRQHandler            
@@ -648,14 +646,14 @@ ARM Macro Assembler    Page 10
   273 0000001A                 EXPORT           FSMC_IRQHandler                
    [WEAK]
   274 0000001A                 EXPORT           SDIO_IRQHandler                
+   [WEAK]
+  275 0000001A                 EXPORT           TIM5_IRQHandler                
 
 
 
 ARM Macro Assembler    Page 11 
 
 
-   [WEAK]
-  275 0000001A                 EXPORT           TIM5_IRQHandler                
    [WEAK]
   276 0000001A                 EXPORT           SPI3_IRQHandler                
    [WEAK]
@@ -713,14 +711,14 @@ ARM Macro Assembler    Page 11
    [WEAK]
   303 0000001A                 EXPORT           DCMI_IRQHandler                
    [WEAK]
+  304 0000001A                 EXPORT           CRYP_IRQHandler                
+   [WEAK]
 
 
 
 ARM Macro Assembler    Page 12 
 
 
-  304 0000001A                 EXPORT           CRYP_IRQHandler                
-   [WEAK]
   305 0000001A                 EXPORT           HASH_RNG_IRQHandler            
    [WEAK]
   306 0000001A         
@@ -778,14 +776,14 @@ ARM Macro Assembler    Page 12
   358 0000001A         SPI3_IRQHandler
   359 0000001A         UART4_IRQHandler
   360 0000001A         UART5_IRQHandler
+  361 0000001A         TIM6_DAC_IRQHandler
+  362 0000001A         TIM7_IRQHandler
 
 
 
 ARM Macro Assembler    Page 13 
 
 
-  361 0000001A         TIM6_DAC_IRQHandler
-  362 0000001A         TIM7_IRQHandler
   363 0000001A         DMA2_Stream0_IRQHandler
   364 0000001A         DMA2_Stream1_IRQHandler
   365 0000001A         DMA2_Stream2_IRQHandler
@@ -864,7 +862,16 @@ Symbol: Stack_Mem
    Uses
       None
 Comment: Stack_Mem unused
-2 symbols
+__initial_sp 00004000
+
+Symbol: __initial_sp
+   Definitions
+      At line 40 in file ..\CORE\startup_stm32f2xx.s
+   Uses
+      At line 63 in file ..\CORE\startup_stm32f2xx.s
+      At line 400 in file ..\CORE\startup_stm32f2xx.s
+
+3 symbols
 
 
 
@@ -895,7 +902,7 @@ Symbol: __heap_base
    Uses
       At line 401 in file ..\CORE\startup_stm32f2xx.s
 Comment: __heap_base used once
-__heap_limit 00020000
+__heap_limit 00004000
 
 Symbol: __heap_limit
    Definitions
@@ -1869,7 +1876,7 @@ Symbol: WWDG_IRQHandler
 ARM Macro Assembler    Page 1 Alphabetic symbol ordering
 Absolute symbols
 
-Heap_Size 00020000
+Heap_Size 00004000
 
 Symbol: Heap_Size
    Definitions
@@ -1884,8 +1891,7 @@ Symbol: Stack_Size
       At line 36 in file ..\CORE\startup_stm32f2xx.s
    Uses
       At line 39 in file ..\CORE\startup_stm32f2xx.s
-      At line 40 in file ..\CORE\startup_stm32f2xx.s
-
+Comment: Stack_Size used once
 __Vectors_Size 00000184
 
 Symbol: __Vectors_Size
@@ -1894,16 +1900,7 @@ Symbol: __Vectors_Size
    Uses
       At line 61 in file ..\CORE\startup_stm32f2xx.s
 Comment: __Vectors_Size used once
-__initial_sp 20004000
-
-Symbol: __initial_sp
-   Definitions
-      At line 40 in file ..\CORE\startup_stm32f2xx.s
-   Uses
-      At line 63 in file ..\CORE\startup_stm32f2xx.s
-      At line 400 in file ..\CORE\startup_stm32f2xx.s
-
-4 symbols
+3 symbols
 
 
 

Різницю між файлами не показано, бо вона завелика
+ 264 - 219
app/MDKProject/lora_gateway.uvguix.16936


+ 99 - 70
app/MDKProject/lora_gateway.uvoptx

@@ -153,12 +153,29 @@
           <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F2xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F207ZGTx$CMSIS\Flash\STM32F2xx_1024.FLM))</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>131</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>0</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>0</BreakIfRCount>
+          <Filename>..\SYSTEM\source\gateway_message.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression></Expression>
+        </Bp>
+      </Breakpoint>
       <MemoryWindow1>
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>8</SubType>
-          <ItemText>&amp;LoRaSettings</ItemText>
+          <ItemText>paramString</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
@@ -324,6 +341,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>9</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\SYSTEM\source\node_message.c</PathWithFileName>
+      <FilenameWithoutPath>node_message.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -334,7 +363,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -346,7 +375,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -358,7 +387,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -370,7 +399,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -382,7 +411,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -394,7 +423,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -406,7 +435,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -418,7 +447,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -430,7 +459,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -442,7 +471,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -454,7 +483,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -466,7 +495,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -478,7 +507,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -490,7 +519,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -502,7 +531,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -514,7 +543,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -526,7 +555,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -538,7 +567,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -550,7 +579,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -562,7 +591,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -574,7 +603,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -586,7 +615,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -598,7 +627,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -610,7 +639,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -622,7 +651,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -634,7 +663,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -646,7 +675,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -658,7 +687,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -670,7 +699,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +711,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -694,7 +723,7 @@
     </File>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -708,13 +737,13 @@
 
   <Group>
     <GroupName>CORE</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -734,7 +763,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -746,7 +775,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -758,7 +787,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -770,7 +799,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -782,7 +811,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -794,7 +823,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -806,7 +835,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -818,7 +847,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -830,7 +859,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -844,13 +873,13 @@
 
   <Group>
     <GroupName>FatFS</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -862,7 +891,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -874,7 +903,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -894,7 +923,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <FileNumber>54</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -906,7 +935,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -918,7 +947,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <FileNumber>56</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -930,7 +959,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>56</FileNumber>
+      <FileNumber>57</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -942,7 +971,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>57</FileNumber>
+      <FileNumber>58</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -954,7 +983,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>58</FileNumber>
+      <FileNumber>59</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -966,7 +995,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>59</FileNumber>
+      <FileNumber>60</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -986,7 +1015,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>60</FileNumber>
+      <FileNumber>61</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -998,7 +1027,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>61</FileNumber>
+      <FileNumber>62</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1010,7 +1039,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>62</FileNumber>
+      <FileNumber>63</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1022,7 +1051,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>63</FileNumber>
+      <FileNumber>64</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1034,7 +1063,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>64</FileNumber>
+      <FileNumber>65</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1046,7 +1075,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>65</FileNumber>
+      <FileNumber>66</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1058,7 +1087,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>66</FileNumber>
+      <FileNumber>67</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1070,7 +1099,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>67</FileNumber>
+      <FileNumber>68</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1082,7 +1111,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>68</FileNumber>
+      <FileNumber>69</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1094,7 +1123,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>69</FileNumber>
+      <FileNumber>70</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1114,7 +1143,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>70</FileNumber>
+      <FileNumber>71</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1126,7 +1155,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>71</FileNumber>
+      <FileNumber>72</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1138,7 +1167,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>72</FileNumber>
+      <FileNumber>73</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1158,7 +1187,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>73</FileNumber>
+      <FileNumber>74</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1170,7 +1199,7 @@
     </File>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>74</FileNumber>
+      <FileNumber>75</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 6 - 1
app/MDKProject/lora_gateway.uvprojx

@@ -206,7 +206,7 @@
             <Ro3Chk>0</Ro3Chk>
             <Ir1Chk>1</Ir1Chk>
             <Ir2Chk>0</Ir2Chk>
-            <Ra1Chk>1</Ra1Chk>
+            <Ra1Chk>0</Ra1Chk>
             <Ra2Chk>0</Ra2Chk>
             <Ra3Chk>0</Ra3Chk>
             <Im1Chk>1</Im1Chk>
@@ -427,6 +427,11 @@
               <FileType>1</FileType>
               <FilePath>..\SYSTEM\source\protocol.c</FilePath>
             </File>
+            <File>
+              <FileName>node_message.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\SYSTEM\source\node_message.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

BIN
app/OBJ/diskio.crf


BIN
app/OBJ/gateway_message.crf


+ 4 - 2
app/OBJ/gateway_message.d

@@ -1,4 +1,7 @@
 ..\obj\gateway_message.o: ..\SYSTEM\source\gateway_message.c
+..\obj\gateway_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gateway_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gateway_message.o: ..\SYSTEM\includes\protocol.h
 ..\obj\gateway_message.o: ..\SYSTEM\includes\gateway_message.h
 ..\obj\gateway_message.o: ..\USER\stm32f2xx.h
 ..\obj\gateway_message.o: ..\CORE\core_cm3.h
@@ -34,5 +37,4 @@
 ..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_usart.h
 ..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_wwdg.h
 ..\obj\gateway_message.o: ..\Libraries\inc\misc.h
-..\obj\gateway_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
-..\obj\gateway_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\gateway_message.o: ..\HARDWARE\includes\malloc.h

BIN
app/OBJ/lora_gateway.axf


+ 31 - 2
app/OBJ/lora_gateway.build_log.htm

@@ -22,12 +22,41 @@ Dialog DLL:      TCM.DLL V1.36.5.0
  
 <h2>Project:</h2>
 D:\Project\Lora_gateway_sx1278\app\MDKProject\lora_gateway.uvprojx
-Project File Date:  08/02/2023
+Project File Date:  08/11/2023
 
 <h2>Output:</h2>
 *** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin'
 Build target 'Target 1'
-"..\OBJ\lora_gateway.axf" - 0 Error(s), 0 Warning(s).
+compiling gateway_message.c...
+..\SYSTEM\includes\gateway_message.h(106): warning:  #1295-D: Deprecated declaration get_gateway_config_params - give arg types
+  GATEWAY_PARAMS *get_gateway_config_params();
+..\SYSTEM\includes\protocol.h(12): warning:  #1-D: last line of file ends without a newline
+  #endif
+..\SYSTEM\source\gateway_message.c(43): warning:  #223-D: function "sprintf" declared implicitly
+  			sprintf(nodeStart,"node_%d",nodeIndex);
+..\SYSTEM\source\gateway_message.c(85): warning:  #223-D: function "sprintf" declared implicitly
+          sprintf(device, "\"device_%d\":", deviceIndex);
+..\SYSTEM\source\gateway_message.c(71): warning:  #177-D: variable "deviceString"  was declared but never referenced
+      char *deviceString = (char *)nodestring; // 用于移位解析device设备信息
+..\SYSTEM\source\gateway_message.c(170): warning:  #1182-D: a declaration cannot have a label
+          NODE_READ_DLT645_COMMAND *read_dlt645_command = malloc(sizeof(NODE_READ_DLT645_COMMAND));
+..\SYSTEM\source\gateway_message.c(188): warning:  #1182-D: a declaration cannot have a label
+          NODE_READ_MODBUS_COMMAND *read_modbus_command = malloc(sizeof(NODE_READ_MODBUS_COMMAND));
+..\SYSTEM\source\gateway_message.c(166): warning:  #546-D: transfer of control bypasses initialization of:
+            variable "read_dlt645_command"  (declared at line 170)
+            variable "read_modbus_command"  (declared at line 188)
+      switch (device->protocol)
+      ^
+..\SYSTEM\source\gateway_message.c(229): warning:  #223-D: function "sscanf" declared implicitly
+      sscanf(ptr, "%[^\"],", value);
+..\SYSTEM\source\gateway_message.c(247): warning:  #223-D: function "sprintf" declared implicitly
+      sprintf(node_index, "node_%d", nodeNum);
+..\SYSTEM\source\gateway_message.c(248): warning:  #167-D: argument of type "uint8_t *" is incompatible with parameter of type "const char *"
+      strstr(ptr, node_index); // 将指针指向第一个节点
+..\SYSTEM\source\gateway_message.c: 11 warnings, 0 errors
+linking...
+Program Size: Code=30132 RO-data=176472 RW-data=204 ZI-data=662564  
+"..\OBJ\lora_gateway.axf" - 0 Error(s), 11 Warning(s).
 
 <h2>Software Packages used:</h2>
 

Різницю між файлами не показано, бо вона завелика
+ 1416 - 2401
app/OBJ/lora_gateway.htm


+ 1 - 0
app/OBJ/lora_gateway.lnp

@@ -7,6 +7,7 @@
 "..\obj\gateway_message.o"
 "..\obj\myfile.o"
 "..\obj\protocol.o"
+"..\obj\node_message.o"
 "..\obj\misc.o"
 "..\obj\stm32f2xx_adc.o"
 "..\obj\stm32f2xx_can.o"

+ 1 - 4
app/OBJ/lora_gateway.sct

@@ -9,10 +9,7 @@ LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
    .ANY (+RO)
    .ANY (+XO)
   }
-  RW_RAM1 0x68000000 0x00080000  {  ; RW data
-   .ANY (+RW +ZI)
-  }
-  RW_IRAM1 0x20000000 0x00020000  {
+  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
    .ANY (+RW +ZI)
   }
 }

Різницю між файлами не показано, бо вона завелика
+ 62 - 23
app/OBJ/lora_gateway_Target 1.dep


+ 4 - 1
app/OBJ/lora_gateway_sct.Bak

@@ -9,7 +9,10 @@ LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
    .ANY (+RO)
    .ANY (+XO)
   }
-  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
+  RW_RAM1 0x68000000 0x00080000  {  ; RW data
+   .ANY (+RW +ZI)
+  }
+  RW_IRAM1 0x20000000 0x00020000  {
    .ANY (+RW +ZI)
   }
 }

BIN
app/OBJ/main.crf


BIN
app/OBJ/malloc.crf


BIN
app/OBJ/myfile.crf


BIN
app/OBJ/nandflash.crf


BIN
app/OBJ/node_message.crf


+ 37 - 0
app/OBJ/node_message.d

@@ -0,0 +1,37 @@
+..\obj\node_message.o: ..\SYSTEM\source\node_message.c
+..\obj\node_message.o: ..\SYSTEM\includes\node_message.h
+..\obj\node_message.o: ..\USER\stm32f2xx.h
+..\obj\node_message.o: ..\CORE\core_cm3.h
+..\obj\node_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\node_message.o: ..\CORE\core_cmInstr.h
+..\obj\node_message.o: ..\CORE\core_cmFunc.h
+..\obj\node_message.o: ..\USER\system_stm32f2xx.h
+..\obj\node_message.o: ..\USER\stm32f2xx_conf.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\node_message.o: ..\USER\stm32f2xx.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\node_message.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\node_message.o: ..\Libraries\inc\misc.h
+..\obj\node_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h

BIN
app/OBJ/protocol.crf


+ 2 - 1
app/OBJ/protocol.d

@@ -1,9 +1,9 @@
 ..\obj\protocol.o: ..\SYSTEM\source\protocol.c
 ..\obj\protocol.o: ..\SYSTEM\includes\protocol.h
-..\obj\protocol.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\protocol.o: ..\SYSTEM\includes\gateway_message.h
 ..\obj\protocol.o: ..\USER\stm32f2xx.h
 ..\obj\protocol.o: ..\CORE\core_cm3.h
+..\obj\protocol.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
 ..\obj\protocol.o: ..\CORE\core_cmInstr.h
 ..\obj\protocol.o: ..\CORE\core_cmFunc.h
 ..\obj\protocol.o: ..\USER\system_stm32f2xx.h
@@ -37,3 +37,4 @@
 ..\obj\protocol.o: ..\Libraries\inc\misc.h
 ..\obj\protocol.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h
 ..\obj\protocol.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\protocol.o: ..\SYSTEM\includes\node_message.h

BIN
app/OBJ/system_stm32f2xx.crf


BIN
app/OBJ/task.crf


+ 1 - 1
app/OBJ/task.d

@@ -43,7 +43,6 @@
 ..\obj\task.o: ..\UCOS-II\Source\ucos_ii.h
 ..\obj\task.o: ..\UCOS-II\CONFIG\os_cfg.h
 ..\obj\task.o: ..\UCOS-II\Ports\os_cpu.h
-..\obj\task.o: ..\HARDWARE\includes\malloc.h
 ..\obj\task.o: ..\HARDWARE\includes\cjson.h
 ..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stddef.h
 ..\obj\task.o: ..\SYSTEM\includes\myFile.h
@@ -57,6 +56,7 @@
 ..\obj\task.o: ..\USER\demo_nand_fatfs.h
 ..\obj\task.o: ..\SYSTEM\includes\gateway_message.h
 ..\obj\task.o: ..\HARDWARE\includes\log.h
+..\obj\task.o: ..\HARDWARE\includes\malloc.h
 ..\obj\task.o: ..\Sx1278\radio\sx1276.h
 ..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
 ..\obj\task.o: ..\Sx1278\radio\radio.h

+ 9 - 13
app/SYSTEM/includes/gateway_message.h

@@ -4,22 +4,13 @@
 
 
 
-//枚举了协议类型
-enum {DLT645_07=1,MODBUS_READ,DLT645_97,MODBUS_WRITE}PROTOCOL;
-//枚举了数据的格式
-enum {typeInt=1,typeFloat,typeDouble}DATAType;
 
-//大小端
-typedef enum
-{   
-  MModBus_16bitOrder_AB=1,   //大端
-  MModBus_16bitOrder_BA,    
-}MModBus_16bitOrder_t;
 
 // 节点所存储的modbus写命令
 typedef struct _NODE_WRITE_MODBUS_COMMAND
 {
 	uint8_t slaveAddress;
+	uint8_t functionCode;
 	uint8_t dataType;          //数据类型
 	uint8_t slaveAdress;
 	uint8_t keyword[20]; // 所写属性的名称
@@ -31,12 +22,14 @@ typedef struct _NODE_WRITE_MODBUS_COMMAND
 typedef struct _NODE_READ_MODBUS_COMMAND
 {
 	uint8_t slaveAddress;
+	uint8_t functionCode;
 	uint8_t keyword[20]; // 所读属性的名称
 	uint8_t bigLittleFormat;
 	uint8_t dataType;          //数据类型
 	uint16_t registerAddress;  // 寄存器地址
 	uint8_t read_command_flag; // 是否成功读取到的标志
 	uint8_t value[4];          //读取到的数据值
+	uint16_t registerByteNum;
 	uint8_t decimalPoint;
 } NODE_READ_MODBUS_COMMAND;
 // 节点所存储都DLT645读指令
@@ -44,7 +37,7 @@ typedef struct _NODE_READ_DLT645_COMMAND
 {
 	uint8_t deviceID645[6];
 	uint8_t keyword[20];   // 所读属性的名称
-	uint32_t functionCode; // 645数据标识
+	uint32_t Identification; // 645数据标识
 	uint8_t data[9];	   // 读到的数据
 	uint8_t rxLen;		   // 从机应答值的长度
 } NODE_READ_DLT645_COMMAND;
@@ -77,7 +70,10 @@ typedef struct _NODE_PARAMS
 	uint8_t stopBit;	 // 停止位
 	uint8_t flowControl; // 流控制
 	// lora通信的属性设置
-
+	uint8_t RFFrequency;        //载波频率
+	uint8_t SignalBw;           //信号带宽
+	uint8_t SpreadingFactor;    //扩频因子
+	uint8_t ErrorCoding;        //编码率
 	// 包含的设备结构体
 	uint8_t deviceCount;
 	DEVICE_PARAMS *device_params;
@@ -106,6 +102,6 @@ typedef struct _GATEWAY_PARAMS
 	NODE_PARAMS *node_params;
 } GATEWAY_PARAMS;
 
-void addNode(GATEWAY_PARAMS *gateway, const char *nodeId);
+void addGatewayParams(char *gatewayString);
 GATEWAY_PARAMS *get_gateway_config_params();
 #endif

+ 1 - 0
app/SYSTEM/includes/myFile.h

@@ -10,4 +10,5 @@
 void write_file(const char* filename, const char* data, uint32_t length);
 void read_file(const char* filename, char* data);
 void ViewRootDir();
+void DeleteDirFile(const char* filename);
 #endif

+ 64 - 0
app/SYSTEM/includes/node_message.h

@@ -0,0 +1,64 @@
+#ifndef __NODE_MESSAGE_H
+#define __NODE_MESSAGE_H
+#include "stm32f2xx.h"
+
+#define slave
+#ifdef slave
+
+// 存储在本地的枚举了协议类型
+#define	MODBUS_WRITE 4                //本机用于区分读写
+#define	MODBUS_READ  3
+#define	DLT645_07 2
+#define	DLT645_97 1
+
+
+
+
+typedef struct _NODE_DLT645_PARAMS
+{
+    uint32_t dataType645;           //645数据标识
+    uint8_t deviceType645[6];       //645地址
+    uint8_t datalength;
+    uint8_t value[9];             
+}NODE_DLT645_PARAMS;
+typedef struct _NODE_MODBUS_READ
+{
+   uint8_t slaveAddress;
+   uint8_t functionCode;
+   uint16_t registerAddress;
+   uint16_t registerLength;
+   uint8_t dataType;          //数据类型
+   uint8_t precision;
+   uint8_t bigLittleFormat;
+   uint8_t flag;                     //此属性读取是否成功
+   uint8_t callback[4];              //对应读取到的数据存储于此           
+}NODE_MODBUS_READ;
+typedef struct _NODE_MODBUS_WRITE
+{
+   uint8_t slaveAddress;
+   uint8_t functionCode;
+   uint8_t dataType;          //数据类型
+   uint16_t registerAddress;
+   uint16_t registerLength;
+   uint8_t bigLittleFormat;
+   uint8_t flag;                    //写入指令操作是否成功标志
+}NODE_MODBUS_WRITE;
+
+
+typedef struct _PARAMS
+{
+    uint8_t protcol;                //此属性决定用那个协议属性也会包含对应的响应值,其他未涉及到的属性赋值为NULL
+    NODE_DLT645_PARAMS *dlt645_params;
+    NODE_MODBUS_READ *modbus_read;
+    NODE_MODBUS_WRITE *modbus_write;
+}PARAMS;
+typedef struct _NODE_DEVICE_PARAMS
+{
+    uint8_t Index;                  //记录总共有多少个属性
+    PARAMS params[20];              
+}NODE_DEVICE_PARAMS;
+
+NODE_DEVICE_PARAMS *get_node_receive_params();
+#endif
+
+#endif

+ 12 - 0
app/SYSTEM/includes/protocol.h

@@ -0,0 +1,12 @@
+#ifndef __PROTOCOL_H
+#define	__PROTOCOL_H
+#include "gateway_message.h"
+// 解析发过来的数据是modbus还是dlt645 
+#define	MODBUS_WRITE 4                //本机用于区分读写
+#define	MODBUS 3
+#define	DLT645_07 2
+#define	DLT645_97 1
+
+
+
+#endif

+ 270 - 38
app/SYSTEM/source/gateway_message.c

@@ -1,66 +1,298 @@
-#include "gateway_message.h"
+
 #include "string.h"
 #include <stdlib.h>
+#include "protocol.h"
+#include "malloc.h"
+#include "gateway_message.h"
 
-static GATEWAY_PARAMS gateway_config_params = {0};
-
+GATEWAY_PARAMS gateway_config_params = {0};
 
+GATEWAY_PARAMS *get_gateway_config_params()
+{
+    return &gateway_config_params;
+}
 
+void parseStringField(const char *data, const char *field, char *value);
+int parseIntField(const char *data, const char *field);
+void addNode(char *nodestring);
+void addDevice(char *string, NODE_PARAMS *node);
+int extract_substring(const char *input_string, const char *start_token, const char *end_token, char *result);
+void addSensorListParams(char *paramString, DEVICE_PARAMS *device);
 
-GATEWAY_PARAMS *get_gateway_config_params()
+/**
+ * @brief  解析输入字符串网关结构体信息,将数据保存
+ * @param  char *nodestring 输入字符串的数据
+ * @retval 无
+ */
+void addGatewayParams(char *gatewayString)
 {
-		return &gateway_config_params;
+		
+    parseStringField(gatewayString, "\"commandTopic\":\"", (char *)&gateway_config_params.commandTopic);
+    parseStringField(gatewayString, "\"messageTopic\":\"", (char *)&gateway_config_params.messageTopic);
+    parseStringField(gatewayString, "\"deviceId\":\"", (char *)&gateway_config_params.deviceId);
+    parseStringField(gatewayString, "\"host\":\"", (char *)&gateway_config_params.host);
+    gateway_config_params.port = parseIntField(gatewayString, "\"port\":");
+	  gateway_config_params.node_params=NULL;
+    gateway_config_params.pollTime = parseIntField(gatewayString, "\"pollTime\":");
+    uint8_t nodeIndex = 1;
+    char nodeStart[6];
+		char nodeEnd[6];
+		char *nodeString=mymalloc(SRAMEX,5*1024);
+    while (1)
+    {
+			sprintf(nodeStart,"node_%d",nodeIndex);
+			sprintf(nodeEnd,"node_%d",nodeIndex+1);
+			if(extract_substring(gatewayString,nodeStart,nodeEnd,nodeString))
+			{
+				addNode(nodeString);
+				nodeIndex++;
+			}
+			else
+			{
+				break;
+			}
+    }
+		myfree(SRAMEX,nodeString);
+		GATEWAY_PARAMS *get=get_gateway_config_params();
+		GATEWAY_PARAMS *set=get_gateway_config_params();
+		
 }
 
+/**
+ * @brief  解析输入的字符串节点信息,并将此节点信息挂载在网关结构体的节点下面
+ * @param  char *nodestring
+ * @retval 无
+		注:node内包含的设备名称device_1在别的节点下也可能包含,所以在解析节点时要先将数据截取出来让匹配不会越界到别的节点
+ */
+
+void addNode(char *nodestring)
+{
+    // 新增一个节点的设备并解析最外层的节点属性
+    char *deviceString = (char *)nodestring; // 用于移位解析device设备信息
+		NODE_PARAMS *newNode=mymalloc(SRAMIN,sizeof(NODE_PARAMS));
+    newNode->device_params = NULL; // 先将其设备挂载为NULL
+    newNode->nextNode = NULL;      // 下一个设备的挂载为NULL
+    parseStringField(nodestring, "\"nodeId\":\"", (char *)&newNode->node_address);
+    newNode->RFFrequency = parseIntField(nodestring, "\"RFFrequency\":");
+    newNode->SignalBw = parseIntField(nodestring, "\"SignalBw\":");
+    newNode->SpreadingFactor = parseIntField(nodestring, "\"SpreadingFactor\":");
+    newNode->ErrorCoding = parseIntField(nodestring, "\"ErrorCoding\":");
 
- /**
-  * @brief  向网关结构体内新增一个节点信息
-  * @param  cJSON *data_obj 网关结构体信息、const char* nodeId新增的节点ID
-  * @retval 无
-  */
-void addNode(GATEWAY_PARAMS* gateway, const char* nodeId) {
-    // 增加节点数量
-    NODE_PARAMS* newNode = (NODE_PARAMS*)malloc(sizeof(NODE_PARAMS));
-    strcpy((char *)&newNode->node_address,nodeId);
-    newNode->device_params = NULL;         //先将其设备挂载为NULL
-    newNode->nextNode = NULL;              //下一个设备的挂载为NULL
+    uint8_t deviceIndex = 1;
+		char *device=mymalloc(SRAMIN,20);
+    while (1)
+    {
+        sprintf(device, "\"device_%d\":", deviceIndex);
+        // 判断内部是否包含node_num有就不断的++,
+        char *deviceString = strstr(nodestring, device);
+        if (deviceString)
+        {
+            addDevice(deviceString, newNode); // 往此节点下挂载设备信息
+            deviceIndex++;
+        }
+        else
+        {
+            break;
+        }
+        /* code */
+    }
+    myfree(SRAMIN,device);
 
     // 添加节点到网关链表中
-    if (gateway->node_params == NULL) {
-        gateway->node_params = newNode;
-    } 
-		else 
-		{
-        NODE_PARAMS* current = gateway->node_params;
-        while (current->nextNode != NULL) {
+    if (gateway_config_params.node_params == NULL)
+    {
+        gateway_config_params.node_params = newNode;
+    }
+    else
+    {
+        NODE_PARAMS *current = gateway_config_params.node_params;
+        while (current->nextNode != NULL)
+        {
             current = current->nextNode;
         }
         current->nextNode = newNode;
     }
 }
- /**
-  * @brief  向节点下新增设备
-  * @param  NODE_PARAMS* node往那个节点中加入新的设备,const char* deviceName将设备地址当作其唯一标识
-  * @retval 无
-  */
-void addDevice(NODE_PARAMS* node,const uint8_t* deviceName)
+/**
+ * @brief  解析输入字段的字符串,解析出属于该节点下的设备信息
+ * @param  uint8_t *string输入的字符串数据,NODE_PARAMS *node节点信息
+ * @retval 无
+ */
+void addDevice(char *deviceString, NODE_PARAMS *node)
 {
-	 // 创建新设备页
-    DEVICE_PARAMS* newDevicePage = (DEVICE_PARAMS*)malloc(sizeof(DEVICE_PARAMS));
-
+		char *paramString=(char *)deviceString;                                          //属性指针
+    // 创建新设备页
+    DEVICE_PARAMS *newDevicePage = (DEVICE_PARAMS *)malloc(sizeof(DEVICE_PARAMS));
     newDevicePage->nextDevice = NULL;
+    parseStringField(deviceString, "\"deviceId\":\"", (char *)&newDevicePage->deviceID);
+    newDevicePage->protocol = parseIntField(deviceString, "\"protocol\":");
+		newDevicePage->params = malloc(sizeof(PARAMS_PROTOCOL_COMMAND));
+		
+  	paramString=strstr(paramString,"\"sensorList\":[");                             //找到该节点的轮询上发属性
+	  while(1)                                                                           //此处数据是以数组形式存储所以解析方法和上面不一样
+		{
+			addSensorListParams(paramString,newDevicePage);                                //解析一个属性并挂载该属性于该属性下
+			paramString=strstr(paramString,"}");                                           //移动到下一条属性
+			paramString++;
+			if(paramString[0]==']')
+			{
+				paramString=(char *)deviceString;                                              //复原指针位置
+				break;                                                                         //找到了结束符,跳出循环
+			}
+		}                                 
+		//解析下发的mqtt存储信息下发控制指令
+		if(newDevicePage->protocol==MODBUS)
+		{
+			paramString=strstr(paramString,"\"commandList\":[");
+			while(1)
+			{
+				
+			}
+		}
     // 添加设备页到链表末尾
-    if (node->device_params == NULL) {
+    if (node->device_params == NULL)
+    {
         node->device_params = newDevicePage;
-    } else {
-        DEVICE_PARAMS* current = node->device_params;
-        while (current->nextDevice != NULL) {
+    }
+    else
+    {
+        DEVICE_PARAMS *current = node->device_params;
+        while (current->nextDevice != NULL)
+        {
             current = current->nextDevice;
         }
         current->nextDevice = newDevicePage;
     }
 }
+/**
+ * @brief  解析输入字符串的paramString数据,将数据保存到至该设备结构体下,此处解析sensorList
+ * @param  uint8_t *paramString输入的字符串数据,DEVICE_PARAMS *device节点信息
+ * @retval 无
+ */
+void addSensorListParams(char *paramString, DEVICE_PARAMS *device)
+{
+    
 
-void addParams()
+    switch (device->protocol)
+    {
+    case DLT645_97:
+    case DLT645_07:
+        NODE_READ_DLT645_COMMAND *read_dlt645_command = malloc(sizeof(NODE_READ_DLT645_COMMAND));
+        read_dlt645_command->Identification = parseIntField(paramString, "\"identifier645\":");
+        parseStringField(paramString, "\"identifier\":\"", (char *)&read_dlt645_command->keyword);
+        if (device->params->node_read_dlt645_command == NULL)
+        {
+            device->params->node_read_dlt645_command= read_dlt645_command;
+        }
+        else
+        {
+            PARAMS_PROTOCOL_COMMAND *current= device->params;
+            while (current->nextParams->node_read_modbus_command!= NULL)
+            {
+                current = current->nextParams;
+            }
+            current->nextParams->node_read_dlt645_command = read_dlt645_command;
+        }
+        break;
+    case MODBUS:
+        NODE_READ_MODBUS_COMMAND *read_modbus_command = malloc(sizeof(NODE_READ_MODBUS_COMMAND));
+        read_modbus_command->bigLittleFormat = parseIntField(paramString, "\"bigLittleFormat\":");
+        read_modbus_command->dataType = parseIntField(paramString, "\"dataType\":");
+        read_modbus_command->decimalPoint = parseIntField(paramString, "\"precise\":");
+        read_modbus_command->functionCode = parseIntField(paramString, "\"rFunctionCode\":");
+        read_modbus_command->slaveAddress = parseIntField(paramString, "\"slaveAddress\":");
+        read_modbus_command->registerAddress = parseIntField(paramString, "\"registerAddress\":");
+        read_modbus_command->registerByteNum = parseIntField(paramString, "\"registerByteNum\":");
+        if (device->params->node_read_dlt645_command == NULL)
+        {
+            device->params->node_read_dlt645_command= read_dlt645_command;
+        }
+        else
+        {
+            PARAMS_PROTOCOL_COMMAND *current= device->params;
+            while (current->nextParams!= NULL)
+            {
+                current = current->nextParams;
+            }
+            current->nextParams->node_read_dlt645_command = read_dlt645_command;
+        }
+        break;
+    default:
+        break;
+    }
+		
+}
+/**
+ * @brief  解析输入字符串的paramString数据,将数据保存到至该设备结构体下,此处解析commandList
+ * @param  uint8_t *paramString输入的字符串数据,DEVICE_PARAMS *device节点信息
+ * @retval 无
+ */
+void addCommandListParams(char *paramString, DEVICE_PARAMS *device)
+{
+	
+}
+// 提取int数据
+int parseIntField(const char *data, const char *field)
+{
+    char *ptr = strstr(data, field) + strlen(field);
+    int value;
+    value = strtol(ptr, &ptr, 10);
+    return value;
+}
+
+// 提取string字符串
+void parseStringField(const char *data, const char *field, char *value)
 {
-}
+    char *ptr = strstr(data, field) + strlen(field);
+    sscanf(ptr, "%[^\"],", value);
+}
+
+// 不采用json解析硬解json数据
+void processStringJson(uint8_t *data)
+{
+    GATEWAY_PARAMS *gateway;
+    gateway = get_gateway_config_params();
+    uint8_t *ptr = (uint8_t *)data;
+    parseStringField((char *)&ptr, "\"messageTopic\":\"", (char *)&gateway->messageTopic);
+    parseStringField((char *)&ptr, "\"commandTopic\":\"", (char *)&gateway->commandTopic);
+    gateway->port = parseIntField((char *)&ptr, "\"port\":\"");
+    parseStringField((char *)&ptr, "\"host\":\"", (char *)&gateway->host);
+    parseStringField((char *)&ptr, "\"deviceId\":\"", (char *)&gateway->deviceId);
+    // 解析最外层数据完成,申请空间存储节点信息
+
+    int nodeNum = 1;
+    char *node_index = malloc(10);
+    sprintf(node_index, "node_%d", nodeNum);
+    strstr(ptr, node_index); // 将指针指向第一个节点
+    while (*ptr == NULL)
+    {
+    }
+    free(node_index);
+}
+/**
+ * @brief  从输入的input_string中寻找开始到结束位置的字符串数据,并将数据截取出来,传给result;
+ * @param  input_string输入字符串,start_token字符串起始位置,end_token字符串结束位置,result截取出的字符串
+* @retval 0:没有被截取到的字符串。1:有被截取到的字符串。
+ */
+int extract_substring(const char *input_string, const char *start_token, const char *end_token, char *result) {
+    const char *start_ptr = strstr(input_string, start_token);
+    
+    if (start_ptr == NULL) {
+        return 0;  // 未找到起始标记
+    }
+    
+    start_ptr += strlen(start_token);  // 移动指针到起始标记之后
+    
+    const char *end_ptr = strstr(start_ptr, end_token);
+    
+    if (end_ptr == NULL) {
+        // 如果未找到结束标记,将从起始标记开始的字符串一直复制到 \0 结束
+        strcpy(result, start_ptr);
+    } else {
+        // 找到结束标记,计算截取的长度并复制
+        size_t length = end_ptr - start_ptr;
+        strncpy(result, start_ptr, length);
+        result[length] = '\0';  // 添加字符串结束符
+    }
+		return 1;
+}

+ 53 - 0
app/SYSTEM/source/myFile.c

@@ -190,3 +190,56 @@ void ViewRootDir(void)
 	/* 卸载文件系统 */
 	f_mount(NULL, FS_VOLUME_NAND, 0);
 }
+/*
+*********************************************************************************************************
+*	函 数 名: DeleteDirFile
+*	功能说明: 删除SD卡根目录下的 armfly.txt 文件和 Dir1,Dir2 目录
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+void DeleteDirFile(const char* filename)
+{
+	/* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
+	FRESULT result;
+	FATFS fs;
+	char FileName[50];
+	sprintf(FileName,"0:/%s",filename);
+	uint8_t i;
+
+ 	/* 挂载文件系统 */
+	result = f_mount(&fs, FS_VOLUME_NAND, 0);			/* Mount a logical drive */
+	if (result != FR_OK)
+	{
+		printf("挂载文件系统失败 (%d)\r\n", result);
+	}
+
+	#if 0
+	/* 打开根文件夹 */
+	result = f_opendir(&DirInf, "0:/"); /* 如果不带参数,则从当前目录开始 */
+	if (result != FR_OK)
+	{
+		printf("打开根目录失败(%d)\r\n", result);
+		return;
+	}
+	#endif
+	/* 删除文件 */
+	result = f_unlink(FileName);
+	if (result == FR_OK)
+	{
+		printf("删除文件 %s 成功\r\n",filename);
+	}
+	else if (result == FR_NO_FILE)
+	{
+		printf("没有发现文件或目录 :%s\r\n", filename);
+	}
+	else
+	{
+		printf("删除%s失败(错误代码 = %d) 文件只读或目录非空\r\n",filename,result);
+	}
+	/* 卸载文件系统 */
+	f_mount(NULL, FS_VOLUME_NAND, 0);
+}
+
+
+

+ 44 - 0
app/SYSTEM/source/node_message.c

@@ -0,0 +1,44 @@
+#include "node_message.h"
+#include "stdlib.h"
+static NODE_DEVICE_PARAMS node_receive_params = {0};
+
+
+// 存储在本地的枚举了协议类型
+
+NODE_DEVICE_PARAMS *get_node_receive_params()
+{
+
+	return &node_receive_params;
+}
+/*
+*********************************************************************************************************
+*	函 数 名: free_all_node_params()
+*	功能说明: 释放掉已经占用的空间
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+void free_all_node_params()
+{
+	// 循环的释放空间
+	for (int i = 0; i < node_receive_params.Index; i++)
+	{
+		switch (node_receive_params.params[i].protcol)
+		{
+		case MODBUS_READ:
+			free(node_receive_params.params[i].modbus_read);
+			break;
+		case MODBUS_WRITE:
+			free(node_receive_params.params[i].modbus_write);
+			break;
+		case DLT645_07:
+			free(node_receive_params.params[i].dlt645_params);
+			break;
+		case DLT645_97:
+			free(node_receive_params.params[i].dlt645_params);
+			break;
+		default:
+			break;
+		}
+	}
+}

+ 194 - 123
app/SYSTEM/source/protocol.c

@@ -1,23 +1,50 @@
 #include "protocol.h"
 #include "stdint.h"
-#include "gateway_message.h"
 #include "stdlib.h"
 #include "string.h"
-
-
+#include "node_message.h"
 /*****************************protocol主要为主网关与子节点通讯的协议使用**********************************/
 /*****************************其主要作用主网关给子节点轮询发送数据的编码**********************************/
 /*****************************子节点解析该主网关发送的数据              **********************************/
 /*****************************子节点回应对应的响应                     **********************************/
 /*****************************子节点回应对应的响应的解析               **********************************/
 
-static volatile int deviceNum=0;                           //记录轮询读取设备的结束位置
-static volatile int paramsNum=0;                            //记录轮询读取属性的结束位置
-static volatile int startDeviceNum=0;                       //记录轮询读取设备的开始位置
-static volatile int startParamsNum=0;                       //记录轮询读取设备属性的开始位置
-void insertHexData(uint8_t *String,const uint8_t *hexData,uint8_t insertIndex,uint8_t length);
+static volatile int deviceNum = 0;		// 记录轮询读取设备的结束位置
+static volatile int paramsNum = 0;		// 记录轮询读取属性的结束位置
+static volatile int startDeviceNum = 0; // 记录轮询读取设备的开始位置
+static volatile int startParamsNum = 0; // 记录轮询读取设备属性的开始位置
+void insertHexData(uint8_t *String, const uint8_t *hexData, uint8_t insertIndex, uint8_t length);
+
 
-enum {protocol_dlt645_97=0x08,protocol_modbus,protocol_dlt645_07}PROTOCOL_LENGTH;   //每个协议的数据包长度
+enum
+{
+	protocol_dlt645_97 = 0x08,
+	protocol_modbus_read,
+	protocol_dlt645_07
+} PROTOCOL_LENGTH; // 每个协议的数据包长度用于最开始区分不同协议
+// 枚举采集数据的存储个数
+enum
+{
+	typeInt = 1,
+	typeFloat,
+	typeDouble
+} DATAType;
+// 枚举MODBUS协议具体功能
+enum
+{
+	READ_COIL = 0x01,
+	WRITE_COIL = 0x05,
+	WRITE_COILS = 0x0F,
+	READ_REGISTER = 0x03,
+	WRITE_REFISTER = 0x06,
+	WRITE_REGISTERS = 0x10
+} MODBUS_COMMAND;
+// 大小端
+typedef enum
+{
+	MModBus_16bitOrder_AB = 1, // 大端
+	MModBus_16bitOrder_BA,
+} MModBus_16bitOrder_t;
 /*
 *********************************************************************************************************
 *	函 数 名: void masterSendNodeString(uint8_t nodeIndex)Index下标从0开始
@@ -29,146 +56,129 @@ enum {protocol_dlt645_97=0x08,protocol_modbus,protocol_dlt645_07}PROTOCOL_LENGTH
 				且也要记录每次开始的设备位置和属性位置,方便接收应答信号的解析
 *********************************************************************************************************
 */
-int masterSendNodeString(uint8_t nodeIndex,uint8_t *string,uint16_t *size)
+
+int masterSendNodeString(uint8_t nodeIndex, uint8_t *string, uint16_t *size)
 {
-	startDeviceNum=deviceNum;            //起始位置等于上次结束的位置
-	startParamsNum=paramsNum;           //起始位置等于上次结束的位置
-	int nowDeviceNum=deviceNum;
-	int nowparamsNum=paramsNum;
+	startDeviceNum = deviceNum; // 起始位置等于上次结束的位置
+	startParamsNum = paramsNum; // 起始位置等于上次结束的位置
+	int nowDeviceNum = deviceNum;
+	int nowparamsNum = paramsNum;
 	GATEWAY_PARAMS *gateway;
-	gateway=get_gateway_config_params();
-	//将当前的节点指针指到需要读取的节点位置
-	NODE_PARAMS* currentNode = gateway->node_params;
-	while(nodeIndex)
+	gateway = get_gateway_config_params();
+	// 将当前的节点指针指到需要读取的节点位置
+	NODE_PARAMS *currentNode = gateway->node_params;
+	while (nodeIndex)
 	{
 		currentNode = currentNode->nextNode;
 		nodeIndex--;
 	}
-	string=malloc(257);
-	memset(string,0,257);
-	//将首字符用nodeAdress
-	string[0]=currentNode->node_address[0];
-	string[1]=currentNode->node_address[1];
-	//找到当前的设备结束位置
-	DEVICE_PARAMS* currentDevice=currentNode->device_params;
-	while(!nowDeviceNum)
+	string = malloc(257);
+	memset(string, 0, 257);
+	// 将首字符用nodeAdress
+	string[0] = currentNode->node_address[0];
+	string[1] = currentNode->node_address[1];
+	// 找到当前的设备结束位置
+	DEVICE_PARAMS *currentDevice = currentNode->device_params;
+	while (!nowDeviceNum)
 	{
-		currentDevice=currentDevice->nextDevice;
+		currentDevice = currentDevice->nextDevice;
 		nowDeviceNum--;
 	}
-	PARAMS_PROTOCOL_COMMAND* currentParams=currentDevice->params;
-	//移动位置到结束位置属性的下一位 
-	while(!nowparamsNum)
+	PARAMS_PROTOCOL_COMMAND *currentParams = currentDevice->params;
+	// 移动位置到结束位置属性的下一位
+	while (!nowparamsNum)
 	{
-		currentParams=currentParams->nextParams;
+		currentParams = currentParams->nextParams;
 		nowparamsNum--;
 	}
-	if(currentParams==NULL)
+	if (currentParams == NULL)
 	{
-		currentDevice=currentDevice->nextDevice;
-			//判断当前还有没有设备没有读取了
-			if(currentDevice==NULL)                      //且当前链表无后续设备了则跳出循环
-			{
-				deviceNum=0;                                //将结束位置全部归0
-				paramsNum=0;
-				return -1;
-			}
-			currentParams=currentDevice->params;         //有则更新当前指针位置
-			nowDeviceNum++;
-			nowparamsNum=0;
+		currentDevice = currentDevice->nextDevice;
+		// 判断当前还有没有设备没有读取了
+		if (currentDevice == NULL) // 且当前链表无后续设备了则跳出循环
+		{
+			deviceNum = 0; // 将结束位置全部归0
+			paramsNum = 0;
+			return -1;
+		}
+		currentParams = currentDevice->params; // 有则更新当前指针位置
+		nowDeviceNum++;
+		nowparamsNum = 0;
 	}
-	
-	
-	//最多进行20次循环组成下发数据
-	int i=0;
-	int len=strlen((char *)&string);
+
+	// 最多进行20次循环组成下发数据
+	int i = 0;
+	int len = strlen((char *)&string);
 	do
 	{
-		switch(currentDevice->protocol)
+		switch (currentDevice->protocol)
 		{
-			case MODBUS_READ:
-				insertHexData(string,(uint8_t *)protocol_modbus,len,1);                                                        //插入modbus长度
-			  len++;
-				insertHexData(string,(uint8_t *)MODBUS_READ,len,1);                                                            //插入modbus读指令
-			  len++;
-				insertHexData(string,&currentParams->node_read_modbus_command->dataType,len,1);                                 //插入读取的数据格式
-			  len++;
-			  insertHexData(string,&currentParams->node_read_modbus_command->slaveAddress,len,1);                             //插入modbus从站地址
-				len++;
-				insertHexData(string,(uint8_t *)&currentParams->node_read_modbus_command->registerAddress,len,2);              //插入modbus寄存器地址
-			  len+=2;
-			  insertHexData(string,&currentParams->node_read_modbus_command->decimalPoint,len,1);                            //插入小数点位数
-			  len++;
-				insertHexData(string,&currentParams->node_read_modbus_command->bigLittleFormat,len,1);                         //插入大小端
-			  len++;
+		case MODBUS_READ:
+			insertHexData(string, (uint8_t *)protocol_modbus_read, len, 1); // 插入modbus长度
+			len++;
+			insertHexData(string, &currentParams->node_read_modbus_command->functionCode, len, 1); // 插入读取功能码
+			len++;
+			insertHexData(string, &currentParams->node_read_modbus_command->dataType, len, 1); // 插入读取的数据格式
+			len++;
+			insertHexData(string, &currentParams->node_read_modbus_command->slaveAddress, len, 1); // 插入modbus从站地址
+			len++;
+			insertHexData(string, (uint8_t *)&currentParams->node_read_modbus_command->registerAddress, len, 2); // 插入modbus寄存器地址
+			len += 2;
+			insertHexData(string, &currentParams->node_read_modbus_command->decimalPoint, len, 1); // 插入小数点位数
+			len++;
+			insertHexData(string, &currentParams->node_read_modbus_command->bigLittleFormat, len, 1); // 插入大小端
+			len++;
 			break;
-			case MODBUS_WRITE:
-				insertHexData(string,(uint8_t *)protocol_modbus,len,1);                                                        //插入modbus长度
-			  len++;
-				insertHexData(string,(uint8_t *)MODBUS_WRITE,len,1);                                                            //插入modbus读指令
-			  len++;
-				insertHexData(string,&currentParams->node_write_modbus_command->dataType,len,1);                                 //插入读取的数据格式
-			  len++;
-			  insertHexData(string,&currentParams->node_write_modbus_command->slaveAddress,len,1);                             //插入modbus从站地址
-				len++;
-				insertHexData(string,(uint8_t *)&currentParams->node_write_modbus_command->registerAddress,len,2);              //插入modbus寄存器地址
-			  len+=2;
-			  insertHexData(string,0x00,len,1);                                                                               //插入小数点位数
-			  len++;
-				insertHexData(string,&currentParams->node_write_modbus_command->bigLittleFormat,len,1);                         //插入大小端
-			  len++;
+		case DLT645_07:
+			insertHexData(string, (uint8_t *)protocol_dlt645_07, len, 1); // 插入dlt645_07数据长度
+			len++;
+			insertHexData(string, (uint8_t *)&currentParams->node_read_dlt645_command->deviceID645, len, 6); // 插入dlt645地址域
+			len += 6;
+			insertHexData(string, (uint8_t *)&currentParams->node_read_dlt645_command->Identification, len, 4);
+			len += 4;
 			break;
-			case DLT645_07:
-				insertHexData(string,(uint8_t *)protocol_dlt645_07,len,1);                                                          //插入dlt645_07数据长度
-				len++;
-			  insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->deviceID645,len,6);                      //插入dlt645地址域               
-        len+=6;
-        insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->functionCode,len,4);
-				len+=4;
+		case DLT645_97:
+			insertHexData(string, (uint8_t *)protocol_dlt645_97, len, 1); // 插入dlt645_97数据长度
+			len++;
+			insertHexData(string, (uint8_t *)&currentParams->node_read_dlt645_command->deviceID645, len, 6); // 插入dlt645_97地址域
+			len += 6;
+			insertHexData(string, (uint8_t *)&currentParams->node_read_dlt645_command->Identification, len, 2); // 插入dlt645_97数据标识
+			len += 2;
+		default:
 			break;
-			case DLT645_97:
-				insertHexData(string,(uint8_t *)protocol_dlt645_97,len,1);                                                          //插入dlt645_97数据长度
-				len++;
-			  insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->deviceID645,len,6);                      //插入dlt645_97地址域               
-        len+=6;
-        insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->functionCode,len,2);                      //插入dlt645_97数据标识                 
-				len+=2;
-			default:
-				break;
 		}
 		i++;
-		currentParams=currentParams->nextParams;
-		//判断当前设备有没有属性可读了
-		if(currentParams==NULL)                        
+		currentParams = currentParams->nextParams;
+		// 判断当前设备有没有属性可读了
+		if (currentParams == NULL)
 		{
-			currentDevice=currentDevice->nextDevice;
-			//判断当前还有没有设备没有读取了
-			if(currentDevice==NULL)                      //且当前链表无后续设备了则跳出循环
+			currentDevice = currentDevice->nextDevice;
+			// 判断当前还有没有设备没有读取了
+			if (currentDevice == NULL) // 且当前链表无后续设备了则跳出循环
 			{
-				deviceNum=0;                                //将结束位置全部归0
-				paramsNum=0;
+				deviceNum = 0; // 将结束位置全部归0
+				paramsNum = 0;
 				break;
 			}
-			currentParams=currentDevice->params;         //有则更新当前指针位置
+			currentParams = currentDevice->params; // 有则更新当前指针位置
 			nowDeviceNum++;
-			nowparamsNum=0;
+			nowparamsNum = 0;
 		}
 		nowparamsNum++;
-	} while (i==20);
-	
-	//更新结束的位置分为两种情况,一种还在当前设备的属性中轮询此时nowDeviceNum没有改变过,另外一种情况设备内的属性
-	if(nowDeviceNum==0)
+	} while (i == 20);
+
+	// 更新结束的位置分为两种情况,一种还在当前设备的属性中轮询此时nowDeviceNum没有改变过,另外一种情况设备内的属性
+	if (nowDeviceNum == 0)
 	{
-		deviceNum=startDeviceNum;
-		paramsNum=startParamsNum+nowparamsNum;
+		deviceNum = startDeviceNum;
+		paramsNum = startParamsNum + nowparamsNum;
 	}
 	else
 	{
-		deviceNum=startDeviceNum+nowDeviceNum;
-		paramsNum=nowparamsNum;
+		deviceNum = startDeviceNum + nowDeviceNum;
+		paramsNum = nowparamsNum;
 	}
-	*size=len;
-	
+	*size = len;
 }
 /*
 *********************************************************************************************************
@@ -178,22 +188,83 @@ int masterSendNodeString(uint8_t nodeIndex,uint8_t *string,uint16_t *size)
   注:插入的数据以被插入的字符串都可能包含0x00不要使用strlen
 *********************************************************************************************************
 */
-void insertHexData(uint8_t *String,const uint8_t *hexData,uint8_t insertIndex,uint8_t length)
+void insertHexData(uint8_t *String, const uint8_t *hexData, uint8_t insertIndex, uint8_t length)
 {
-	memcpy(String+insertIndex,hexData,length);
+	memcpy(String + insertIndex, hexData, length);
 }
 
 /*
 *********************************************************************************************************
 *	函 数 名: uint8_t SlaveProtocolAnalysis(uint8_t *buff,uint16_t len)
 *	形    参:uint8_t *buff等待解析的字符串数据,
-*	返 回 值: 
-	解析这段数据时要先判断是否为该节点的消息,如果是才进行数据解析工作
+*	返 回 值: 0:不是该节点的消息,数据没有进行任何处理。1:为该节点信息,接收到要进行的相应的切换工作
+	解析这段数据时要先判断是否为该节点的消息,stuct B *p=malloc(sizeof(struct B); 
 *********************************************************************************************************
 */
-uint8_t SlaveProtocolAnalysis(uint8_t *buff,uint16_t len)
+#ifdef slave
+#define LocalAddress 0x1F1A
+uint8_t SlaveProtocolAnalysis(uint8_t *buff, uint16_t len)
 {
-	uint16_t NodeAdress=buff[0]<<8 || buff[1];
-	
-	
+	NODE_DEVICE_PARAMS *node_receive_params;
+	node_receive_params = get_node_receive_params();
+	uint16_t slaveAdress = buff[0] << 8 || buff[1];
+	int protocol_location = 2; // 起始的协议所处位置
+	uint8_t i=0;
+	while (1)
+	{
+		if (slaveAdress == LocalAddress) // 判断此消息是否为该节点的消息,如果不是则跳出
+		{
+			switch (buff[protocol_location]) // 读取接收到的数据属于什么协议
+			{
+			case protocol_modbus_read:
+				node_receive_params->params[i].protcol = MODBUS_READ;
+				node_receive_params->params[i].dlt645_params=NULL;
+				node_receive_params->params[i].modbus_read=malloc(sizeof(NODE_MODBUS_READ));
+				node_receive_params->params[i].modbus_write=NULL;
+				node_receive_params->params[i].modbus_read->functionCode=buff[protocol_location+1];                                        //读出functionCode
+				node_receive_params->params[i].modbus_read->dataType=buff[protocol_location+2];                                            //读出数据格式
+				node_receive_params->params[i].modbus_read->slaveAddress=buff[protocol_location+3];                                        //读出从站地址
+				node_receive_params->params[i].modbus_read->registerAddress=buff[protocol_location+5]<<8||buff[protocol_location+4];      //读出寄存器地址
+				node_receive_params->params[i].modbus_read->registerLength=buff[protocol_location+7]<<8||buff[protocol_location+6];       //读出要读的寄存器长度
+				node_receive_params->params[i].modbus_read->precision=buff[protocol_location+8];                                           //读出小数点精度
+				node_receive_params->params[i].modbus_read->bigLittleFormat=buff[protocol_location+9];                                     //读出数据大小端格式
+				protocol_location += protocol_modbus_read; 
+				break;
+			case protocol_dlt645_07:
+				node_receive_params->params[i].protcol = DLT645_07;
+				node_receive_params->params[i].dlt645_params=malloc(sizeof(NODE_DLT645_PARAMS));;
+				node_receive_params->params[i].modbus_read=NULL;
+				node_receive_params->params[i].modbus_write=NULL;
+				memcpy(node_receive_params->params[i].dlt645_params->deviceType645,buff+protocol_location,6);
+				memcpy((uint8_t *)&node_receive_params->params[i].dlt645_params->dataType645,buff+protocol_location+6,4);
+				protocol_location += protocol_dlt645_07;
+				break;
+			case protocol_dlt645_97:
+				node_receive_params->params[i].protcol = DLT645_97;
+				node_receive_params->params[i].dlt645_params=malloc(sizeof(NODE_DLT645_PARAMS));;
+				node_receive_params->params[i].modbus_read=NULL;
+				node_receive_params->params[i].modbus_write=NULL;
+				memcpy(node_receive_params->params[i].dlt645_params->deviceType645,buff+protocol_location,6);
+				memcpy((uint8_t *)&node_receive_params->params[i].dlt645_params->dataType645,buff+protocol_location+6,2);
+				protocol_location += protocol_dlt645_97;
+				break;
+			case 0:
+				return 1;
+			default:
+				return 0;
+			}
+		}
+		else
+		{
+			node_receive_params->Index=i;//记录本次有多少数据传输过来了
+			return 0;
+		}
+		i++;
+		if(protocol_location>len)             //判断数据解析是否越界了,越界则跳转出
+		{
+			return 1;
+		}
+	}
 }
+
+#endif

+ 27 - 134
app/SYSTEM/source/task.c

@@ -1,15 +1,13 @@
 #include "task.h"
-#include "malloc.h"
 #include "cjson.h"
 #include "myFile.h"
 #include "gateway_message.h"
 #include "log.h"
-
+#include "malloc.h"
 #include "sx1276.h"
 #include "radio.h"
 
-void processHTTPjson(cJSON *json);
-void processDevice(cJSON *json, const char *readString);
+
 void master_task(char *string);
 void slave_task();
 
@@ -23,59 +21,6 @@ uint32_t rx_num = 0;
 uint8_t PingMsg[] = "PING\0";
 uint8_t PongMsg[] = "PONG\0";
 
-/**
- * @brief  从输入字符串匹配对应的key并将value中的string返回
- * @param  cJSON *data_obj json对象, const char *key key关键字
- * @retval 解析出的string
- */
-char *processStringData(cJSON *data_obj, const char *key)
-{
-	cJSON *json_data = cJSON_GetObjectItemCaseSensitive(data_obj, key);
-	if (cJSON_IsString(json_data) && (json_data->valuestring != NULL))
-	{
-		return json_data->valuestring;
-	}
-	else
-	{
-		// gateway.data_valid_flag = 0; // 如果任意数据为NULL则此次数据为无效
-		return NULL;
-	}
-}
-
-// json解析int
-int processIntData(cJSON *data_obj, const char *key)
-{
-	cJSON *json_data = cJSON_GetObjectItemCaseSensitive(data_obj, key);
-	// if (cJSON_IsNumber(json_data) && (json_data->valueint != NULL)) 解决寄存器地址为0问题
-	if (cJSON_IsNumber(json_data))
-	{
-		return json_data->valueint;
-	}
-	else
-	{
-		// gateway.data_valid_flag = 0; // 如果任意数据为NULL则此次数据为无效
-		return -1;
-	}
-}
-// 解析json中包含的节点数量,已经节点的id
-void processNodeListData(cJSON *data_obj, GATEWAY_PARAMS *gateway)
-{
-	cJSON *nodeList = cJSON_GetObjectItemCaseSensitive(data_obj, "nodeList");
-	if (nodeList == NULL || !cJSON_IsArray(nodeList))
-	{
-		cJSON_Delete(nodeList);
-	}
-	int nodeListSize = cJSON_GetArraySize(nodeList);
-	for (int i = 0; i < nodeListSize; i++)
-	{
-		cJSON *node = cJSON_GetArrayItem(nodeList, i);
-
-		if (cJSON_IsString(node))
-		{
-			addNode(gateway, node->valuestring); // 往链表中不断加入新的节点
-		}
-	}
-}
 /*
 *********************************************************************************************************
 *	函 数 名: void data_task(void *pdata)
@@ -88,86 +33,31 @@ void data_task(void *pdata)
 {
 	OS_CPU_SR cpu_sr;
 	pdata = pdata;
-	char *lora_config_json = malloc(15 * 1024);
-	read_file("lora_json.txt", lora_config_json);
-	cJSON *json = cJSON_Parse(lora_config_json);
-	if (json != NULL)
-	{
-		OS_ENTER_CRITICAL(); // 进入临界区确保同一时间只有一个线程访问gatewayMessage
-		processHTTPjson(json);
-		OS_EXIT_CRITICAL();
-	}
-	else
-	{
-		LogPrint(LOG_INFO, __func__, __LINE__, "json is to long");
-	}
-	cJSON_Delete(json);
+	char *lora_config_json =mymalloc(SRAMEX,9*1024);
+	read_file("lora_json.txt",lora_config_json);
+	addGatewayParams(lora_config_json);
 	free(lora_config_json);
+	
+//	Radio = RadioDriverInit();
+//	Radio->Init();
+//#ifdef MASTER
+//	Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg));
+//	printf("MASTER");
+//#else
+//	Radio->StartRx();
+//	printf("SLAVE");
 
-	Radio = RadioDriverInit();
-	Radio->Init();
-#ifdef MASTER
-	Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg));
-	printf("MASTER");
-#else
-	Radio->StartRx();
-	printf("SLAVE");
-
-#endif
-	while (1)
-	{
-#ifdef MASTER
-		master_task("a");
-#else
-		slave_task();
-#endif
-	}
-}
-/*
-*********************************************************************************************************
-*	函 数 名: void processHTTPjson(cJSON *json)
-*	功能说明: 解析http下载json文件数据转换为结构体信息保存在内部结构体
-*	形    参:无
-*	返 回 值: 无
-*********************************************************************************************************
-*/
-void processHTTPjson(cJSON *json)
-{
-	GATEWAY_PARAMS *gateway = get_gateway_config_params();
-	// 解析必须的网关信息
-	strcpy(gateway->host, processStringData(json, "host"));
-	gateway->port = processIntData(json, "port");
-	strcpy(gateway->messageTopic, processStringData(json, "messageTopic"));
-	strcpy(gateway->commandTopic, processStringData(json, "commandTopic"));
-	// 解析节点lodelist内包含的nodelist的设备序列号并扩充整个设备链表
-	processNodeListData(json, gateway);
-	NODE_PARAMS *current = gateway->node_params;
-	// 拿到节点的名称后去解析json的相关内容
-	while (current != NULL)
-	{
-		char *processNodeRead = malloc(20);
-		sprintf(processNodeRead, "read_%s", current->node_address);
-		cJSON *readArrayItem = cJSON_GetObjectItem(json, processNodeRead);
-		if (cJSON_IsArray(readArrayItem))
-		{
-			uint8_t read_data_num = cJSON_GetArraySize(readArrayItem);
-			for (int i = 0; i < read_data_num; i++)
-			{
-				cJSON *read_data_obj = cJSON_GetArrayItem(readArrayItem, i);
-				// 解析到节点内部的内容
-				if (cJSON_IsObject(read_data_obj))
-				{
-					DEVICE_PARAMS *currentDevice;
-				}
-				else
-				{
-				}
-			}
-		}
-		free(processNodeRead);
-		current = current->nextNode;
-	}
+//#endif
+//	while (1)
+//	{
+//#ifdef MASTER
+//		master_task("a");
+//#else
+//		slave_task();
+//#endif
+//	}
 }
+
 /*
 *********************************************************************************************************
 *	函 数 名: void master_task(char *string)
@@ -242,3 +132,6 @@ void slave_task()
 		OSTimeDlyHMSM(0, 0, 0, 500);
 	}
 }
+void processString(char *string)
+{
+}

+ 1 - 1
app/USER/FatFS/src/diskio.c

@@ -54,7 +54,7 @@ DSTATUS disk_initialize (
 	{
 
 		case FS_NAND :		/* NAND Flash */
-			if (1)             //7月10号修改,因任务系统调用nandflash导致死亡将if (NAND_Init() == NAND_OK)修改为if (NAND_Init() == NAND_OK) nand_init在系统外进行初始化
+			if (NAND_Init()==NAND_OK)             //7月10号修改,因任务系统调用nandflash导致死亡将if (NAND_Init() == NAND_OK)修改为if (NAND_Init() == NAND_OK) nand_init在系统外进行初始化
 			{
 				stat = RES_OK;
 			}

Різницю між файлами не показано, бо вона завелика
+ 7 - 4
app/USER/main.c