STM32F4xx malloc & free

Persönliche Seite #4299561
Lesenswert?

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.
#4299579
Lesenswert?

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.
Persönliche Seite #4299580
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren