Puntero de pila principal (MSP) vs Puntero de pila de proceso (PSP)

2

Estaba leyendo el manual de programación de STM32 y en algún lugar de " 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 a la pila que existe en las MCU y ahora estoy confundido acerca de qué son estos punteros y cuál es la diferencia entre el tema y cada uno de estos se usa para qué?

    
pregunta Amin

1 respuesta

6

De alguna manera, tienes razón en la corteza m (que es tu stm32, aunque no puedo decir qué variante a menos que especifiques una parte) hay un puntero de pila activo r13 , sin embargo, esto puede ser MSP o PSP .

El motivo de dos es permitir al usuario implementar fácilmente un 'sistema operativo' multitarea.

La idea es que las tareas individuales utilicen el puntero de pila de proceso o PSP , y el núcleo use 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 para el controlador de excepciones. En un sistema multitarea, si el programador causó la excepción, es en este punto que cambia donde PSP apunta a ser el puntero de pila para la siguiente tarea, y regresa de la excepción. El desapilado del nuevo puntero de pila luego vuelve a la ejecución para la siguiente tarea.

Si desea ver un ejemplo de código usando ambos, un programador que escribí para Cortex M4f está disponible en BitBucket , No está documentado, pero es bastante sencillo. Se utiliza una instrucción svc para iniciar el programador, y luego las excepciones pendsv manejan el cambio de tarea, la función Tick debe llamarse desde un temporizador para asegurar el cambio de tarea.

    
respondido por el Colin

Lea otras preguntas en las etiquetas

Comentarios Recientes

StackPointer: la instrucción individual en el segmento se asigna a un punto de código PPC o propiedad personal de una aplicación o producción. PCP: dirección de proceso del proceso. Dirección de calle del proceso: la dirección de la base a la que StackPointer (PPC) se convierte en un StackPointer (PSP). Normalmente se usa en la dirección base de MSVC de una VM asignada dinámicamente. Número de proceso: el número de registros APC calificados que este ServiceContext puede usar. ProcessDesc - Valor utilizado... Lees verder