Estaba leyendo el manual de programación STM32 y en algún lugar de la " página 18 " veo estos dos tipos de punteros de pila. Siempre pienso que solo hay UNA pila y, por lo tanto, solo UN puntero de pila que existe en MCU y ahora estoy confundido sobre cuáles son estos punteros y cuál es la diferencia entre el tema y cada uno de estos se usa ¿para qué?
Tiene razón en cierto modo, en la corteza m (que es su stm32, aunque no puedo decir qué variante a menos que especifique una parte) hay un puntero de pila activo, sin embargo, puede ser r13
el MSP
o PSP
.
El motivo de dos es permitir que el usuario implemente fácilmente un 'sistema operativo' multitarea.
La idea es que PSP
las tareas individuales utilicen el puntero de pila de proceso or, y el núcleo utilice el MSP
.
Cuando ocurre una excepción, un marco de pila se empuja al puntero de pila actualmente activo y luego cambia para usar el MSP
controlador de excepciones. En un sistema multitarea, si el programador causó la excepción, es en este punto que cambia el lugar donde apunta PSP
para que sea el puntero de la pila para la siguiente tarea y regresa de la excepción. El desapilamiento del nuevo puntero de pila devuelve la ejecución a la siguiente tarea.
Si desea ver un ejemplo de código que usa ambos, un programador que escribí para Cortex M4f está disponible en BitBucket , no está documentado, pero es bastante sencillo. Se usa una svc
instrucción para iniciar el programador y luego pendsv
las excepciones manejan el cambio de tareas, la Tick
función debe llamarse desde un temporizador para garantizar el cambio de tareas.
broma
marcus muller
broma
marcus muller