Puntero de pila principal (MSP) frente a Puntero de pila de proceso (PSP)

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é?

No puedo hablar con la familia STM32, ya que apenas la he usado y solo para demostrar que una placa de demostración que recibí (gratis) realmente funcionó bien para algunas cosas simples, escritas en C. Sin embargo, si tuvo que adivinar, pueden soportar dos modos de funcionamiento; uno usado por un supervisor o sistema operativo y otro usado por el proceso actualmente en ejecución. Tener dos punteros de pila separados para esos dos propósitos podría ofrecer algunas pequeñas ventajas en algunas circunstancias. Otro uso podría ser para un puntero de pila y un puntero de marco de pila. De todos modos, tendría que leer para averiguar por qué. Quizás lo haga.
@jonk Un amigo mío dio una charla sobre estos punteros y su uso en sistemas operativos (RT) para microprocesadores Cortex-M: archive.fosdem.org/2018/schedule/event/multitasking_on_cortexm
@MarcusMüller Lo marcaré como favorito. Acabo de echarle un vistazo rápido y tiene información muy general y, por lo tanto, útil para mí (algún día, tal vez), así como información demasiado específica que no usaré porque (casi) siempre escribo mi propio sistema operativo para trabajo incrustado que realizo. Pero se ve bien para la información general disponible y disfrutaré pasar los 3/4 de hora, en algún momento.
él, genial :) Sí, el audio era realmente mejor allí; si solo te gusta la idea de MSP / PSP, salta a los minutos 9 a 12 más o menos. ¡Escribir siempre su propio sistema operativo suena desafiante! Tengo muy pocos sistemas operativos que me gustan, y para el "más mínimo pero que merece el nombre de RTOS multitarea", señalaría a ChibiOS. Fue a Chromium EC porque necesitaba algo para controlar la potencia, el ventilador y otras cosas en una placa integrada con un ARM SoC como procesador principal. Que era exactamente para lo que se diseñó ese sistema operativo (solo que no para usar en su dispositivo SDR de la serie E de USRP, sino en una computadora portátil "chromebook". Detalles).

Respuestas (1)

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 r13el MSPo PSP.

El motivo de dos es permitir que el usuario implemente fácilmente un 'sistema operativo' multitarea.

La idea es que PSPlas 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 MSPcontrolador de excepciones. En un sistema multitarea, si el programador causó la excepción, es en este punto que cambia el lugar donde apunta PSPpara 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 svcinstrucción para iniciar el programador y luego pendsvlas excepciones manejan el cambio de tareas, la Tickfunción debe llamarse desde un temporizador para garantizar el cambio de tareas.

Me pareció que esa era la explicación probable, solo por principio. Gracias por aclarar el tema.