2017-07-06 9 views
-1

J'essaie de désactiver l'augmentation de l'extention de BusFault pour certains morceaux de code. Je suppose qu'il est possible de faire de l'exception des drapeaux en hausse, mais pas de n'importe quel type de gestionnaire. La description du bit BFHFNMIGN dans le manuel de programmation (PM0214 p.230) ressemble exactement à ce que je recherche: "Permet aux gestionnaires de priorité -1 ou -2 d'ignorer les défauts du bus de données provoqués par les instructions de chargement et de stockage .. < ..> ". C'est mon essai:Comment désactiver sélectivement l'exception BusFault et son escalade vers HardFault, les autres exceptions étant activées?

SCB->SHCSR ^= SCB_SHCSR_BUSFAULTENA_Msk; //Disable only BusFault_Handler 
SCB->CCR |= SCB_CCR_BFHFNMIGN_Msk; //Enable BFHFNMIGN 
*(uint32_t *)(0x000FFFFE) = 0xAA; //Test if BFHFNMIGN flag works 
i+=1; //Any stuff 

Je me attends à l'exécution d'aller plus loin, mais après la ligne « toute substance » l'exécution arrive à la HardFault_Handler comme si je ne l'ai pas utilisé peu BFHFNMIGN. Avec l'aide du débogueur, j'ai vérifié par l'adresse que le bit BFHFNMIGN est défini et qu'il y a tous les attributs de BusFault dans d'autres registres. Alors pourquoi HardFault ignore-t-il le BusFault?

+0

testez-vous ce code _dans un gestionnaire d'exceptions? –

+0

Bien sûr que non. Le problème est que je ne veux pas accéder au gestionnaire d'exceptions. – Morriell

+0

Lisez la description à nouveau, puis attendez-vous à ce que quelqu'un d'autre regarde votre problème. –

Répondre

0

Le Guide de l'utilisateur générique des dispositifs Cortex-M4, chapitre 4.3.9. indique clairement:

Si vous désactivez un gestionnaire de système et que l'erreur correspondante se produit, le processeur considère l'erreur comme une erreur matérielle.

Les autres variantes de Cortex-M doivent se comporter de la même manière.