2016-07-08 1 views
0

Sur les processeurs Cortex-M avec MPU (utilisons Cortex-M4 pour être spécifique, mais je parie que la réponse est la même pour M3 par exemple), quel mode de privilège l'empilage d'entrées matérielles fonctionne-t-il avec le MPU? Supposons que je cours en mode thread non privilégié à l'aide de la pile de processus (PSP), avec le MPU configuré pour accepter uniquement les écritures dans une région particulière (par exemple un processus en mode utilisateur est en cours d'exécution). Lorsqu'une exception se produit, avant que le gestionnaire ne s'exécute (en mode gestionnaire), le matériel empile les registres r0-r3, lr, pc etc. sur la PSP. Est-ce que cela se produit également dans le mode thread non privilégié? Spécifiquement, supposons que le processus positionne son SP à un point arbitraire de la mémoire dans lequel il ne devrait pas être autorisé à écrire, l'empilement d'exceptions entraînera-t-il une erreur de mémoire?Les exceptions sont-elles empilées par le matériel Cortex-M en mode thread ou en mode gestionnaire?

+0

Quelques précisions: le bit MSTKERR de MemManage Fault Status Register (MMFSR) indique si une erreur d'accès à la mémoire s'est produite lors de l'empilage pour une entrée d'exception. Il est donc clair qu'une erreur de mémoire peut se produire lors de l'entrée d'exception, mais je demande essentiellement si elle traite les accès mémoire comme en mode privilégié ou non privilégié (par exemple en supposant que le bit PRIVDEFENA dans le registre de contrôle MPU est 1) – exobrain

Répondre

0

Revenons à cela un an plus tard après avoir traité cela, la réponse est que l'empilement se produit avec n'importe quel privilège précédemment exécuté. Ainsi, si une interruption se produit en mode non-privilégié, le matériel empile les registres sur la PSP en utilisant les paramètres MPU existants comme si le code non-privilégié effectuait l'empilement. Si l'empilement enfreint les règles MPU, une erreur MemManage se produit et le champ MSTKERR du registre d'état de défaut de MemManage est défini (page 4-25 du guide de l'utilisateur Cortex-M4)