I processori Arm Cortex-M dispongono di un efficace modello di gestione delle eccezioni, che consente agli sviluppatori di identificare e analizzare le anomalie che causano arresti indesiderati dell’applicazione.

In un interessante documento tecnico, Segger spiega dettagliatamente in che modo sia possibile sfruttare in maniera avanzata le risorse dell’architettura Cortex-M, in particolare la tabella dei vettori di interruzione (vector_table) e il gestore delle eccezioni hardware (HardFault_Handler).

Il documento contiene anche il listato di un handler avanzato di Hard Fault scritto parte in assembly e parte in linguaggio C, che può essere liberamente utilizzato per la ricostruzione e l’analisi degli eventi occorsi in caso di errore grave dell’applicazione.

I processori Cortex-M consentono di identificare e gestire eccezioni causate dagli accessi illegali alla memoria e dai comportamenti anomali del programma.

Queste le condizioni identificate e gestite su eccezione:

Errore bus (Bus Fault): rileva gli errori di accesso alla memoria durante il caricamento delle istruzioni (ciclo di fetch), i cicli di lettura/scrittura dati, il caricamento del vettore di interruzione e le operazioni di stacking dei registri (salvataggio/ripristino) durante l’interruzione;

Errore di gestione della memoria (Memory Management Fault): rileva le violazioni di accesso nelle regioni di memoria mappate nella MPU (Memory Management Unit).

Errore di utilizzo (Usage Fault): rileva l’esecuzione di istruzioni indefinite e accessi di memoria incongruenti. Se abilitata, questa eccezione rileva anche i tentativi di divisione per zero.

Errore irreversibile (Hard Fault): questa condizione, generata dalle tre precedenti, viene rilevata se i rispettivi handler (gestori di eventi) non possono essere eseguiti.

L’handler che gestisce le eccezioni di tipo Hard Fault è sempre attivo e ha priorità fissa e superiore rispetto a tutti gli altri interrupt ed eccezioni. Tutte le altre eccezioni (Memory Management Fault, Bus Fault e Usage Fault) hanno invece priorità programmabile. L’eccezione Hard Fault viene quindi sempre eseguita, anche nel caso in cui si verifichi un errore durante l’esecuzione di un qualsiasi altro handler di eccezione.

Scarica l’application note di Segger: “Analyzing HardFaults on Cortex-M CPU”

SEGGER Microcontroller

SEGGER Microcontroller progetta e realizza strumenti di sviluppo hardware e software per l’implementazione di sistemi embedded. Attiva dal 1997, Segger e’ il produttore di J-Link/J-Trace, l’emulatore piu’ diffuso in ambito industriale, di Flasher, programmatore flash stand-alone per la produzione e di altri dispositivi hardware destinati agli sviluppatori embedded. Segger offre inoltre un’ampia gamma di prodotti software, che includono embOS (RTOS), emWin (GUI), emFile (File System), emUSB (USB host e device stack) e embOS/IP (TCP/IP stack). Maggiori informazioni su Segger sono disponibili su http://www.segger.com