Gast
#521813
Hallo, kennt sich jemand mit der Speicherverwaltung des avr-gcc aus? Problem: Mein Programm verwendet einige statische globale Variablen, dynamische Speicherallozierung mit malloc() und Rekursion wird nicht verwendet. Die größte globale statische Variable ist ein Puffer der Form uint16_t buf[2048]; also 4096 Byte, dazu kommen noch einige dutzend Byte für andere Variablen. Ich hatte mir bisher keine großen Gedanken darüber gemacht, denn mein AT90USB soll 8kByte RAM haben, sollte also locker reichen. Seit gestern funktioniert mein Programm nun aber nicht mehr. Mache ich den Puffer kleiner geht es aber wieder. Ich habe den Eindruck, dass der Puffer in einen nicht existierenden RAM-Bereich gerutscht ist -- vielleicht weil ich in den letzten Tagen ein paar kleinere Variablen hinzugefügt hatte. Hier ist die Ausgabe von avr-size und avr-nm -n stefan@AMD64X2 ~/AT90USB $ avr-size SUDD.elf text data bss dec hex filename 6216 5178 4109 15503 3c8f SUDD.elf 0000000000801266 D USB_Interfaces 000000000080153a B __bss_start 000000000080153a D __data_end 000000000080153a D _edata 000000000080153a B UsbAllocatedEPs 000000000080153b B RemoteWakeupActive 000000000080153c B UsbDevConfValue 000000000080153d B SamplesToRead 000000000080153f B Overflow 0000000000801540 B cnt 0000000000801541 B w 0000000000801543 B r 0000000000801545 B RB_Entries 0000000000801547 B buf 0000000000802547 B __bss_end 0000000000802547 ? _end 0000000000810000 ? __eeprom_end Gruß Stefan Salewski