Forum: Mikrocontroller und Digitale Elektronik STM32F4 Stack Pointer


von M. Н. (Gast)


Lesenswert?

Hallo Leute.
Ich nutze ein Linkerscript von Atollic Studio (schreibt man das so?).

Ich habe 2 versionen. In einem sind die RAM-Bereiche falsch. so by the 
way:
Wie kann sowas passieren?

Aber meine Frage ist eine andere:

das erste LD-Skript setzt den Stackpointer auf: 0x20020000
das zweite auf: 0x2001FFFF

Letzte Adresse im ram ist: 0x2001FFFF. Habe das deshalb auch für richtig 
gehalten :)

Jetzt lese ic gerade das Programming manual zum STM32 und da steht:
1
The processor uses a full descending stack. Th
2
is means the stack pointer indicates the last
3
stacked item on the stack memory. When the processor pushes a new item onto the stack, it
4
decrements the stack pointer and then writes
5
the item to the new memory location.
Das bedeutet doch, dass mir bei dem Skript mit der Adresse 0x2001FFFF 
ein byte fehlt, und dass die erste Variane richtig ist, oder?

Und auch hier wieder die Frage: Warum zur Hölle hat eigentlich jedes 
Linkerskript hundert Fehler?

von mper (Gast)


Lesenswert?

>Und auch hier wieder die Frage: Warum zur Hölle hat eigentlich jedes
>Linkerskript hundert Fehler?

Heul' doch!

von Disco (Gast)


Lesenswert?

M. H. schrieb:
> When the processor pushes a new item onto the stack, it
> decrements the stack pointer and then writes

Das beantwortet doch warum der SP auf eine Adresse initialisiert wird 
auf die man nicht schreiben kann.

von M. Н. (Gast)


Lesenswert?

mper schrieb:
>>Und auch hier wieder die Frage: Warum zur Hölle hat eigentlich jedes
>>Linkerskript hundert Fehler?
>
> Heul' doch!

Es ist wirklich zum heulen...

Aber wenigstens lernt man mal was Neues. Mittlerweile sind mir 
Controller mit Linkerskript fast lieber als so fertige Lösungen wie beim 
AVR :)

von tritrotra (Gast)


Lesenswert?

M. H. schrieb:
> Mittlerweile sind mir
> Controller mit Linkerskript fast lieber als so fertige Lösungen wie beim
> AVR

???
Auch beim AVR braucht der Linker Vorgaben, also ein Linker-Script.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Beim STM32 kannst Du den Stack auch in das CCM RAM Legen, bei 
0x10010000. Du musst allerdings im Startup-Code den CCM RAM gleich 
aktivieren.

von ST-User (Gast)


Lesenswert?

> Beim STM32 kannst Du den Stack auch in das CCM RAM Legen

seit wann das denn ?
Es gibt nicht bei jeden STM32 einen CCM-RAM.

von M. Н. (Gast)


Lesenswert?

ST-User schrieb:
>> Beim STM32 kannst Du den Stack auch in das CCM RAM Legen
>
> seit wann das denn ?
> Es gibt nicht bei jeden STM32 einen CCM-RAM.

Ja ich weiß. Obwohl das Linkerskript da auch einen Fehler hat. Mein 
Controller hat 128k SRAM beginnend bei 0x20000000 und die 64k CCM-RAM 
bei 0x10000000.
Im Linkerskript steht:
1
RAM (wrx) : ORIGIN = 0x20000000, LENGTH = 192K
Also alles als ein Block. Das kann auch böse ins Auge gehen :/


Danke für eure Antworten

von Steffen H. (mc_sho) Benutzerseite


Lesenswert?

> Beim STM32 kannst Du den Stack auch in das CCM RAM Legen, bei
> 0x10010000. Du musst allerdings im Startup-Code den CCM RAM gleich
> aktivieren.

CCM RAM ist beim STM32F4xx nach dem Reset aktiviert.

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
Noch kein Account? Hier anmelden.