Hallo,
ich beschäftige mich gerade mit dem Thema "preemptive operating systems"
und versuche in dem Zusammenhang mich am Beispiel freertos
entlagzuhangeln. Ich sehe mir den STM32 (Cortex M3) Port vom Freertos
an.
In der ISR PendSV_Handler (xPortPendSVHandler) gibt es 3-2 Codezeilen,
die mir nicht ganz klar sind:
1).
1 | "ldr r3, pxCurrentTCBConst \n"
|
2 | "ldr r2, [r3] \n"
|
3 | ".align 2 \n"
|
4 | "pxCurrentTCBConst: .word pxCurrentTCB \n"
|
Ich verstehe nicht so genau was hier passiert, ein 32 bit breiter
pointer wird auf 2 register (r2, r3) verteilt?
2.)
Der arm instruction set sagt zu stmdb "store multiple decrement before".
Das ! soll "update baseregisters after transfer" bedeuten. welche
baseregister werden womit upgedatet?? Wohin wird gespeichert, nach r0?
Wie kann ich 8 32 bit breite Register in einem ebenfalls 32 bit breiten
Register speichern? Oder werden die auf dem Stack abgelegt - jedoch
müsste es doch dann eigentlich
heißen, oder?
Unw was wird vorher heruntergezählt?
Vielleicht könnt ihr mir ja weiterhelfen.
Gr. Thomas