mirror of
https://github.com/adrigongv23/G26---Telemetry-Software.git
synced 2026-05-25 12:31:27 +02:00
perf(sd): unificar escritura de variables con snprintf
Se reemplazan las múltiples llamadas secuenciales a _logFile->print() por la construcción de una cadena de texto única en la RAM mediante snprintf. Esta refactorización minimiza las operaciones de escritura sobre el bus SPI, reduce la latencia de guardado en la SD y prepara la función flushToSD() para escalar a múltiples variables del vehículo sin riesgo de bloquear los ciclos de CPU del microcontrolador.
This commit is contained in:
parent
9072c162df
commit
c446873682
1 changed files with 10 additions and 9 deletions
|
|
@ -150,18 +150,19 @@ 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 al BUFFER (RAM) - Esto es instantáneo (microsegundos)
|
// 1. ESTRUCTURACIÓN EN RAM (El método snprintf)
|
||||||
_logFile->print(millis());
|
// Reservamos 128 bytes de memoria temporal.
|
||||||
_logFile->print(",");
|
char buffer[128];
|
||||||
_logFile->println(car.ect);
|
|
||||||
|
// Ensamblamos la cadena en la RAM. snprintf devuelve la longitud real de la cadena.
|
||||||
|
int len = snprintf(buffer, sizeof(buffer), "%lu,%d\n", millis(), car.ect);
|
||||||
|
|
||||||
|
_logFile->write(buffer, len);
|
||||||
|
|
||||||
// 2. SYNC CONTROLADO
|
// 2. SYNC CONTROLADO
|
||||||
// Solo obligamos a la tarjeta a "escribir de verdad" si ha pasado X tiempo.
|
|
||||||
// Esto evita detener el CAN cada 10ms.
|
|
||||||
if (millis() - _last_sync_time > _sync_interval_ms) {
|
if (millis() - _last_sync_time > _sync_interval_ms) {
|
||||||
_logFile->sync(); // Aquí sí gastamos tiempo, pero solo 1 vez por segundo
|
_logFile->sync();
|
||||||
_last_sync_time = millis();
|
_last_sync_time = millis();
|
||||||
// Serial.println("[SD] Sync realizado"); // Descomentar solo para debug
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue