Bienvenido, Invitado
Nombre de Usuario: Contraseña: Recordarme
  • Página:
  • 1

TEMA:

Macro F para ahorrar espacio de memoria 3 años 10 meses antes #1728

Buenas noches.

Sigo peleándome con el mando, pero eso ya no es digno de mención.

Os escribo por dos motivos, uno, porque no me he olvidado de vosotros ni de vuestra ayuda, y el segundo, porque he hecho, mejor dicho, me han hecho el ya amigo Bigbadbob, un descubrimiento que nos puede venir bien a todos.

Se trata de la macro (F("texto"))

Yo no sabía que existía, a lo mejor vosotros si, y no estoy descubriendo la pólvora, pero no lo he visto en ninguno de vuestros proyectos.

Resulta que con esta macro, si se define bien, los "Serial.print", o los "Serial.println" no ocupan memoria, y se ejecutan igualmente, yo he reducido la memoria ocupada por el programa de un 26%, a un 7%, que se dice pronto, sin quitar ningún "Serial.print".

Yo la he implementado de la siguiente manera, lo único con lo que hay que tener cuidado es que solo se puede utilizar para los textos fijos, NO se puede utilizar cuando se imprime el dato de un sensor que esta variando continuamente.

#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))

línea 154 del código Maestro

y luego en todos los "Serial.print" fijos

Serial.println (F("\n Controlador encontrado y configurado con éxito"));

línea 273 del código, y siguientes.

Como podréis observar, el código ha cambiado bastante desde la última vez que lo publiqué.

www.cambatronics.com/foro/index.php/mont...e-ps2?start=186#1727

Si queréis más información sobre la macro (F("texto")), podéis buscarla en Internet, o mirar estos enlaces.

www.baldengineer.com/arduino-f-macro.html

heli.xbot.es/?p=519

arduino.stackexchange.com/questions/176/...ariables-in-a-string

Donde explican el funcionamiento de la macro F mejor que yo

Un saludo.
El siguiente usuario dijo gracias: EA3DMM2

Por favor, Identificarse para unirse a la conversación.

Última Edición: por asesorplaza1.

Macro F para ahorrar espacio de memoria 3 años 10 meses antes #1736

Hola Asesorplaza1, me alegro poder leerte otra vez.
Precisamente iva ha exponer la duda que tenía sobre un "comando" , ahora se que es una macro gracias a tí.
En una actualización que estoy realizando, de mi proyecto "pantalla externa para FT8x7", y basandome en el código un colega(radioaficionado) encuentro este código:

Serial3.write(GSq,5); // sq or gain
Serial3.readBytes(Byte1,2);
tmp = 128 & Byte1[0];
gnsqnum = tmp;
if(tmp == 0)
{
GnSq = F("GN");
}
if(tmp == 128)
{
GnSq = F("SQ");
}
tmp=0;

Me llamó mucho la atención de la F().

Gracias por el aporte y espero te encuentres bien.

Saludos cordiales.

José ( EA3DMM )
El siguiente usuario dijo gracias: asesorplaza1

Por favor, Identificarse para unirse a la conversación.

Macro F para ahorrar espacio de memoria 3 años 10 meses antes #1744

Buenas noches.

Por aquí estamos bien, sin bicho, y ni falta que hace.

Consulta las paginas que puse donde se explica lo de la Macro F, porque en tu código no se usa igual a lo que yo he entendido y utilizado.

Esto no significa que no sea lo mismo, solo digo que es diferente, no vaya a ser que no haga lo mismo en tu código que en el mío.

Cuando me comentaron lo que era capaz de hacer esa Macro, pensé que era lo suficientemente importante como para ponerla en el foro como un tema aparte, aunque fuese un descubrimiento asociado al ROV, para darle la máxima extensión a su uso.

La función principal de esa Macro, es (explicado por un profano como yo, por eso puse los enlaces), fijar los "Serial.print", como si fueran parte de la definición del código, independientemente de donde se encuentren, y así no consumir memoria dinámica del Arduino, y dejar mucho más espacio para la ejecución del programa.

La verdad es que si haces un programa sin la macro F, lo compilas y te apuntas la memoria dinámica utilizada por el programa, y después le pones la Macro F a todos los "Serial.print" fijos, que solo sean texto y no datos, se reduce considerablemente la memoria dinámica utilizada.

Espero que estéis todos bien de salud

Un saludo.

Por favor, Identificarse para unirse a la conversación.

  • Página:
  • 1
Tiempo de carga de la página: 0.097 segundos
Gracias a Foro Kunena

Login