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?
testez-vous ce code _dans un gestionnaire d'exceptions? –
Bien sûr que non. Le problème est que je ne veux pas accéder au gestionnaire d'exceptions. – Morriell
Lisez la description à nouveau, puis attendez-vous à ce que quelqu'un d'autre regarde votre problème. –