STM32F401RE Stack overflow -> Stack vergrößern?

Gast #4086391
Lesenswert?

Hallo,

mir zerhaut es immer mein Programm ab einer bestimmten Größe, obwohl ich 
den vorhandenen SRAM von 96Kb noch lange nicht ausgereizt habe. 
(STM32F401RE)
Meine MapFile zeigt:
1
    Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00000680, Max: 0x00018000, ABSOLUTE)
2

3
    Base Addr    Size         Type   Attr      Idx    E Section Name        Object
4

5
    0x20000000   0x00000004   Data   RW          257    .data               delay.o
6
    0x20000004   0x00000004   Data   RW          432    .data               stm32f4xx_hal.o
7
    0x20000008   0x00000014   Data   RW         1037    .data               system_stm32f4xx.o
8
    0x2000001c   0x00000060   Zero   RW         1156    .bss                c_w.l(libspace.o)
9
    0x2000007c   0x00000004   PAD
10
    0x20000080   0x00000200   Zero   RW         1027    HEAP                startup_stm32f401xe.o
11
    0x20000280   0x00000400   Zero   RW         1026    STACK               startup_stm32f401xe.o


Mein Stack ist 0x400 groß, obwohl mein Idx 1026 ist! (0x400 = 1024). 
Dadurch wird mein Stackpointer (Register 15) schon unter der Base von 
0x20000000 initialisiert. Ich weiß nicht, warum mein Stack nicht 
automatisch vergrößert wird. Platz genug ist ja.

Jemand eine Idee? Ich arbeite mit Keil v5.

Zu sagen sei noch, ich programmiere in c++, ich hoffe, dadurch habe ich 
nicht etwas übersehen? Die ganzen HAL-Treiber von STM sind ja c klassen.

Danke, Grüße
Gast #4086408
Lesenswert?

Die Vermutung habe ich auch schon...
ich mache folgendes:
1
// Header file
2
class test
3
{
4
private:
5
  uint8_t       ReadDataRaw[4][8][16]; 
6
  int16_t      m_iDCSRaw[4][8][8];
7
  uint32_t    m_iAmplitude[8][8];
8
};
9

10
// Source file

diese drei benutze ich dann in verschiedenen Memberfunktionen der klasse
Gast #4086442
Lesenswert?

In der "startup_stm32f401xe.s" war die Stack_Size auf 0x400 festgelegt. 
habe den Stack verdoppelt und es funktioniert nun.

Aber ich denke, die Datei wird doch bestimmt automatisch erstellt und 
der Stack somit automatisch berechnet. Es scheint wohl, ich habe ein 
schlechten Programmierstil :-(
Moderator Persönliche Seite #4086449
Lesenswert?

StackOverflower schrieb:
> Aber ich denke, die Datei wird doch bestimmt automatisch erstellt und
> der Stack somit automatisch berechnet. Es scheint wohl, ich habe ein
> schlechten Programmierstil :-(

Sorry, kein Compiler auf der Welt kann ahnen, ob Du überhaupt zur 
Laufzeit diese Variablen/Objekte anlegst und wie oft (z.B. durch 
Rekursion).

Daher geht da nix "automatisch". Das liegt in Deiner Verantwortung.

Über statische Objekte weiß allerdings der Linker Bescheid. Du kannst 
natürlich Deine Klasse/Ojekt statisch definieren - mit allen Vor- und 
Nachteilen.

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