Hallo Ab und zu erhalte ich eigenartige Fehlermeldungen die nicht immer ganz klar sind. Ich denke es könnte mit falschen Heap und Stack Einstellungen zusammenhängen. Wie ist das Vorgehen um diese beiden Einstellungen korrekt zu definieren bzw. wie kann ich sicher gehen ob diese Fehler wirklich die Ursache im Heap oder Stack haben? danke Gruss breezer
Hallo, zu wenig Informationen selbst für die Glaskugel welche Fehlermeldung, wann und wo treten sie auf??? heap ist gewöhnlich der gesamte Bereich zwischen Oberkante Variablen (meist bss) und Unterkante Stack Zu kleinen Stack merkt man erst zur Laufzeit meist durch fatalem Absturz ohne jede Fehlermeldung also was ist ???
Hallo Demzufolge sind es Fehler welche aufgrund eines zu kleinen Stack entstanden sind. Es sind Fehler entstanden welche nicht reproduziert werden konnten. Je nachdem was dann angepasst wurde funktionierte es dann wieder. Hier ein Auszug aus dem Map File: 0x40001220 0x00000060 Zero RW 174 .bss libspace.o(c_t.l) 0x40001280 0x00001000 Zero RW 2 HEAP lpc2300.o 0x40002280 0x000019c0 Zero RW 1 STACK lpc2300.o Beim LPC2366 ist der RAM Bereich von 4000 0000 bis 4000 7FFF. d.h. ich könnte den Bereich von 7FFF auf den Heap und Stack verteilen. Im Moment wird nur bis 2280+19c0=3c40 das RAM belegt. Hab ich das richtig verstanden? danke
Wird dynamisch Speicher vom Heap angefordert (evtl. "versteckt" durch stdio-Funktionen)? Gibt es Funktionen, in denen größere Felder lokal genutzt werden? Gibt es größere Verschachtelungstiefen an Funktionaufrufen? Rekursionen? Exception-Stacks ausreichend dimensioniert (z.B. für IRQ)? Werden in ISRs weitere Funktionen aufgerufen? Evtl. in ISR oder von daraus aufgerufenen Funktionen viel Platz für lokale Variablen erforderlich? Ohne zumindest Linkerscript und Startupcode (mit den Stackinitialisierungen) zu sehen, kann man wenig weiterhelfen - wie von Stefan++ ja bereits angemerkt. Im Zweifel die Stacks bei ORIGIN(RAM)+LENGTH(RAM) beginnen lassen und den HEAP weiterhin am Ende von BSS und die Exception-Stacks (zumindest IRQ) vergrößern.
Das Programm ist recht umfangreich. Ich habe dies so übernommen und habe einfach den Durchblick noch nicht. Im Anhang ist das Map File und der Startup code. Danke für eure Hilfe.
Breezer Dw schrieb: > Das Programm ist recht umfangreich. Ich habe dies so übernommen und habe > einfach den Durchblick noch nicht. Im Anhang ist das Map File und der > Startup code. Falls es wirklich der für die Stacks reservierte Speicher nicht ausreicht, kann man die Werte hinter IRQ_Stack_Size (für Stack, der bei IRQs genutzt wird) und USR_Stack_Size (für Stack, der im "normalen" Programmablauf genutzt wird) vergößern. Für Heap analog der Wert bei Heap_Size. Bei Sorgen kann man sich aber sicher auch an den ARM/Keil-Support wenden.
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.