Der Cortex rechnet auf Registerebene die meisten Sachen auf 32Bit
Registerebene. Auch Functionsparameter werden in 32Bit Registern
übergeben. Wenn Du lokale Variablen oder Functionsparameter kleiner
definierst, dann muss der Compiler nach jeder Rechenoperation sein
Ergebnis mit einem zusätzlichen Befehl auf 8 oder 16Bit truncaten. Dies
gilt auch für einen Function Rückgabewert, der kleiner als 32Bit ist.
Das heisst, alle Berechnungen sollten auf 32Bit laufen. Da lokale
Variablen meistens in Registern gehalten werden, wird dadurch auch kein
zusätzlicher Speicher belegt.
Es macht aber keine Performanceverluste, aus 8 oder 16Bit Variablen oder
Arrays zu lesen und zu speichern, vorausgesetzt, die Zwischenrechnungen
können in 32Bit erfolgen.
Es gibt auch Ausnahmen, so gibt es beim F4 einige DSP-Befehle, die auf
q7_t und q15_t optimiert sind und dabei 2 oder 4 Parameter parallel
verarbeiten können.
Viele Grüße, Stefan