Basically I have this code where I need to be writing a bunch of variables to flash so I can store them for persistent access using KVStore (keeping a dashboard updated). However, when I implemented the "flashSet0()" function, and I retrieve the data afterwards the boards crashes (gives me the red blinking LED) and I stop being able to access the external QSPI flash at all, forcing me to perform a full flash reset to be able to use it again. Any tips?
Keep in mind I also tried kv_reset("/kv/") but it yielded the same results.
void flashStore()
{//Inicio Storage
int result = kv_set("dinTotal", &ingresosTotales, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod1Total", &volumenSaliente1, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod2Total", &volumenSaliente2, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod3Total", &volumenSaliente3, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod4Total", &volumenSaliente4, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod5Total", &volumenSaliente5, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod6Total", &volumenSaliente6, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
}//Final Storage
void flashRetrieve()
{//Inicio Retrieve
int result = kv_get("dinTotal", &ingresosTotales, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error retrieving from flash");
}
result = kv_get("prod1Total", &volumenSaliente1, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error retrieving from flash");
}
result = kv_get("prod2Total", &volumenSaliente2, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error retrieving from flash");
}
result = kv_get("prod3Total", &volumenSaliente3, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error retrieving from flash");
}
result = kv_get("prod4Total", &volumenSaliente4, sizeof(float), 0);
if (result !=MBED_SUCCESS)
{
Serial.println("There was an error retrieving from flash");
}
result = kv_get("prod5Total", &volumenSaliente4, sizeof(float), 0);
if (result !=MBED_SUCCESS)
{
Serial.println("There was an error retrieving from flash");
}
result = kv_get("prod6Total", &volumenSaliente4, sizeof(float), 0);
if (result !=MBED_SUCCESS)
{
Serial.println("There was an error retrieving from flash");
}
}//END OF RETRIEVE
void flashSet0()
{
float zero = 0.0;
int result = kv_set("dinTotal", &zero, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod1Total", &zero, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod2Total", &zero, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod3Total", &zero, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod4Total", &zero, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod5Total", &zero, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
result = kv_set("prod6Total", &zero, sizeof(float), 0);
if (result != MBED_SUCCESS)
{
Serial.println("There was an error saving to flash");
while(true){}
}
}
void loop()
{//Rest of code...
if(digitalRead(resupplyPin)==LOW)
{
flashSet0();
Serial.println("Reset!");
flashRetrieve();
}
//Rest of code...
unsigned long timer = millis();
if (millis() - timer < 25000)
{
bool dataSave = true;
flashStore();
}
//Rest of code