11#include "core/flash.h"
22
3+ #include <stdlib.h>
34#include <string.h>
45
56#include "core/failloop.h"
@@ -40,14 +41,18 @@ void flash_save() {
4041
4142 __disable_irq ();
4243
44+ uint8_t * buffer = (uint8_t * )malloc (PROFILE_STORAGE_SIZE );
45+ if (buffer == NULL ) {
46+ failloop (FAILLOOP_FAULT );
47+ }
48+
4349 fmc_unlock ();
4450 fmc_erase ();
4551
4652 {
4753 const uint32_t offset = TARGET_STORAGE_OFFSET ;
4854 const uint32_t size = TARGET_STORAGE_SIZE ;
4955
50- uint8_t buffer [size ];
5156 memset (buffer , 0 , size );
5257 flash_write_magic (buffer , FMC_MAGIC | TARGET_STORAGE_OFFSET );
5358
@@ -68,7 +73,6 @@ void flash_save() {
6873 const uint32_t offset = FLASH_STORAGE_OFFSET ;
6974 const uint32_t size = FLASH_STORAGE_SIZE ;
7075
71- uint8_t buffer [size ];
7276 memset (buffer , 0 , size );
7377 flash_write_magic (buffer , FMC_MAGIC | FLASH_STORAGE_OFFSET );
7478 memcpy (buffer + FMC_MAGIC_SIZE , (uint8_t * )& flash_storage , sizeof (flash_storage_t ));
@@ -79,7 +83,6 @@ void flash_save() {
7983 const uint32_t offset = BIND_STORAGE_OFFSET ;
8084 const uint32_t size = BIND_STORAGE_SIZE ;
8185
82- uint8_t buffer [size ];
8386 memset (buffer , 0 , size );
8487 flash_write_magic (buffer , FMC_MAGIC | BIND_STORAGE_OFFSET );
8588
@@ -96,7 +99,6 @@ void flash_save() {
9699 const uint32_t offset = PROFILE_STORAGE_OFFSET ;
97100 const uint32_t size = PROFILE_STORAGE_SIZE ;
98101
99- uint8_t buffer [size ];
100102 memset (buffer , 0 , size );
101103 flash_write_magic (buffer , FMC_MAGIC | PROFILE_STORAGE_OFFSET );
102104
@@ -118,7 +120,6 @@ void flash_save() {
118120 const uint32_t offset = VTX_STORAGE_OFFSET ;
119121 const uint32_t size = VTX_STORAGE_SIZE ;
120122
121- uint8_t buffer [size ];
122123 flash_write_magic (buffer , FMC_MAGIC | VTX_STORAGE_OFFSET );
123124
124125 cbor_value_t enc ;
@@ -136,16 +137,20 @@ void flash_save() {
136137#endif
137138
138139 fmc_lock ();
140+ free (buffer );
139141 __enable_irq ();
140142}
141143
142144void flash_load () {
145+ uint8_t * buffer = (uint8_t * )malloc (PROFILE_STORAGE_SIZE );
146+ if (buffer == NULL ) {
147+ failloop (FAILLOOP_FAULT );
148+ }
143149
144150 if (flash_compare_magic (TARGET_STORAGE_OFFSET , (FMC_MAGIC | TARGET_STORAGE_OFFSET ))) {
145151 const uint32_t offset = TARGET_STORAGE_OFFSET + FMC_MAGIC_SIZE ;
146152 const uint32_t size = TARGET_STORAGE_SIZE - FMC_MAGIC_SIZE ;
147153
148- uint8_t buffer [size ];
149154 fmc_read_buf (offset , buffer , size );
150155
151156 cbor_value_t dec ;
@@ -161,8 +166,6 @@ void flash_load() {
161166 const uint32_t offset = FLASH_STORAGE_OFFSET + FMC_MAGIC_SIZE ;
162167 const uint32_t size = FLASH_STORAGE_SIZE - FMC_MAGIC_SIZE ;
163168
164- uint8_t buffer [size ];
165-
166169 fmc_read_buf (offset , buffer , size );
167170 memcpy ((uint8_t * )& flash_storage , buffer , sizeof (flash_storage_t ));
168171 }
@@ -171,8 +174,6 @@ void flash_load() {
171174 const uint32_t offset = BIND_STORAGE_OFFSET + FMC_MAGIC_SIZE ;
172175 const uint32_t size = BIND_STORAGE_SIZE - FMC_MAGIC_SIZE ;
173176
174- uint8_t buffer [size ];
175-
176177 fmc_read_buf (offset , buffer , size );
177178 memcpy ((uint8_t * )& bind_storage , buffer , sizeof (rx_bind_storage_t ));
178179
@@ -193,7 +194,6 @@ void flash_load() {
193194 const uint32_t offset = PROFILE_STORAGE_OFFSET + FMC_MAGIC_SIZE ;
194195 const uint32_t size = PROFILE_STORAGE_SIZE - FMC_MAGIC_SIZE ;
195196
196- uint8_t buffer [size ];
197197 fmc_read_buf (offset , buffer , size );
198198
199199 cbor_value_t dec ;
@@ -210,8 +210,6 @@ void flash_load() {
210210 const uint32_t offset = VTX_STORAGE_OFFSET + FMC_MAGIC_SIZE ;
211211 const uint32_t size = VTX_STORAGE_SIZE - FMC_MAGIC_SIZE ;
212212
213- uint8_t buffer [size ];
214-
215213 fmc_read_buf (offset , buffer , size );
216214
217215 cbor_value_t dec ;
@@ -223,4 +221,6 @@ void flash_load() {
223221 }
224222 }
225223#endif
224+
225+ free (buffer );
226226}
0 commit comments