@ all the Gurus in here:
Config: ATMEGA128, AVR-GCC, AVRStudio
Problem: SRAM voll, printf_P könnte Abhilfe schaffen, aber die
printf-Ausgabestrings werden trotz printf_P anscheinend ins RAM kopiert.
Die 4K SRAM sind langsam voll, mapfile sagt:
1 | "0x00800db9 PROVIDE (__bss_end, .)"
|
und ich bekomme seltsame Probleme-> Stackkollision liegt nahe.
Der Speicherfresser:
Im Projekt ist eine große Debug_Funktion, in einem eigenem Quellfile,
die in main() ggfs eingebunden wird:
1 | #ifdef DEBUG_DEV_PAULIN
|
2 | // Testversion Paulin
|
3 | DebugFunc_Paulin();
|
4 | #endif
|
So. In dieser Debugfunktion hats einen Haufen printf's, deren
Format/Ausgabestrings meines Wissens beim Startup ins SRAM kopiert
werden und dort genutzt werden. Und Speicher fressen......
Um hier SRAM zu sparen gibts die 'printf_P' Version, die aus dem Flash
heraus arbeitet. Auch klar....
DebugFunc_Paulin() frisst aber IMMER ~ 1KSRAM, egal, ob ich die printf_P
Versionen einsetze oder die normal printf.
Und weiter: Selbst ein auskommentieren der Funktion
1 | #ifdef DEBUG_DEV_PAULIN
|
2 | // Testversion Paulin
|
3 | //DebugFunc_Paulin();
|
4 | #endif
|
hindert den Linker scheints nicht daran, sie komplett einzubinden, denn
ich finde immer im Mapfile die kleine Zeile:
.data 0x008005bc 0x496 DebugCode_Paulin.o
's isch aber doch auskommentiert....! heul
Nur komplettes Entfernen des Quellfiles aus dem Projekt bringts.
Wie kriege ich die printf_P richtig an den Start und 1K RAM eingespart?
Und wie kriege ich den Linker dazu, garnicht verwendete Funktionen auch
nicht einzubinden?