main stack vs process stack (Cortex-M4)

OP #3549541
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?
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.
OP
hmm... jetzt sagst du auch dass es sinnvoll ist aber nicht warum.


das letzte stueck deiner aussage hab ich nicht richtig verstanden

"und evtl. als Folge des Interrupts weggedrückten Threads."

könntest du das nochmal erklären


danke schonmal fuer die antworten

lg
Gast
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
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
no MPU schrieb:
> Es kann in jedem Modus zwischen den beiden Stacks gewechselt werden?
Ja:
1
mov r0, #42
2
mov sp, r0
Lässt den Stackpointer auf die Adresse 42 zeigen. Wüsste übrigens keine 
Architektur unter der das nicht geht.
Gast
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
no MPU schrieb:
> So,so,damit ist der Wechsel zwischen Main stack und process stack
> möglich?
Warum nicht? Ob das eine gute Idee ist ist eine andere Frage. Nur drauf 
schreiben/lesen kann man eben nicht falls die MPU entsprechend 
konfiguriert ist.
Gast
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
Ich habe recherchiert und ARM schreibt, dass es nicht geht. Wenn du den 
links folgst, kommst du auch dahinter. Sonst probiert es aus und 
schaltet auf einem M0 zwischen Main und Prozess stack um.
Gast
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
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
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
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
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

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