Buenas gente, alguno conoce alguna forma de separar elegantemente codigo privilegiado de no privilegiado en los cortex-m? (armv7m)
Estoy estudiando la posiblidad de hacer un system monitor residente que provea separacion de usuario supervisor independientemente de si hay tareas involucradas o no.
No me gusta el metodo de FreeRTOS:
Porque basicamente deja ligado al usuario entrar y salir del modo privilegiado.
Preferiria algo como
- UNPRIV/Thread/(User SP): llama a SVC con "svc #n"
- PRIV/Handler(Sys SP): SVC se ejecuta
- PRIV/Handler(Sys SP): SVC cambia a modo PRIV/Thread
- PRIV/Thread(Sys SP): SVC, ya en modo thread ejecuta el syscall especificado
- PRIV/Thread(Sys SP): El syscall retorna al modo handler???? y retorna al llamante
- UNPRIV/Thread(User SP): Se continua con la ejecucion del codigo de usuario
El tema es que no se como hacer el cambio a PRIV/Thread. Se me ocurre hacer un interrupt context fake pero se me ocurre que se romperian muchas cosas si lo hago mal y seguramente hay algo hecho.
PD: Ya mire uVisor de ARM pero me parecio excesivamente complejo.
PD2: Nada propietario pls