Ram ancora libera

C'è un modo di sapere quanta ram ha ancora libera il microcontrollore?

Scusate se continuo a rompere le scatole ma sono piccoli dubbi che mi sorgono man mano che sto portando avanti la tesi...

C'era il modo... uhm... mi pare usando avr-size sul file a.out compilato dall'IDE.
Cioè, dopo aver compilato il tuo sketch, devi andare nella cartella provvisoria che l'IDE crea per contenere i file temporanei generati. E' una cartella dal nome assurdo, che puoi ricavare premendo SHIFT insieme al pulsante di compilazione e vedendo l'output nella console.
Trovata la cartella, ci entri e dai da terminale avr-size nome-sketch.cpp**.elf**
Sommi poi i campi .data e .bss per sapere la SRAM utilizzata.

EDIT:
corretto. devi leggere il file .elf

come fai a sapere a priori la ram utilizzata?
c'è una funzione della libreria sdfat che fa proprio questo. neìon serve tutta libreria, copiati solo quella funzione.

avr-size analizza il codice e sulla base delle dichiarazioni e degli assegnamenti calcola l'impiego della memoria.

CMq qual'è la funzione che dici?

se io faccio una malloc, la cui grandezza o frequenza dipende da un pin digitale o input dell'utente, some fai a calcolare l'uso di ram?

la funzione, la trovi in SdFatUtil.cpp

/** Amount of free RAM
 * \return The number of free bytes.
 */
int SdFatUtil::FreeRam() {
  extern int  __bss_end;
  extern int* __brkval;
  int free_memory;
  if (reinterpret_cast<int>(__brkval) == 0) {
    // if no heap use from end of bss section
    free_memory = reinterpret_cast<int>(&free_memory)
                  - reinterpret_cast<int>(&__bss_end);
  } else {
    // use from top of stack to heap
    free_memory = reinterpret_cast<int>(&free_memory)
                  - reinterpret_cast<int>(__brkval);
  }
  return free_memory;
}

Capisco quello che vuoi dire.
Però avr-size non è invasivo e lo puoi usare prima di flashare lo sketch, così da avere un'idea di massima. Quella routine che hai postato deve in qualche modo comunicare con l'utente, quindi apre altri tipi di problemi.