mirror of
https://github.com/adrigongv23/G26---Telemetry-Software.git
synced 2026-05-25 04:21:27 +02:00
perf(sd): activar escritura por buffer y sync periodico
- Se elimina el guardado fisico forzado en cada mensaje CAN. - Ahora los datos se acumulan en RAM y se guardan en la SD cada 1 segundo. - Esto evita que el procesador se bloquee y pierda datos. - Nota: riesgo de perder maximo 1s de log (minimo comparado al riesgo de perder paquetes del CAN por que se bloquee el procesador con el codigo anterior) si se corta la energia de golpe.
This commit is contained in:
parent
d190db3d3c
commit
9993acaba6
2 changed files with 13 additions and 6 deletions
|
|
@ -30,6 +30,10 @@ private:
|
||||||
SdFile* _logFile;
|
SdFile* _logFile;
|
||||||
CarState car;
|
CarState car;
|
||||||
|
|
||||||
|
uint32_t _last_sync_time = 0;
|
||||||
|
const uint32_t _sync_interval_ms = 1000; // Guardar físicamente cada 1 segundo (ajustable)
|
||||||
|
// Esto optimiza tiempos. Los datos se guardan a la velocidad del CAN en RAM y cada 1 segundo se vuelcan a la SD. Cosa mucho más optima ya que la SD es relativamente lenta comparada al CAN
|
||||||
|
|
||||||
void flushToSD(); // Guardado físico
|
void flushToSD(); // Guardado físico
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -150,15 +150,18 @@ void DataProcessor::flushToSD() {
|
||||||
// Verificamos que los punteros existan Y que el archivo esté abierto
|
// Verificamos que los punteros existan Y que el archivo esté abierto
|
||||||
if (_sd && _logFile && _logFile->isOpen()) {
|
if (_sd && _logFile && _logFile->isOpen()) {
|
||||||
|
|
||||||
// 1. Escribimos los datos
|
// 1. Escribimos al BUFFER (RAM) - Esto es instantáneo (microsegundos)
|
||||||
_logFile->print(millis());
|
_logFile->print(millis());
|
||||||
_logFile->print(",");
|
_logFile->print(",");
|
||||||
_logFile->println(car.ect);
|
_logFile->println(car.ect);
|
||||||
|
|
||||||
// 2. SYNC
|
// 2. SYNC CONTROLADO
|
||||||
// Esto fuerza a la SD a guardar físicamente los datos AHORA MISMO,
|
// Solo obligamos a la tarjeta a "escribir de verdad" si ha pasado X tiempo.
|
||||||
// pero mantiene el archivo abierto para la siguiente vuelta.
|
// Esto evita detener el CAN cada 10ms.
|
||||||
_logFile->sync();
|
if (millis() - _last_sync_time > _sync_interval_ms) {
|
||||||
|
_logFile->sync(); // Aquí sí gastamos tiempo, pero solo 1 vez por segundo
|
||||||
|
_last_sync_time = millis();
|
||||||
|
// Serial.println("[SD] Sync realizado"); // Descomentar solo para debug
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue