Zitat Zitat von _matze
Weitere Anregungen zur speicheroptimierten Programmierung sind erwünscht!

Gruß Matze

Code:
void clearArray(char cArray[],int iMax)
Schau mal nach memset bzw memclr, diese libc-Funktionen tun das, was du willst

Code:
void long_delay_ms( volatile unsigned long ms )
*räusper* Lokale Variablen brauchen nie volatile zu sein, dazu gehören auch Funktionsargumente. Wenn ein Prog *unbedingt* dieses volatile an der Stelle braucht, hat man recht sicher Hack produziert...

Code:
char cUSART_inp[IUSART_INP_MAX];  //Array für das
Dieses Feld macht man (vermutlich) besser statisch:
Code:
static char cUSART_inp[IUSART_INP_MAX];
Während das lokale Array im Frame der Funktion lebt, wird das statische Feld im Heap angelegt. Da du ansonsten recht wenige lokale Variablen brauchst, kommt die Funktion vielleicht sogar ohne Frame(pointer) aus, was kleineren Code gibt.

Hinderlich ist hier allerdings
Code:
char cTmpZahl[5] = {0};  //Temp-Variable für
weil dieses Array nicht in einem Register leben kann (Größe ist keine Zweierpotenz). Evtl ist's also besser, auch dieses Array statisch zu machen. Ausserdem übernimmt dann der init-Code die Initialisierung zu 0 (auch dann, wenn das Feld statisch lokal ist!)

Code:
USART_transmit_str (" WARNUNG: >");
Der String " WARNUNG: >" ist im Flash gespeichert und wird zur init-Zeit (vor Aufruf von main) in den RAM kopiert. Das Ding belegt also Platz im Flash *und* im RAM. Den Ramverbrauch kann man reduzieren, indem man den String im Flash lässt. Wie's geht, steht im avr-gcc-Artikel "String im Flash lassen" oder so.

Code:
void foo (...);
Solche Funktionen werden von GCC implementiert und aufgerufen. Falls eine solche Funktion nur 1x gebraucht wird und nur der Übersichtlichkeit und Programmstrukturierung dient, ist es evtl (vor allem bei kleinen Funktionen!) besser, statt dessen
Code:
static void foo (...);
zu deklarieren. Wenn foo nur 1x gebraucht wird, dann wird GCC es inlinen und nicht mehr als eigenständige Funktion umsetzen. Dazu braucht foo nicht als inline gekennzeichnet zu sein! Das spart dann Platz und Zeit -- Ausnahmen gibt es wie immer auch bei diesem Thema.

So, das recht vorerst mal...