Hallo Tux12Fun,
der ATMega8 hat nur 1 KByte RAM
Diesen Speicher teilen sich Stack und Daten.
Je mehr Speicher für den Stack angelegt wird, desto weniger bleibt also für den RAM übrig.
Es ist unmöglich einen Puffer mit 1024 Bytes anzulegen
und schon garnicht gleich zweie davon:
char uart_buffer[UART_IN_BUFFER_LEN];
char spl_buffer[UART_IN_BUFFER_LEN];
Normalerweise merkt das ein Compiler und gibt eine entsprechende Fehler oder Warnmeldung raus.
Da diese Arrays aber bei deinem Code lokal innerhalb der Funktion get_BTData(char mode) definiert sind,
ist es vermutlich für den Compiler nicht eindeutig, weil der Speicher ja nicht ständig,
sondern nur innerhalb der Funktion reserviert und auch wieder verworfen wird.
Ich würde testweise mal vorschlagen die Arrays ausserhalb der Funktion zu platzieren
und neu zu kompilieren. Meiner Meinung nach müsste es dann eine entsprechende Fehlermeldung geben.
Du brauchts auch eher unwahrschienlich diese riesiegen Puffer von 512 oder sogar 1024 Bytes.
Ich komme meistens mit 16 bis 32 Bytes für meine serielle Schnittstelle aus.
Das Verhalten der Software bei solch einem Problem ist völlig zufällig und da kann man sich wirklich nen Wolf suchen.
Wie HaWe auch gleich schrieb: Code auf das minimalste kürzen.
Deine Idee mit den verschiedenen Optimierungen des Compilers ist übrigens eine sehr gute Testmethode,
das mache ich auch oft bei unerklärlichem Verhalten. Der Code sollte aber immer mit allen Optimierungen laufen.
Zumindest ist das generell mein oberstes Gebot.
Siro
Lesezeichen