Forum: Compiler & IDEs SRAM und Speicherprobleme


von Michael Schlagmüller (Gast)


Lesenswert?

Hallo !

Ich verzweifle demnächst...
Zuerst durfe ich feststellen, dass mein Programm (@ATMege323) nicht
mehr richtig funktionert. Ich bin auch recht schnell draufgekommen,
dass der Stack (& dynamisch allokierte Variablen) mir in meine
Variablen reinlaufen. Ein 'avr-nm myprog.elf -n/' sagt mir folgendes
(Auszug):

00003b6c T _etext
0000411e A __data_load_end
00800060 D __data_start
00800612 B __bss_start
00800612 D __data_end
00800612 D _edata
00800612 b TimerIntFunc
00800622 b uartRxData
00800662 b uartTxData
008006a2 b UartRxFunc
008006a4 B Timer0Reg0

...

0080073d B sendResTime
00800755 B lastSendRes
0080076d B minTime
00800779 B startTime
0080077d B eepromMinTime
00800789 B ActPowerState
0080078b B __bss_end
0080078b ? _end
00810000 ? __eeprom_end

Nun ist mir schon klar, dass mein Stack mit in meine Variablen
reinläuft. Aber warum in aller Welt ist denn '__bss_Start' erst bei
612 ?
Ich hab kein Plan....
Weiss jemand von Euch weiter ?

Danke schonmal....
  Snubnose

von Joerg Wunsch (Gast)


Lesenswert?

Dazwischen liegen all Deine Strings.  D. h. jede Benutzung von

foobar("hello world!");

belegt für "hello world!" sowohl Platz im ROM (für die Initiali-
sierung) als auch im RAM.

Du solltest Dir mal die Techniken zur Nutzung von Strings direkt
aus dem ROM ansehen.

von Michael Schlagmueller (Gast)


Lesenswert?

yeah, dass ist es
ich hatte so viele Debugausgaben, die ich mir über meine serielle
Schnittstelle rausgegeben habe, dass es mir mein ganzes RAM voll
gemacht hat. Vielen vielen Dank.....

von Joerg Wunsch (Gast)


Lesenswert?

Diese Strings werden übrigens vom Compiler mit local labels
versehen, daher tauchen sie allesamt nicht mehr in der linker
symbol table auf.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.