From 95c4c51c073ee75047495ff1388abca446b0af96 Mon Sep 17 00:00:00 2001 From: Alejandro Guerrero Date: Mon, 23 Feb 2026 13:15:35 +0100 Subject: [PATCH 1/4] fix(.ino): Funcion size SdFat --- G26-Telemetria.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/G26-Telemetria.ino b/G26-Telemetria.ino index ef01df3..0a82dd5 100644 --- a/G26-Telemetria.ino +++ b/G26-Telemetria.ino @@ -28,7 +28,7 @@ void setup() { if (logFile.open("G26.csv", O_RDWR | O_CREAT | O_APPEND)) { // Si el archivo es nuevo (tamaño 0), escribimos la cabecera - if (logFile.size() == 0) { + if (logFile.fileSize() == 0) { logFile.println("Time,ECT"); } From 9072c162df7b1dae834cc61d59652c03e203a3c4 Mon Sep 17 00:00:00 2001 From: Alejandro Guerrero Date: Mon, 23 Feb 2026 13:22:45 +0100 Subject: [PATCH 2/4] =?UTF-8?q?fix(sd):=20a=C3=B1adir=20sync=20en=20la=20c?= =?UTF-8?q?reacion=20de=20las=20cabeceras?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ G26-Telemetria.ino | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0535523 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/settings.json diff --git a/G26-Telemetria.ino b/G26-Telemetria.ino index 0a82dd5..6f126f3 100644 --- a/G26-Telemetria.ino +++ b/G26-Telemetria.ino @@ -30,6 +30,7 @@ void setup() { // Si el archivo es nuevo (tamaño 0), escribimos la cabecera if (logFile.fileSize() == 0) { logFile.println("Time,ECT"); + logFile.sync(); } // El archivo se queda abierto y listo. From c446873682b25149e18e52e0a87759c0a2e8420a Mon Sep 17 00:00:00 2001 From: Alejandro Guerrero Date: Mon, 23 Feb 2026 15:55:32 +0100 Subject: [PATCH 3/4] =?UTF-8?q?perf(sd):=20unificar=20escritura=20de=20var?= =?UTF-8?q?iables=20con=20snprintf=20Se=20reemplazan=20las=20m=C3=BAltiple?= =?UTF-8?q?s=20llamadas=20secuenciales=20a=20=5FlogFile->print()=20por=20l?= =?UTF-8?q?a=20construcci=C3=B3n=20de=20una=20cadena=20de=20texto=20=C3=BA?= =?UTF-8?q?nica=20en=20la=20RAM=20mediante=20snprintf.=20Esta=20refactoriz?= =?UTF-8?q?aci=C3=B3n=20minimiza=20las=20operaciones=20de=20escritura=20so?= =?UTF-8?q?bre=20el=20bus=20SPI,=20reduce=20la=20latencia=20de=20guardado?= =?UTF-8?q?=20en=20la=20SD=20y=20prepara=20la=20funci=C3=B3n=20flushToSD()?= =?UTF-8?q?=20para=20escalar=20a=20m=C3=BAltiples=20variables=20del=20veh?= =?UTF-8?q?=C3=ADculo=20sin=20riesgo=20de=20bloquear=20los=20ciclos=20de?= =?UTF-8?q?=20CPU=20del=20microcontrolador.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data_processor.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/data_processor.cpp b/src/data_processor.cpp index 9b638b1..bfc23b1 100644 --- a/src/data_processor.cpp +++ b/src/data_processor.cpp @@ -150,18 +150,19 @@ void DataProcessor::flushToSD() { // Verificamos que los punteros existan Y que el archivo esté abierto if (_sd && _logFile && _logFile->isOpen()) { -// 1. Escribimos al BUFFER (RAM) - Esto es instantáneo (microsegundos) - _logFile->print(millis()); - _logFile->print(","); - _logFile->println(car.ect); + // 1. ESTRUCTURACIÓN EN RAM (El método snprintf) + // Reservamos 128 bytes de memoria temporal. + char buffer[128]; + + // 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 - // 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) { - _logFile->sync(); // Aquí sí gastamos tiempo, pero solo 1 vez por segundo + _logFile->sync(); _last_sync_time = millis(); - // Serial.println("[SD] Sync realizado"); // Descomentar solo para debug } } -} +} \ No newline at end of file From 72dc48807d4710f64ede63378080f5785eb3b343 Mon Sep 17 00:00:00 2001 From: Alejandro Guerrero Date: Mon, 23 Feb 2026 15:57:34 +0100 Subject: [PATCH 4/4] =?UTF-8?q?perf(serial):=20aumentar=20velocidad=20del?= =?UTF-8?q?=20puerto=20a=202.000.000=20baudios=20Se=20eleva=20la=20tasa=20?= =?UTF-8?q?de=20transferencia=20del=20puerto=20Serie=20al=20m=C3=A1ximo=20?= =?UTF-8?q?r=C3=A9gimen=20estable=20soportado=20por=20el=20microcontrolado?= =?UTF-8?q?r=20(2=20Mbps).=20Esta=20optimizaci=C3=B3n=20reduce=20dr=C3=A1s?= =?UTF-8?q?ticamente=20el=20tiempo=20de=20bloqueo=20de=20la=20CPU=20al=20i?= =?UTF-8?q?mprimir=20mensajes=20de=20depuraci=C3=B3n,=20liberando=20ciclos?= =?UTF-8?q?=20de=20reloj=20que=20son=20vitales=20para=20garantizar=20la=20?= =?UTF-8?q?lectura=20ininterrumpida=20del=20bus=20CAN=20y=20soportar=20la?= =?UTF-8?q?=20futura=20carga=20de=20la=20pila=20Wi-Fi/UDP.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- G26-Telemetria.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/G26-Telemetria.ino b/G26-Telemetria.ino index 6f126f3..23bde5a 100644 --- a/G26-Telemetria.ino +++ b/G26-Telemetria.ino @@ -17,7 +17,7 @@ CAN can_interface; DataProcessor processor; void setup() { - Serial.begin(115200); + Serial.begin(2000000); delay(1000); Serial.println("\n--- G26 TELEMETRY: INICIO DE SISTEMA ---");