main stack vs process stack (Cortex-M4)

OP #3549541
Lesenswert?

Im Programming Manual für den Cortex M4 steht (Abschnitt 2.1.3)

"In an OS environment, it is recommended that threads running in Thread 
mode use the process stack and the kernel and exception handlers use the 
main stack."

Es gibt also die zwei stacks. empfohlen wird die nutzung des einen für 
den kernel eines betriebssystems. der andere soll fuer threads genutzt 
werden.

aber es steht nicht da, weshalb man das so machen soll. welche vorteile 
ergeben sich denn durch diese aufteilung?
#3549903
Lesenswert?

Eine Trennung der Stacks ergibt hauptsächlich dann Sinn, wenn man 
mehrere Threads (Prozesse) hat, also beispielsweise in einem RTOS. Dann 
ist es recht sinnvoll, Interrupt-Handler automatisch auf dem Systemstack 
laufen zu lassen, statt auf dem Stack des grad laufenden und evtl. als 
Folge des Interrupts weggedrückten Threads.
Gast #3550780
Lesenswert?

Dr. Sommer schrieb:
> no MPU schrieb:
>> Der hat keine zwei Stacks?
> doch, aber keine MPU.

Dr. Sommer schrieb:
> sina anargo schrieb:
>> hmm... aber welcher mechanismus verhindert denn auf dem cortex-m4 ein
>> schreiben vom userprozess in den main stack???
> Die MPU.

???

Die Stackumschaltung hat nichst mit der MPPU zu tun.
Und 
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/BABDGADF.html 
sagt uns: Der user Prozess kann den Main Stack nutzen.
Gast #3550813
Lesenswert?

no MPU schrieb:
> In welchem Modus wird festgelegt, welcher Stack zu verwenden ist?
Der Stack kann jederzeit beliebig geändert werden 
(StackPointer-Register); unprivilegierter Code kann eben nur nicht auf 
geschützten Speicher zugreifen.
> Wie
> kann ich zwischen den Modus wechseln?
Über CONTROL.nPRIV
Gast #3550902
Lesenswert?

Dr. Sommer schrieb:
> no MPU schrieb:
> Es kann in jedem Modus zwischen den beiden Stacks gewechselt werden?
>
> Ja:mov r0, #42
> mov sp, r0
>
> Lässt den Stackpointer auf die Adresse 42 zeigen. Wüsste übrigens keine
> Architektur unter der das nicht geht.

So,so,damit ist der Wechsel zwischen Main stack und process stack 
möglich?
Gast #3550916
Lesenswert?

no MPU schrieb:
> Schon einmal auf einem M0 ausprobiert, ob das im unprivileged
> thread
> mode geht?
>
> http://infocenter.arm.com/help/index.jsp?topic=/co...
> Dann dem link MSR folgen.
Da gibts keinen Link MSR.

Recherchier doch einfach selber wenn du mir nicht glaubst, anstelle von 
100 Detailfragen hintereinander zu stellen. Und sieh dir mal die 
Disassembly eines beliebigen kompilierten C-Programms an, und du wirst 
Dinge finden wie:
1
b087        sub  sp, #28
und
1
ac03        add  r4, sp, #12
Was macht das wohl? Richtig, einfach einen durch gewöhnliche Arithmetik 
berechneten Wert in den Stack-Pointer schreiben. Das heißt, jedes 
ordinäre C Programm das lokale Variablen verwendet greift schreibend auf 
den Stack Pointer zu. Und das ist unabhängig vom Privileged-Mode; wär ja 
doof wenn unpriviligierte C-Programme keine lokalen Variablen verwenden 
könnten.
Gast #3550955
Lesenswert?

Bitte, wenn du das sagst. Einen M0 habe ich gerade nicht zur Hand. Aber 
wenn du meinst dass man den Stack Pointer nicht ändern kann, wie, 
glaubst du, funktionieren dann o.g. Assembler-Snippets? Dann würde ja 
kein C-Programm funktionieren.
Gast #3552340
Lesenswert?

Dr. Sommer schrieb:
> Dann würde ja
> kein C-Programm funktionieren.

???

Beim Cortex M steht der akteulle SP im R13. Bei unterschiedlicher 
Konfiguration (main stack und process stack) wird beim Wechsel von 
unprivileged Thread in den Handler Mode der Stack oder umgekehrt 
automatisch umgeschaltet. Was gerade los ist steht im CONTROL register.
Soll die Konfiguration verändert werden, muss man in einen privileged 
Mode wechseln.
Kannst du alles unter den links nachlesen.

Und das ist die Antwort auf die Ausgangsfrage:
sina anargo schrieb:
> hmm... aber welcher mechanismus verhindert denn auf dem cortex-m4 ein
> schreiben vom userprozess in den main stack???

Natürlich kann ich mit einem Pointer beliebig im Speicher rühren. Das 
verhindert die MPU. Aber das war nicht die Frage.
Gast #3552433
Lesenswert?

no MPU schrieb:
> Bei unterschiedlicher
> Konfiguration (main stack und process stack) wird beim Wechsel von
> unprivileged Thread in den Handler Mode der Stack oder umgekehrt
> automatisch umgeschaltet. Was gerade los ist steht im CONTROL register.
> Soll die Konfiguration verändert werden, muss man in einen privileged
> Mode wechseln.
Ja, den Modus nur so. Aber den Stack Pointer kann man trotzdem manuell 
auf was anderes zeigen lassen, wenn die MPU es nicht verhindert.

no MPU schrieb:
> Kannst du alles unter den links nachlesen.
Warum fragst du erst jedes Bisschen nach, um es dann doch selber 
rauszusuchen und mir zu erklären was ich angeblich falsches geschrieben 
habe?
Gast #3552471
Lesenswert?

Dr. Sommer schrieb:
> Warum fragst du erst jedes Bisschen nach, um es dann doch selber
> rauszusuchen und mir zu erklären was ich angeblich falsches geschrieben
> habe?

Ich habe nicht gefragt, sondern wollte dich zum Denken anregen. Das hat 
du nicht gemerkt?

Die Links sind als Hilfe für dich gedacht. Wenn man hier nur so 
schreibt, glaubt es keiner.
Gast #3552526
Lesenswert?

no MPU schrieb:
> Ich habe nicht gefragt, sondern wollte dich zum Denken anregen. Das hat
> du nicht gemerkt?
AHAHa, und ich dachte du trollst nur. Vielen Dank für deine Erleuchtung, 
sonst verbringe ich meine Tage immer in gedankenloser Finsternis!
> Die Links sind als Hilfe für dich gedacht. Wenn man hier nur so
> schreibt, glaubt es keiner.
Ich habe die ARMv6/7 Architecture Reference Manuals sogar als PDF und 
ich hatte da alles schon vorher nachgelesen, keine Sorge.

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