Un sistema embedded, detto anche sistema incorporato o più raramente sistema integrato, è un qualunque sistema elettronico di elaborazione a microprocessore progettato appositamente per un determinato utilizzo (special purpose), ovvero non riprogrammabili dall'utente per altri scopi. Spesso questo sistema elettronico si basa su una piattaforma hardware ad hoc integrata nel sistema.
Storia Uno tra i primi sistemi embedded fu l'Apollo Guidance Computer, sviluppato da Charles Stark Draper al MIT Instrumentation Laboratory. Per ogni volo lunare ne veniva utilizzato uno nell'orbiter CSM (modulo di comando e servizio) ed un altro identico nel LEM, entrambi incaricati del sistema di guida inerziale. Al momento della concezione, l'Apollo Guidance Computer era considerato uno dei più rischiosi oggetti all'interno del progetto Apollo. L'utilizzo dei nuovi circuiti integrati monolitici per ridurne la taglia e il peso, aumentò considerevolmente il rischio.
Il primo sistema embedded prodotto in massa fu il computer che si occupava della guida del missile Minuteman nel 1961. Era il sistema di guida computerizzato Autonetics D-17, che utilizzava circuiti logici realizzati con transistor e un hard-disk come memoria principale. Quando il Minuteman II venne prodotto nel 1966, il D-17 fu rimpiazzato da un nuovo computer basato su circuiti integrati e che fu il primo caso d'impiego di tali componenti in grandi volumi, contribuendo ad abbassarne i prezzi ed a diffonderne di conseguenza l'uso. La principale caratteristica di questo sistema era la possibilità di modificare successivamente l'algoritmo di guida per rendere il missile più preciso. Il computer inoltre eseguiva la diagnostica del missile consentendo un risparmio sul peso di cavi e connettori.
In seguito, i sistemi embedded hanno subito una riduzione dei costi così come una enorme crescita della capacità di calcolo e delle loro funzionalità. La cosiddetta legge di Moore si è rivelata esatta su tutto questo periodo. Il primo microprocessore progettato per essere messo in commercio è stato l'Intel 4004, che venne montato su calcolatrici ed altri sistemi di piccole dimensioni. Esso richiedeva, comunque, dei chip di memoria esterni ed altra logica di supporto esterna. Verso la fine degli anni settanta, i microprocessori ad 8 bit erano la norma, ma necessitavano sempre di memoria esterna, logica di decodifica e di un'interfaccia con il mondo esterno. In ogni caso, i prezzi erano in caduta libera e sempre più applicazioni cominciarono ad adottare questo approccio, piuttosto che metodologie di progetto di circuiti logici personalizzate.
Verso la metà degli anni ottanta, un maggiore grado di integrazione permise il montaggio di altri componenti, in precedenza collegate esternamente, sullo stesso chip del processore. Questi sistemi integrati vennero chiamati microcontrollori piuttosto che microprocessori e fu possibile la loro utilizzazione di massa. Con un così basso costo per componente, questa alternativa divenne molto più interessante che costruire interamente circuiti logici dedicati. Ci fu un'esplosione del numero di sistemi embedded distribuiti sul mercato, così come delle componenti fornite da vari produttori per facilitare la progettazione di tali sistemi. Per esempio, vennero prodotti molti circuiti integrati con un'interfaccia seriale (piuttosto che parallela, più tradizionale) che potevano essere interconnessi con microcontrollori con meno connettori. In questo contesto apparve il bus I²C. Verso la fine degli anni ottanta, i sistemi embedded rappresentavano la regola piuttosto che l'eccezione per quasi tutti i dispositivi elettronici, tendenza che continua tuttora.
Descrizione
In questa area si collocano sistemi di svariate tipologie e dimensioni, in relazione al tipo di microprocessore, al sistema operativo e alla complessità del software che può variare da poche centinaia di byte a parecchi megabyte di codice. Appartengono a questa categoria di sistemi microelettronici di elaborazione i microcontrollori.
Contrariamente ai computer generici riprogrammabili (general purpose), un sistema embedded ha dei compiti noti già durante lo sviluppo, che eseguirà dunque grazie ad una combinazione hardware/software specificamente studiata per la tale applicazione. Grazie a ciò, l'hardware può essere ridotto ai minimi termini per contenerne lo spazio occupato limitando così anche i consumi, i tempi di elaborazione (maggiore efficienza) ed il costo di fabbricazione. Inoltre l'esecuzione del software è spesso in tempo reale per permettere un controllo deterministico dei tempi di esecuzione.
Un esempio tipico e diffuso di sistema embedded sono le centraline elettroniche installate a bordo degli autoveicoli per il controllo del motore e dell'ABS.
Caratteristiche I sistemi embedded sono sistemi di calcolo, nel significato più generale del termine. Questa definizione, infatti, include tutti i computer del mondo, tranne quelli progettati per essere di utilità generica (general purpose). Gli esempi di sistemi embedded spaziano dai lettori portatili di musica ai controlli in tempo reale di sistemi fisici quali lo Space Shuttle.
La maggior parte dei sistemi embedded è progettata per eseguire ripetutamente un'azione a costo contenuto. La maggior parte di questi sistemi, ma non tutti, deve soddisfare inoltre dei vincoli di prestazioni minime, come ad esempio la necessità di operare in tempo reale. Può anche accadere che un sistema debba essere in grado di eseguire molto velocemente alcune funzioni, ma possa tollerare velocità inferiori per altre attività. Questi sistemi rispettano i vincoli di prestazione con una combinazione di hardware e software appositamente progettati.
Risulta difficile caratterizzare la velocità o i costi di un sistema embedded generico, anche se, soprattutto per sistemi che devono processare una grande quantità di dati, il progetto stesso assorbe la maggior parte dei costi. Per la maggior parte dei sistemi embedded le prestazioni richieste possono essere soddisfatte con una combinazione di hardware dedicato e una quantità limitata di software ottimizzato. A titolo di esempio, basti pensare ad un decoder per una televisione satellitare. Nonostante un sistema come questo debba processare decine di megabit di dati al secondo, la maggior parte del lavoro è svolta da hardware dedicato che separa, regola e decodifica il flusso digitale multicanale in un'uscita video. Alla CPU embedded spetta di determinare i percorsi dei dati nel sistema, o di gestire gli interrupt, generare e disegnare la grafica, e così via. Spesso, quindi, gran parte dell'hardware di un sistema embedded deve sottostare a requisiti di prestazioni molto meno severi di quelli che, invece, deve rispettare l'hardware primario del sistema stesso. Questo permette all'architettura di un sistema embedded di essere semplificata rispetto a quella di un computer generico che deve eseguire le stesse operazioni, usando ad esempio una CPU più economica che tutto sommato si comporta discretamente anche per queste funzioni secondarie.
Per sistemi embedded che non devono gestire una grossa mole di dati, possono essere utilizzati anche dei personal computer, riducendo il numero di programmi installati, oppure utilizzando un sistema operativo real-time. In questo caso l'hardware dedicato può essere sostituito con una o più CPU ad alte prestazioni. Ciononostante, alcuni sistemi embedded potrebbero richiedere in ogni caso CPU potenti, hardware dedicato ed una grande quantità di memoria per eseguire una certa attività.
Nel caso di sistemi che devono essere commercializzati in massa, come un lettore di musica portatile, ridurre i costi diventa una priorità. Sistemi di questo genere, infatti, spesso sono dotati di alcuni chip, una CPU altamente integrata, un chip dedicato a tutte le altre funzioni ed un singolo banco di memoria. In questo caso ogni componente è selezionato e progettato per ridurre il più possibile i costi.
Il software scritto per molti sistemi embedded, in particolare quelli senza hard disk, è talvolta chiamato firmware. Il firmware è un tipo di software che, ad esempio, è possibile trovare nei chip delle memorie ROM o Flash.
I sistemi embedded spesso richiedono di essere attivi continuamente per anni senza errori, pertanto il software ed il firmware sono progettati e testati con molta più attenzione rispetto al software dei personal computer. Molti sistemi embedded, infatti, evitano di incorporare componenti con parti meccaniche in movimento (come gli hard disk), poiché meno affidabili rispetto a componenti allo stato solido come le memorie Flash.
In aggiunta, i sistemi embedded possono essere fisicamente inaccessibili (come per le batterie di perforazione dei pozzi di petrolio, oppure i componenti lanciati nello spazio), pertanto i sistemi che li contengono devono essere capaci di resettarsi autonomamente in caso di perdita o corruzione dei dati. Questa funzionalità è molto spesso ottenuta con l'inserimento di un componente elettronico chiamato watchdog che ripristina il processore se il programma presente sullo stesso non azzera con una certa frequenza il timer interno del componente.
Esempi di sistemi embedded
Personal computer dedicati all'automazione industriale e il controllo di processo. Sistemi elettronici per avionica Sportelli Bancomat e apparecchi POS. Elettronica aeronautica, come sistemi di guida inerziale, hardware/software di controllo per il volo e altri sistemi integrati nei velivoli e nei missili. Telefoni cellulari e, in generale, dispositivi mobili. Centralini telefonici. Apparecchiature per reti informatiche come router, timeserver e firewall, switch. Stampanti e Fotocopiatrici. Sistemi di memorizzazione dati come hard disk, floppy disk o compact disc. Sistemi di automazione casalinghi come termostati, condizionatori e altri sistemi di controllo della sicurezza. Distributori automatici di bevande e cibo, di carburante, di biglietti, ecc.; stazioni automatizzate di riscossione dei pedaggi autostradali o dei parcheggi, ecc. ; in generale distributori o di vari prodotti o servizi.
Elettrodomestici come forni a microonde, lavatrici, apparecchi televisivi, lettori o scrittori di DVD, impianti Hi-fi o home video ma anche un banale spazzolino elettrico o un rasoio elettrico di alta fascia. Apparecchiature biomediche come ecografi, scanner medici per risonanza magnetica. Equipaggiamenti medici. Strumenti di misura come oscilloscopi digitali, analizzatore logico, e analizzatore di spettro. Ma pure una banale bilancia elettronica da casa, nonché il comune termometro digitale. I PLC (Programmable Logic Controller) utilizzati per l'automazione industriale. Console per videogiochi fisse e portatili. Centraline di controllo incorporate nei veicoli per la gestione elettronica di vari impianti e servizi. Strumenti musicali digitali quali tastiere workstation, mixer digitali o processori audio. Decoder per TV digitale. Sistemi per la domotica. Attrezzi e utensili (sia casalinghi che professionali): dal trapano elettrico ad una friggitrice, dalla lavatrice ad una livella multifunzione laser, ma l'elenco sarebbe assai lungo.
In pratica, la diffusione di questi sistemi è capillare nella società e tutti i dispositivi elettronici non general purpose, ovvero i computer riprogrammabili propriamente detti, possono essere definiti sistemi embedded evidenziando così la loro notevole importanza. Il fatto che il sistema embedded sia incorporato e dunque non visibile agli occhi dell'utilizzatore induce il senso comune a pensare ad una prevalenza dei computer general purpose quando in realtà la situazione è diametralmente opposta. Anche perché per la stragrande maggioranza delle persone risulta difficile pensare che questi prodotti/sistemi contengano dei "computer" a tutti gli effetti.
Progettazione Piattaforma