SystemView è uno strumento di registrazione e visualizzazione in tempo reale per sistemi embedded. Rivela il vero comportamento di runtime di un’applicazione, andando molto più in profondità rispetto a un normale debugger. Ciò è particolarmente efficace durante lo sviluppo e il lavoro con sistemi embedded complessi che comprendono più thread e interruzioni. SystemView può garantire che un sistema funzioni come progettato, individuare inefficienze e trovare interazioni indesiderate e conflitti di risorse.

Caratteristiche principali

  • Registrazione continua in tempo reale di un sistema embedded
  • Cattura attività, interruzioni, timer, risorse, chiamate API ed eventi utente
  • Registrazione tramite J-Link e tecnologia SEGGER RTT, IP o UART
  • Analisi live e visualizzazione dei dati acquisiti
  • Minimamente intrusivo per il sistema
  • Funziona su qualsiasi CPU
  • Funziona con qualsiasi RTOS e con sistemi bare-metal
  • Tracciamento delle chiamate API SEGGER embOS, emNet ed emFile come standard
  • Strumentazione uC/OS-III, Micrium OS Kernel, FreeRTOS, NuttX e Zephyr inclusa
  • Gratuito per uso non commerciale senza limitazioni

RTOS supportati

Attualmente embOS, uC/OS-III, Micrium OS Kernel, FreeRTOS, NuttX e Zephyr possono essere utilizzati con SystemView out-of-the-box.

Registrazione di eventi

Sul sistema target, SystemView registra gli eventi che si verificano durante l’esecuzione. Questi possono essere interruzioni, timer, scambi di attività e pianificazione con un RTOS, chiamate e restituzioni di funzioni API o eventi e messaggi utente. Gli eventi vengono recuperati, analizzati e visualizzati nell’applicazione SystemView, mentre il target continua a funzionare. La finestra Eventi in SystemView mostra gli eventi registrati insieme ad altre informazioni.

Per mantenere un overhead di comunicazione basso sul sistema target, SystemView registra solo informazioni di base.

SystemView analizza tutte le informazioni dagli eventi e mostra:

  • Il nome della funzione API e i suoi parametri e valori
  • L’ora di registrazione o l’ora di sistema in cui è avvenuta la chiamata
  • L’attività in cui è avvenuta la chiamata
  • La durata della chiamata API

Esempio di output: “La funzione API con ID x è stata chiamata con i valori dei parametri y e z e n tick dopo l’ultimo evento”.

Un evento regolare è lungo da 4 a 8 byte e richiede circa 1 µs per essere registrato a 200 MHz. Con 10.000 eventi al secondo, l’overhead aggiunto da SystemView è inferiore all’1% del tempo della CPU e la quantità di dati è facilmente entro i limiti di larghezza di banda del registratore.

I timestamp per gli eventi possono essere precisi come 1 ciclo della CPU, che equivale a 5 ns su una CPU a 200 MHz.

Finestra della cronologia degli eventi

La maggior parte dei sistemi embedded non ha un’esecuzione lineare del codice. Implementano interruzioni per timer e utilizzo di periferiche o potrebbero utilizzare un RTOS con più attività.

Il target genera eventi all’ingresso e all’uscita delle interruzioni, quando le attività diventano pronte per l’esecuzione e quando un’attività inizia o interrompe l’esecuzione. L’applicazione SystemView traccia questi eventi nella finestra Cronologia e mostra il contesto in cui si verificano.

Ciò consente un’analisi semplice di quando, quanto tempo e perché le attività vengono eseguite o cosa accade su un’interruzione.

Ciò aiuta a identificare problemi e inefficienze, come:

  • Priorità delle attività errate o inversione delle priorità che portano alla fame
  • Comunicazione errata tra attività
  • Ritardi e timeout inefficienti
  • Interruzioni discutibili o non necessarie

Visualizzazione dei dati registrati nella finestra DataPlot di SystemView

Le funzionalità di registrazione dei dati di SystemView forniscono una visione più profonda del comportamento del sistema. I dati registrati includono variabili, dati dei sensori, stati o qualsiasi altro dato personalizzato. Tutti i dati registrati sono direttamente sincronizzati con gli eventi e qualsiasi altra cosa registrata con SystemView. Per visualizzare i dati, la finestra DataPlot fornisce una visualizzazione simile a un oscilloscopio che è coerente con le finestre Cronologia e Carico della CPU di SystemView.

Con la possibilità di monitorare i dati delle variabili insieme agli eventi di runtime, gli sviluppatori possono facilmente identificare e analizzare il comportamento del sistema, individuare anomalie e ottimizzare le prestazioni. La finestra DataPlot supporta elevate frequenze di campionamento, offre opzioni di visualizzazione personalizzabili e consente la decodifica di più variabili in diversi formati per un’analisi precisa e dettagliata.

Finestra Statistiche contesto

