STM32F4xx malloc & free

Persönliche Seite #4299561
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
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
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.
Gast #4299620
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.