Das sollte mit __builtin_alloca() gehen, wenn du dein Programm etwas umstrukturierst.
Zitat Zitat von n0Br4iN3r
N = USART_recvChar()-48;
Die 48 steht wohl für '0', Zahlen größer 9 sind da nicht leicht einzutippen, vielleicht macht das schon Probleme?
Zitat Zitat von n0Br4iN3r
brett = calloc(N, sizeof(char *));
brett[i] = calloc(N, sizeof(char));
Ich find da irgendwie kein passenden free(...)

Mit __builtin_alloca() kannst du nicht in einer Schleife allokieren --> alles in einem Stück allokieren und selber verwalten. Du weisst ja, wie viel Platz du brauchst und wie er organisiert sein soll.

Du kannst viel Spatz sparen, wenn du für eine Zelle nicht ein Byte verbrätst, sondern nur ein Bit. Das reduziert den Speicherbedarf auf \sqrt{1/8}, also auf 36%.

Aufräumarbeiten kannst du dir nach einem Durchlauf auch sparen, indem du einen Soft-Reset machst
Zitat Zitat von software reset
goto *((void**) 0);