SystemView consente agli utenti di identificare i motivi di blocco. La finestra Statistiche contesto presenta informazioni dettagliate sul tempo totale attivo, bloccato e sospeso di un’attività. Inoltre, il tempo bloccato è suddiviso in segmenti come blocchi causati da interruzioni, altre attività o lo scheduler e mostra l’attività specifica o l’interruzione responsabile del blocco.

Gli utenti possono selezionare l’attività che desiderano analizzare tramite un menu a discesa. Inoltre, la casella di controllo “Nascondi quando vuoto” consente una panoramica chiara, mostrando solo gli eventi che si sono effettivamente verificati.

Identificazione dei motivi di blocco con SystemView

Ottimizzazione delle prestazioni dei task

I cicli della CPU sono limitati nei sistemi embedded, rendendo importante ottimizzare le prestazioni delle attività nonché ottenere l’ordine di esecuzione e la distribuzione del tempo corretti.

Con la finestra Carico della CPU, SystemView aiuta ad analizzare dove è alto il carico della CPU. Conoscendo ciò che accade durante o prima dei tempi di carico elevato, il sistema può essere ottimizzato per evitare colli di bottiglia che potrebbero portare a un’esecuzione ritardata di attività importanti.

La finestra Runtime fornisce informazioni aggiuntive sulla distribuzione di runtime dei contesti. Può essere utilizzata per verificare che ciascun contesto venga eseguito entro i propri limiti di tempo o per trovare casi in cui un contesto viene eseguito in modo inaspettato troppo a lungo.

Tracciamento e misurazione delle prestazioni

SystemView configura eventi particolarmente adatti a contrassegnare determinati punti in un sistema target. Per misurare facilmente la durata dal punto A al punto B o dal punto A attraverso B al punto C, è possibile generare eventi di inizio marcatore, marcatore e arresto marcatore. L’applicazione SystemView collega automaticamente i marcatori corrispondenti e aggiunge ulteriori informazioni, come il tempo di esecuzione e il numero di esecuzioni della misurazione.

Output di registrazione

SystemView include la registrazione di messaggi con una registrazione. Stringhe semplici possono essere registrate come messaggio di registro, avviso o errore. Le funzioni di registrazione supportano la formattazione delle stringhe, simile a printf(). Poiché la formattazione delle stringhe può richiedere tempo e richiede memoria aggiuntiva, questa può essere rinviata all’applicazione SystemView. Il sistema target registra semplicemente la stringa di formato e i parametri in un evento. Quindi l’applicazione SystemView si occupa di formattare la stringa e di stamparla nella finestra Terminale.

Monitoraggio dell’heap

SystemView monitora l’allocazione della memoria heap. In molti casi, la memoria può essere allocata per la durata dell’applicazione senza problemi. Si verifica un problema quando il carico massimo dell’heap aumenta nel tempo, ovvero l’applicazione aumenta costantemente la quantità di memoria che utilizza. Ciò significa che l’applicazione sta perdendo memoria e alla fine avrà problemi. Con il monitoraggio della memoria heap di SystemView è facile vedere dove vengono effettuate le allocazioni di memoria, fornendo indizi su dove potrebbe trovarsi la perdita.

FAQ

D: Posso utilizzare SystemView mentre eseguo il debug della mia applicazione?

R: Sì. SystemView può essere eseguito in parallelo a un debugger ed eseguire la registrazione continua. Per assicurarsi che i dati possano essere letti abbastanza velocemente, configurare la connessione del debugger su una velocità di interfaccia elevata (>= 4 MHz). Le connessioni parallele a un target sono attualmente supportate solo su Windows e Linux.

D: Posso utilizzare SystemView con il mio J-Link LITE o J-Link OB?

R: Sì. In generale, SystemView può essere utilizzato con qualsiasi J-Link. J-Link LITE e J-Link OB sono limitati nella velocità dell’interfaccia di debug. Ciò porta a eventi di overflow quando il buffer RTT non può essere letto abbastanza velocemente e il sistema crea troppi eventi. Per ottenere un J-Link completo, dai un’occhiata alle opzioni di acquisto.

D: Posso utilizzare SystemView con il mio vecchio J-Link?

R: Sì. In generale, SystemView può essere utilizzato con qualsiasi J-Link se il J-Link supporta il core target. I J-Link più vecchi (V8 e precedenti) potrebbero avere capacità RTT limitate. Ciò può anche portare a eventi di overflow quando il buffer RTT non può essere letto abbastanza velocemente e il sistema crea troppi eventi. Per permutare o aggiornare il tuo J-Link, dai un’occhiata alle nostre opzioni di acquisto.

D: Posso eseguire la registrazione continua su dispositivi Cortex-A o Cortex-R?

R: Dipende dal target. RTT richiede l’accesso alla memoria sul target mentre il target è in esecuzione. Su Cortex-A e Cortex-R, questo viene eseguito tramite AHB-AP. Se un dispositivo target ha un AHB-AP, SystemView può registrare continuamente.

D: Posso eseguire la registrazione continua su ARM7, ARM9?

