Utility.

sizeof(variable)
Restituisce il peso della variabile variabile in byte, funziona con variabili numeriche di tutti i tipi, array, stringhe.
// array di diverso tipo
byte arrayB[5]; 
int arrayI[5]; 
long arrayL[5]; 
float arrayF[5]; 
String myString = "Electron 32"; 
// emette il peso totale dell'array
Serial.println(sizeof(arrayB)); // output: 5 
Serial.println(sizeof(arrayI)); // output: 10 
Serial.println(sizeof(arrayL)); //output: 20 
Serial.println(sizeof(arrayF)); // output: 20 
Serial.println(sizeof(myString)); // output: 10 
// visualizziamo il numero di celle nell'array, dividendo per il peso di uno. 
Serial.println(sizeof(arrayB) / sizeof(arrayB[0])); // output: 5 
Serial.println(sizeof(arrayI) / sizeof(arrayI[0])); // output: 5 
Serial.println(sizeof(arrayL) / sizeof(arrayL[0])); // output: 5 
Serial.println(sizeof(arrayF) / sizeof(arrayF[0])); // output: 5

PROGMEM
L'utility consente di inserire i dati (singoli valori, array, stringhe) nella memoria Flash del microcontrollore nella fase di caricamento dello sketch e di leggerli durante il funzionamento, risparmiando così memoria SRAM. Esempio di utilizzo:
// memorizzare più numeri interi 
const uint16_t ints[] PROGMEM = {65000, 32796, 16843, 10, 11234}; 
// memorizzare più decimali
const float floats[] PROGMEM = {0.5, 120.25, 0.9214}; 
// memorizzare più caratteri
const char message[] PROGMEM = {"Hello!"}; 
void setup() 
     Serial.begin(9600); 
     Serial.println(pgm_read_word(&(ints[2]))); // visualizzerà  16843 
     Serial.println(pgm_read_float(&(floats[1]))); // visualizzerà 120.25 
     for (byte i = 0; i < 13; i++) 
          Serial.print((char)pgm_read_byte(&(message[i]))); 
           // visualizzerà Hello!

La funzione principale per leggere dal programma è pgm_read_<type >. Possiamo usare questi 4:
  • pgm_read_byte(data); - per il 1 byte (char, byte, int8_t, uint8_t).
  • pgm_read_word(data); - per 2 byte (int, word, unsigned int, int16_t, int16_t).
  • pgm_read_dword(data); - per 4 byte (long, unsigned long, int32_t, int32_t).
  • pgm_read_float(data); - per i numeri in virgola mobile.
Attenzione! Quando si leggono numeri negativi (signed), è necessario eseguire il cast del tipo di dati. Esempio:
// сохраняем несколько целых с разными знаками 
const int16_t ints[] PROGMEM = {65000, 32796, -16843}; 
void setup() 
     Serial.begin(9600);
     Serial.println((int)pgm_read_word(&(ints[2]))); // visualizzerà -16843
}

F()
La cosiddetta "macro F()" consente di archiviare stringhe nella memoria Flash senza occupare spazio nella SRAM. Funziona in modo molto semplice ed efficiente, permettendoti di realizzare un dispositivo con comunicazione/debug avanzata tramite la porta Seriale e non pensare ad una RAM intasata:
 // questo output (stringa, testo) occupa 18 byte di RAM. 
Serial.println("Hello <username>!");
// questo output non occupa nulla in RAM, grazie a F().
Serial.println(F("Type /help to help"));

Leggi di più su PROGMEM qui.
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia