Tipi di dato e aggravio di memoria

Ciao a tutti, il mio problema è il seguente: ho un programma simulink che, quando caricato su Arduino (Mega2560), occupa la quasi totalità di SRAM. Per ridurre l'occupazione di memoria ho pensato di cambiare i tipi di dato del programma in simulink (simulink assegna per default tipi di dato double laddove non specificati ); concretamente, da "double" (virgola mobile a 64 bit) li ho passati a "fixed-point" (virgola fissa ), con un tool di simulink che opera la conversione automaticamente proponendo, in base al range di valori che assume ogni dato in simulazione, il relativo fixed-point che copra quei valori con la minor perdita di precisione. Per farla breve, mi aspettavo un guadagno di memoria in termini di SRAM e FLASH, invece ho guadagnato solo pochi bytes nella prima e registrato un aggravio nella seconda. Qualcuno sa dirmi perché?
In linea generale un programma in cui tutti i dati sono a virgola mobile a 64 bit è il più "preciso", ma anche il più oneroso in termini di memoria, o sbaglio :fearful: ?
Sapete indicarmi anche dove trovare documentazione su questo tema?

Grazie!

L'ATmega2650, microcontrollore a bordo della Arduino Mega 2560, è a 8 bit.
Il tipo float e double, sono identici e a 32bit. Tipi a 64bit sono solo sulla DUE (con processore ARM a 32bit).
Inoltre la precisione dei calcoli è al massimo di 6/7 cifre complessive.
E' preferibile acquisire i dati dei sensori con Arduino ma far fare i calcoli al PC.
Per la documentazione parti dal Datasheet del micro --> Smart | Connected | Secure | Microchip Technology
e dai tipi supportati da Arduino --> Arduino - Home

Ocram85:
mi aspettavo un guadagno di memoria in termini di SRAM e FLASH, invece ho guadagnato solo pochi bytes nella prima e registrato un aggravio nella seconda.

Passare ai fixed point significa usare un tipo di dato non supportato dal compilatore, quindi si aggrava il consumo di Flash, che è la memoria del micro che contiene il programma, quindi anche il codice per gestire i fixed point.

Sapete indicarmi anche dove trovare documentazione su questo tema?

Sui fixed point c'è di semplice questo:

Quindi stando al link che mi hai mandato (a tal proposito grazie!!), l'onere computazionale di un programma in fixed-point è minore di uno in dati float, fermo restando un "appesantimento" di flash presumibilmente.
Posso chiederti però che intendi concretamente per non supportato?
Ho letto su una tesi di laurea che: "le variabili fixed-point di un modello, quando caricato su Arduino, vengono codificate come interi e vengono incluse automaticamente tutte le operazioni per tenere in conto la posizione della virgola". Sono queste "operazioni" che provocano un appesantimento di memoria?

Le operazioni sono operazioni sugli interi, ma la conversione da un tipo all'altro è demandata al software.
Simile situazione con i floating, dove non c'è un'ALU che supporti le operazioni in virgola mobile per cui è tutto demandato al software. Qui l'aggravio è superiore, in termini di risorse, rispetto ai fixed point dove ciò che pesa è appunto la conversione e basta