Helmuth:
Wie kann ich diese Mutmaßung überprüfen bzw. vorher abschätzen/berechnen, welche Funktion wieviel RAM benötigt?
Ohne Anspruch auf Vollständigkeit: Jede Funktion belegt an RAM einen int-Wert als Rücksprungadresse (2 Bytes) plus den Speicher, den die als Parameter übergebenen Variablen belegen, plus den Speicher des Rückgabewerts (falls nicht void) plus das, was die Funktion selbst an lokalen Variablen deklariert.
Aussichtsreicher als zu rechnen ist vielleicht, mal im Programm an verschiedenen Stellen abzutesten, ob und wieviel Speicher noch frei ist. Im einfachsten Fall mit so einer simplen Funktion:
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
die Du dann im laufenden Programm an verschiedenen Stellen aufrufen kannst, z.B. mit
Serial.println(freeRam());
Wenn Dein Speicher dann schon innerhalb Deines Sketches zu einen erheblichen Prozentsatz belegt ist, kann es beim Aufrufen von Library-Funktionen natürlich knapp werden, so dass die Funktionen dann keinen freien Speicher mehr vorfinden, den sie eigentlich benötigen würden.
Soweit ich das sehe, stellt die Funktion allerdings den Worst-Case-Fall dar: Es wird nur der große freie Speicherblock zwischen Heap und Stack dargestellt, normalerweise sollten aber wohl auch noch weitere kleinere Speicherbröckchen vorhanden sein, die vom Speichermanager in einer verketteten Liste verwaltet werden, aber um die zusammenzuzählen benötigt man eine etwas komplexere Funktion.