Hallo, nach einigen größeren Änderungen in einem Projekt für den LPC2148(Arm) ist miteinmal nichtmehr genug Speicher vorhanden. Genauergesagt ist das Data Segment miteinmal um ca. 2kb größer als vorher, obwohl keine globalen Variablen angelegt wurden. Etwas rumprobieren mit objdump hat ergeben, dass wohl malloc() sich irgendwie eingenistet hat, obwohl es nie im Code aufgerufen wird. Wahrscheinlich benutzt irgendeine Funktion aus der stdlib das intern. Nun die frage: Wie kann ich rausfinden, welche stdlib Funktionen in meinem Projekt gelinkt sind? Kann ich auch rausfinden, welche davon malloc() benutzt? Danke und Grüße, Stefan
Was alles gelinkt ist, siehst du in der Symboltabelle. Diese kann man sich mit dem Kommando `nm' ansehen (ggf. heißt es für den Crosscompiler anders, z. B. `arm-nm' oder sowas). Eine cross-reference aller Symbole bekommst du, wenn du beim Linken --cref angibst. Wenn du den Linker vom Compiler aus aufrufst, musst du ein -Wl, voransetzen, also `-Wl,--cref'. Wenn du sowieso ein Mapfile generierst, wird die Tabelle dahin geschrieben, andernfalls nach stdout.
Besten Dank. Habe den Übeltäter gefunden. Es war ein aufruf von rand(). Warum der allerdings über 10KB Flash braucht und 2Kb Ram ist mir nicht ganz klar. Allerdings konnte es jetzt durch eine EIgenimplementierung ersetzt werden und alles ist wieder beim Alten. Gibt es eigentlich eine andere stadlib als die newlib für den Arm? Ich hätte gerne sowas wie die vom MSP430. Die vom Arm ist extrem speicherhungrig. Grüße, Stefan
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.