Le potenzialità di uno strumento di sviluppo professionale come TRACE32 vengono ulteriormente rafforzate nel caso di un suo utilizzo in associazione a tool complementari. In questo articolo facente parte della Rubrica Firmware Reload, si presenta una soluzione integrata fra più prodotti che mette in evidenza quanto possano essere migliorate grazie alle sinergie dell'uso combinato, la sicurezza e l’affidabilità del software automotive real-time.
In mercati fortemente innovativi e concorrenziali, come quello automobilistico, sono sempre più sentite da una parte l’esigenza di ottimizzazione del software dei sistemi elettronici di controllo per autoveicoli, dall’altra la necessità di validare il software stesso rispetto a stringenti requisiti di robustezza, sicurezza e affidabilità. In questo scenario estremamente dinamico dell'automotive, dove una richiesta di qualità costantemente in aumento si contrappone alla diminuzione sistematica dei tempi concessi allo sviluppo, è diventato di fondamentale importanza poter disporre di sistemi di sviluppo che siano in grado di aiutare i sistemisti ed i progettisti SW a formalizzare innanzitutto i requisiti di analisi e di modellazione, e successivamente di verificare le prestazioni ottenute in termini di tempistiche e rispetto del real-time. Spesso, poi, questi strumenti già altamente specializzati e performanti nell’uso stand-alone, raggiungono risultati ancor più di spicco quando vengono associati ad altri applicativi complementari, con una notevole sinergia d'insieme. In questo articolo, si mostra come l’utilizzo congiunto della linea di prodotti TRACE32 di Lauterbach GmbH, insieme a tools di terze parti disponibili presso diverse aziende, permetta di raggiungere un grado di integrazione reciproca tale da soddisfare le esigenze sopra citate.

Figura 1: Architettura AUTOSAR
INTRODUZIONE A TRACE32
Si tratta di una linea completa, modulare e aggiornabile di strumenti di sviluppo per microprocessori. I sistemi TRACE32 sono diffusi in tutto il mondo e sono prodotti da Lauterbach GmbH, azienda leader mondiale di settore con esperienza nel campo dei progetti embedded sin dal 1979. I sistemi di sviluppo TRACE32 offrono un ambiente di debug completo, a partire dalle funzionalità più standard fino alle prestazioni più avanzate e sofisticate. Tuttavia, al giorno d’oggi, in molte applicazioni non è più sufficiente eseguire pochi semplici test del codice. In un mercato come quello automobilistico, è sempre più necessario verificare come il codice si comporta in tutte le possibili condizioni di esercizio. Le prestazioni convenzionali di debug non sono più sufficienti per questi obiettivi, ma occorrono sistemi di sviluppo in grado di registrare flussi di esecuzione generati da una CPU attraverso una porta integrata di trace. TRACE32 è in grado di gestire il trace di una CPU a singolo core o multicore, sia a livello on-chip che off-chip. Un sistema TRACE32 per trace è composto da moduli standard di debug e trace a cui si aggiungono un debugger e un preprocessore specifici per l’architettura della CPU da interfacciare. Oltre alle prestazioni di debug, il sistema supporta trace off-chip sia seriale che parallelo in modo non intrusivo, sia per architetture di CPU a singolo core che multicore, ed è in grado di associare un riferimento temporale ai record di trace. Con i dati registrati è possibile effettuare misure statistiche e di copertura del codice, oltre a poter rilevare in modo rapido e sistematico condizioni di malfunzionamento particolarmente complesse che si verificano solo a runtime. Il riconoscimento delle strutture dati rilevanti di un sistema operativo e dei suoi meccanismi di gestione delle risorse (awareness) permette ad un debugger di offrire all’utente funzionalità avanzate di controllo del software.
Per molti sistemi operativi embedded, i debugger Lauterbach forniscono una sofisticata integrazione con l’OS, in grado di mostrare le condizioni di utilizzo delle principali risorse allocate. Inoltre, molte CPU rendono disponibile anche il trace di dati d’interesse dell’utente, ad esempio l’informazione sul processo correntemente in esecuzione in un sistema operativo multiprocessing. Utilizzando questi dati, TRACE32 è in grado di analizzare il flusso di esecuzione di un programma multitasking, distinguendo il codice per ogni singolo thread o processo.
INTRODUZIONE ALLO STANDARD AUTOSAR
L’architettura software AUTOSAR è uno standard aperto per l’ambito automobilistico, sviluppato da un consorzio di aziende del settore per creare un’infrastruttura integrata valida come punto di riferimento per lo sviluppo di software per autoveicoli. Pur preservando la competitività delle aziende partecipanti, ha lo scopo di migliorare l’efficienza e la qualità del software in ambito automobilistico. Per il progetto delle funzioni di controllo di un autoveicolo, lo standard AUTOSAR definisce un modello di progettazione software basato su componenti. Questi componenti sono l’unità minima applicativa dotata di funzionalità e quindi l’intera applicazione può essere vista come composta da diversi componenti che si interfacciano fra loro come definito nello standard. Un progetto AUTOSAR si basa su un’architettura a livelli in cui i componenti sono collegati a livello concettuale da un Virtual Function Bus (VFB), e a livello implementativo da un Real Time Environment (RTE). In Figura 1 è riportato uno schema di riferimento. Il livello Basic SoftWare (BSW) si occupa di fornire servizi sia dipendenti dall’hardware sia indipendenti, in modo da fornire un’astrazione verso i livelli superiori. Invece, i servizi di livello applicativo (Application Software Component) realizzano le effettive funzionalità del sistema. Poiché i componenti AUTOSAR non hanno accesso diretto all’hardware sottostante o al sistema operativo, la loro implementazione non può essere caratterizzata da entità come i thread o i processi. Ogni singola funzionalità da eseguire a runtime viene invece incapsulata in un cosiddetto Runnable, definito come “una sequenza di istruzioni che può essere avviata dal Run Time Environment”.

Figura 2: Esempi di analisi statistiche sui task in TRACE32

Figura 3: Esempi di analisi statistiche sulle funzioni in TRACE32



