Hallo! Kann ich bei meinem Cortex M4 (STM32F4xx) dynamisch Speicher allokieren? Was muss ich in der IAR Workbench einstellen, um Heap anzulegen und die Funktionen "malloc" und "free" nutzen zu können?!? Vielen Dank für die Hilfe! Viele Grüße Günther
Für gewöhnlich legt man das im startup fest. Malloc/free sind allerdings recht "teuer", eine eigene Speicherverwaltung ggf. aus fixen Blockgrössen (n x blocksize) macht da mehr Sinn. In meinem Projekt, wo ständig irgendwelche sende- und empfangsbuffer benötigt werden, nutze ich das. Wobei es zwei Sendebuffer mit fester Grösse gibt, einen für die kurzen Antworten (den muss ich mir für nen re-request merken) und einen für die langen.
Random .. schrieb: > Für gewöhnlich legt man das im startup fest. Wo/wann/wie beim Startup? Mit welchen Befehlen? Random .. schrieb: > Malloc/free sind allerdings recht "teuer" Teuer im Bezug auf Flash/RAM Ressourcen, oder Rechenzeit? Den Overhead finde ich nicht so schlimm: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0067d/Cihfiabf.html
Günther schrieb: > Kann ich bei meinem Cortex M4 (STM32F4xx) dynamisch Speicher allokieren? Generell erst einmal: Ja. Günther schrieb: > Was muss ich in der IAR Workbench einstellen, um Heap anzulegen und die > Funktionen "malloc" und "free" nutzen zu können?!? Da kann ich nicht weiterhelfen. Beim GCC schreibe ich einfach malloc/free in den Quelltext, binde stdlib.h ein und schon geht alles. Natürlich nicht bei zeitkritischen Funktionen - ich nutze die nur in Funktionen, die nicht-zyklisch aufgerufen werden.
Walter T. schrieb: > Da kann ich nicht weiterhelfen. Beim GCC schreibe ich einfach > malloc/free in den Quelltext, binde stdlib.h ein und schon geht alles. *rofl+ MAGIC :-) Da ich mit MDK-ARM unterwegs bin, kenne ich mich mit IAR weniger aus. Aber ich habe mal in das Pack geschaut: STM32F4xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\i ar\linker\stm32f401xc_flash.icf In den .icf files steht was von stack / heap. Ob man das da von hand ändern muss oder es einen GUI Dialog gibt, musst nun anders rausfinden :-) > Teuer im Bezug auf Flash/RAM Ressourcen, oder Rechenzeit? Rechenzeit. Erstmal muss der den Speicher verwalten, und nen passenden Block "finden". Je nach Grösse der allocierten Blöcke fragmentiert sich der Speicher, was die lib durch Aufräumen in den Griff bekommen kann. Trotzdem dauert das "eher länger". Besser man macht sich über das eigene Speichermanagement einmal sauber Gedanken, und implementiert das ohne malloc/free. Für ein anderes Projekt unter Windows, wo sau viele strings gelesen und verarbeitet werden (~40MB XML) hat mir ein eigenes Speichersystem den Geschwindigkeitsfaktor >1000 gebracht.
Random .. schrieb: > Walter T. schrieb: >> Da kann ich nicht weiterhelfen. Beim GCC schreibe ich einfach >> malloc/free in den Quelltext, binde stdlib.h ein und schon geht alles. > > *rofl+ MAGIC :-) Beim AVR-GCC übrigens auch.
Random .. schrieb: > stm32f401xc_flash.icf Die Datei habe ich auch. Ebenso *_ram.icf und *_sram.icf, in denen mehr oder weniger das Gleiche steht. Heap ist mit 0x200 definiert, also 512 Byte... Muss mal die malloc/free-Funktionen testen...
Hi, hier Seite 27 http://supp.iar.com/FilesPublic/UPDINFO/004350/EWM32C_CompilerReferenceAddendum.pdf steht was zum Heap.
Ahhh Sorry das war falsche MC, aber das setting könnte doch gleich sein.
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.