STM32F4-Discovery Keil startup code

Gast #3134765
Hi,

ich habe gerade angefangen mich mit dem STM32F4-Discovery Board zu 
beschäftigen und nutze dafür Keil. Nun ist mir aufgefallen das Keil im 
Startup code nur eine Stack-Size von 0x00000400 also knapp 1k angibt und 
der Heap nur halb so groß ist.

Nun hat der Prozessor aber 192k Ram und irgendwie scheinen mir die oben 
genannten Settings komisch.

Frage habe ich was falsch gemacht habe den STM32F407VG gewählt weil es 
keinen STM32F407VGT6 gab aber vermute das T6 steht für das Package...


Oder hat jemand ein vernünftiges Sample für den Startupcode?

Danke schonmal,

lg mike
#3135469
Hi,

ich arbeite beruflich mit Keil und 0x400 scheint die 
Standard-Stack-Größe zu sein im Startup-Code oder Scatter-File.

Da ich von Hand etwas optimieren muss, habe ich mir einen Teil des SRAMs 
aufgeräumt und gewisse statische/globale Variablen dort feste 
reingelegt.
Mit
1
U32 fastBuffer[128] __attribute((at(0x00200800))
 legst du das Array "fastBuffer" feste an die Speicherandresse 0x200800.

So kann man auch einen Teil des SRams nutzen. Wenn du einen 
Stackoverflow hast, solltest du ihn natürlich vergrößern.

Ich bring das Scatter-File zwar eher mit dem SDRam in Verbindung, aber 
du kannst vielleicht auch dort angeben, dass gewisse Routinen im SRam 
landen. Da würde ich natürlich nur etwas reinlegen, was fast immer und 
andauernd benötigt wird.

Schöne Grüße
Daniel
Gast #3135759
Thx für die Erklärung,

Frage was passiert mit dem Restlichen code ich hab schon gesicht was/wo 
der Ausführbare code hingeladen wird müsste ja auch im RAM sein oder? 
Wie funktioniert das beim STM32F407VGT6 oder wird der direkt vom Flash 
ausgeführt?

lg
Gast #3137058
HI

danke das scheint wirklich hilfreich zu sein aber eine Frage hätte ich. 
Ich habe niergenst einen export von heap lables gesehen werden diese 
nicht benötigt? Brauch kein Teil der Libc diese?


lg
Gast #3137075
Man verwendet bei embedded Software normalerweise keinen Heap. Man 
verwendet kaum Stack. Der Code wird direkt aus dem Flash ausgeführt. Das 
sind alles so Sachen die uC Programmierung von PC Programmierung 
unterscheiden.
Gast #3137246
Steel schrieb:
> Man verwendet bei embedded Software normalerweise keinen Heap. Man
> verwendet kaum Stack. Der Code wird direkt aus dem Flash ausgeführt. Das
> sind alles so Sachen die uC Programmierung von PC Programmierung
> unterscheiden.

An der verwendung von Stack kommst du nicht vorbei. (Funktions aufrufen 
dafür ist der ja da)

bei nem 168mhz  uc mit 192kb ram macht für mich der heap schon Sinn is 
ja kein Atmega8

lg
Gast #3137532
Choose schrieb:
> Beschäftige dich lieber mit Coocox ;-)

Jo klingt interessant habs mal runter geladen.


@ Steel du wirst KAUM ein Programm schreiben das keinen Stack benötigt 
generell ist das ein extrem wichtiges Element.

lg
Moderator Persönliche Seite #3137850
mikeR schrieb:
> danke das scheint wirklich hilfreich zu sein aber eine Frage hätte ich.
> Ich habe niergenst einen export von heap lables gesehen werden diese
> nicht benötigt? Brauch kein Teil der Libc diese?

Stack: Die libc eher nicht, da der normalerweise verwendete Stackpointer 
bereits im Startup-Code gesetzt wird (erster Eintrag in der 
Vektortabelle).
Heap: Zur Konfiguration der dynamischen Speicherverwaltung gibt es in 
der libc (eigentlich sind es mehrere) von ARM zwei Ansätze, für 
"normale" libc und die sogen. microlib. Die Dokumentation sollte beide 
beschreiben (Suchbegriffe: __MICROLIB und __user_initial_stackheap). 
Beim letzten Mal schauen, waren auch beide Ansätze in den MDK-ARM 
Beispielen für STM32F4 implementiert. Im Forum bei keil.com wird man 
mehr potentielle Antworter finden.
Gast #3145918
Die definierten Grössen fuer Stack und Heap sind relativ klein gewählte 
Defaults. Beide sollten für die eigene Applikation natürlich noch 
angepasst werden.
Der Stack ist natürlich notwendig. Allerdings wird in einem modernen 
Design die Reservierung und Verwaltung der/des Stack(s) einem 
RTOS-Kernel überlassen. Dann sind sogar die 1024 Byte noch viel zu 
grosszügig bemessen.

Heap ist auch auf einem schnelleren Mikrocontroller mit mehr Speicher 
nach Möglichkeit zu vermeiden. Nur weil man mehr Performance hat muss 
man die nicht durch dynamische Speicherverwaltung wieder zum Fenster 
rauswerfen.
Am schnellsten bleiben statisch reservierte Puffer und Variablen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.