Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Trucs per estalviar memòria de dades

En moltes aplicacions ens sobra la major part de la memòria de programa però, en canvi, anem justos de memòria de dades. A continuació comentarem algunes coses que podem fer per estalviar memòria de dades.

Fer servir define

La directiva define ens permet donar-li un nom a un contingut. En el moment de compilar el nom és substituït pel contingut. Atès que no es crea una variable per guardar el contingut no ocupa memòria de dades per a la major part dels casos. Atès que els define es posen al començament del programa és fàcil poder canviar el valor en cas necessari i amb l'avantatge que només cal canviar-lo en un lloc per tal que es tingui en compte el nou valor en totes les línies en les que es fa servir.

En l'exemple següent, cada cop que es trobi la paraula llarg es substituirà pel valor que se li ha assignat (400). Fixem-nos que no es posa punt i coma al final.

#define llarg 400

És un costum força extès fer servir lletres majúscules per als noms creats amb define.

Els programadors professionals prefereixen fer servir constants en lloc de define perquè en alguns casos particulars pot donar errors de compilació però és una manera senzilla d'estalviar memòria.

const int llarg 400

Seleccionar el tipus de variable més adequat

Quan es posen variables enteres en un programa és molt habitual fer servir el tipus int. Aquestes variables ocupen dos bytes cada una. En molts casos podem estar segurs que la variable contindrà valors positius més petits que 256 i, per tant, podríem fer servir una variable byte que només ocupa, com el seu nom indica, un byte. Per exemple:

	for (byte k = 0; k < 10; k++){

Paràmetres de funcions

Quan es crea una funció es posen com a paràmetres les dades que ha de fer servir. En la compilació del programa es crea una variable local corresponent a cada paràmetre i a l'executar s'hi copia el valor del paràmetre corresponent. Aquesta és la manera correcta de programar però durant l'execució de la funció tenim dues còpies de cada paràmetre, una com a variable local i una altra com a variable global.

Una funció es pot cridar en diversos punts del programa però en molts casos fem servir funcions que només es criden en un lloc i que tenen per finalitat endreçar el programa. Si anem justos de memòria de dades podem crear la funció sense paràmetres i fer servir les variables globals dins de la funció.

Textos entre cometes

Quan en el programa fem servir textos entre cometes com a paràmetres d'una funció podem pensar que aquests es guarden a la memòria de programa però resulta que no és així. En programes que fan servir molt les funcions print i println (per escriure al canal sèrie, a una pantalla o a una connexió Wi-Fi, per exemple) podem arribar a tenir molta memòria de dades ocupada per coses que, de fet, són constants. Podem fer servir la macro F per forçar que el text es guardi a la memòria de programa. Per exemple:

	Serial.println(F("No s'ha trobat el dispositiu Wi-Fi"));

	if (peticio.startsWith(F("Connection: close"))){

Guardar les constants a la memòria de programa

Per a casos en els que haguem de definir moltes constants pot ser interessant guardar aquestes a la memòria de programa fent servir la directiva PROGMEM. Cal tenir en compte que recuperar els valors guardats a la memòria del programa és significativament més complicat. En aquesta pàgina hi trobareu una explicació i un exemple.

 

 

 

En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

 

 

 

 

 

 

 

 

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.