R: No. RTT richiede l’accesso alla memoria sul target mentre il target è in esecuzione. Su questi dispositivi, sono supportate solo le modalità single-shot e post-mortem.

D: Non utilizzo embOS o FreeRTOS, posso comunque utilizzare SystemView per la mia applicazione?

R: Sì. SystemView può essere utilizzato con qualsiasi (RT)OS. Per la registrazione dell’esecuzione di attività e sistema operativo, il sistema operativo potrebbe avere opzioni per collegare moduli di strumentazione di traccia/profiling in cui può essere aggiunto SystemView. In caso contrario, il sistema operativo deve essere strumentato per poterlo fare. In caso di dubbio, contattare un venditore di sistemi operativi. Se non è possibile strumentare il sistema operativo, è comunque possibile utilizzare SystemView per registrare l’attività delle interruzioni e gli eventi utente.

D: Non utilizzo alcun sistema operativo. Dovrei comunque utilizzare SystemView?

R: Sì. Anche senza alcun sistema operativo, SystemView può essere utilizzato per registrare l’attività delle interruzioni, per verificare che le interruzioni si verifichino come previsto e per registrare eventi utente che possono essere utilizzati per misurare i tempi di esecuzione dei moduli.

D: Ricevo eventi di overflow durante la registrazione continua. Come posso evitarlo?

R: Gli eventi di overflow si verificano quando il buffer RTT di SystemView è pieno. Ciò può accadere per i seguenti motivi:

  • J-Link è mantenuto occupato da un debugger e non può leggere i dati abbastanza velocemente.
  • La velocità dell’interfaccia target è troppo bassa per leggere i dati abbastanza velocemente.
  • L’applicazione genera troppi eventi per adattarsi al buffer. Per evitarlo:
    • Minimizzare le interazioni del debugger con J-Link mentre il target è in esecuzione. (ad esempio, disabilitare le visualizzazioni live)
    • Selezionare una velocità di interfaccia più elevata in tutte le istanze connesse a J-Link. (ad esempio, il debugger e SystemView)
    • Scegliere un buffer più grande per SystemView. (1 – 4 kByte)
    • Eseguire SystemViewer autonomamente senza un debugger.

D: La mia applicazione si arresta quando connetto SystemView. Cosa potrebbe essere sbagliato?

R: Assicurarsi che siano disponibili circa 200 byte di stack per SystemView in ogni contesto (attività, interruzione, scheduler) che può creare eventi SystemView.

D: Non riesco a iniziare la registrazione in SystemView. Cosa potrebbe essere sbagliato?

R: Le possibili ragioni sono:

  • J-Link o target non sono connessi: assicurarsi che tutte le connessioni siano OK.
  • Il target non è in esecuzione: assicurarsi che il target sia in esecuzione, altrimenti la connessione potrebbe fallire o il blocco di controllo RTT potrebbe non essere trovato.
  • Il modulo SystemView non è configurato: assicurarsi che il modulo SystemView sia incluso nell’applicazione e che SEGGER_SYSVIEW_Conf() venga chiamato all’inizio dell’applicazione.
  • Il software J-Link è obsoleto: assicurarsi di avere installato l’ultimo pacchetto di software e documentazione J-Link.

D: SystemView non riesce a trovare il blocco di controllo RTT. Come posso configurarlo?

R: Il rilevamento automatico del blocco di controllo RTT può essere eseguito solo in un intervallo di indirizzi RAM noto dopo che è stato inizializzato. Assicurarsi che l’avvio dell’applicazione sia stato eseguito quando si inizia a registrare. Se il blocco di controllo RTT si trova al di fuori dell’intervallo noto per il dispositivo selezionato, selezionare “Indirizzo” e inserire l’indirizzo esatto del blocco di controllo RTT o selezionare “Intervallo di indirizzi” e inserire un intervallo di indirizzi in cui sarà il blocco di controllo RTT.

D: Ricevo pacchetti non validi. Come può accadere?

R: I pacchetti non validi vengono principalmente generati dal sistema target per uno dei due motivi seguenti:

  • SystemView non blocca correttamente quando registra un evento ed è interrotto da un altro evento. In questo caso, assicurarsi che SEGGER_SYSVIEW_LOCK() e SEGGER_RTT_LOCK() siano configurati correttamente per il dispositivo.
  • Il sistema entra in modalità sleep o a bassa potenza e J-Link non può accedere correttamente alla RAM per leggere il buffer SystemView. Si consiglia di non utilizzare WFI o qualsiasi modalità a bassa potenza mentre una sonda di debug è connessa al sistema.

D: Devo selezionare un dispositivo target per iniziare la registrazione?

R: Sì. J-Link deve sapere quale dispositivo target è connesso. L’elenco a discesa mostra i dispositivi utilizzati più recentemente. Per selezionare un altro dispositivo, inserisci semplicemente il suo nome. È possibile trovare un elenco di dispositivi supportati qui.

D: La mia domanda non è elencata sopra. Dove posso ottenere maggiori informazioni? Scriveteci: info@italsoft-mi.it