Uno tra i primi sistemiembedded fu l'Apollo Guidance Computer, sviluppato daCharles Stark Draper alMIT Instrumentation Laboratory. Per ogni volo lunare ne veniva utilizzato uno nell'orbiter CSM (modulo di comando e servizio) ed un altro identico nelLEM, entrambi incaricati delsistema 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 nuovicircuiti integrati monolitici per ridurne la taglia e il peso, aumentò considerevolmente il rischio.
Il primo sistemaembedded prodotto in massa fu il computer che si occupava della guida delmissile Minuteman nel1961. Era il sistema di guida computerizzatoAutonetics D-17, che utilizzava circuiti logici realizzati contransistor e unhard-disk come memoria principale. Quando il Minuteman II venne prodotto nel1966, 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 sistemiembedded hanno subito una riduzione dei costi così come una enorme crescita della capacità di calcolo e delle loro funzionalità. La cosiddettaLegge di Moore si è rivelata esatta su tutto questo periodo. Il primomicroprocessore progettato per essere messo in commercio è stato l'Intel 4004, che venne montato sucalcolatrici ed altri sistemi di piccole dimensioni. Esso richiedeva, comunque, dei chip di memoria esterni ed altra logica di supporto esterna. Verso la fine deglianni 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à deglianni 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 chiamatimicrocontrollori 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 sistemiembedded 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'interfacciaseriale (piuttosto cheparallela, più tradizionale) che potevano essere interconnessi con microcontrollori con meno connettori. In questo contesto apparve il busI²C. Verso la fine degli anni ottanta, i sistemiembedded rappresentavano la regola piuttosto che l'eccezione per quasi tutti i dispositivi elettronici, tendenza che continua tuttora.
MicrocontrollorePIC 18F8720 in contenitore 80-pinTQFP.
In questa area si collocano sistemi di svariate tipologie e dimensioni, in relazione: al tipo di microprocessore, alsistema operativo, ed alla complessità delsoftware che può variare da poche centinaia di byte a parecchi megabyte di codice. Appartengono a questa categoria di sistemi microelettronici di elaborazione imicrocontrollori.
Contrariamente ai computer generici riprogrammabili (general purpose), un sistemaembedded 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 intempo reale per permettere un controllo deterministico dei tempi di esecuzione.
Un esempio tipico e diffuso diSistema embedded sono lecentraline elettroniche installate a bordo degli autoveicoli per il controllo del motore e dell'ABS.
I sistemiembedded sonosistemi 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 intempo reale di sistemi fisici quali loSpace Shuttle.
La maggior parte dei sistemiembedded è 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 dihardware esoftware appositamente progettati.
Risulta difficile caratterizzare la velocità o i costi di un sistemaembedded 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 sistemiembedded 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 undecoder per unatelevisione 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. AllaCPUembedded spetta di determinare i percorsi dei dati nel sistema, o di gestire gliinterrupt, generare e disegnare la grafica, e così via. Spesso, quindi, gran parte dell'hardware di un sistemaembedded 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 sistemaembedded 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 sistemiembedded che non devono gestire una grossa mole di dati, possono essere utilizzati anche deipersonal computer, riducendo il numero di programmi installati, oppure utilizzando unsistema operativo real-time. In questo caso l'hardware dedicato può essere sostituito con una o più CPU ad alte prestazioni. Ciononostante, alcuni sistemiembedded potrebbero richiedere in ogni caso CPU potenti, hardware dedicato ed una grande quantità dimemoria 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 alcunichip, una CPU altamente integrata, unchip 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 sistemiembedded, in particolare quelli senzahard disk, è talvolta chiamatofirmware. Il firmware è un tipo di software che, ad esempio, è possibile trovare neichip delle memorieROM oFlash.
I sistemiembedded spesso richiedono di essere attivi continuamente per anni senza errori, pertanto il software ed ilfirmware sono progettati e testati con molta più attenzione rispetto alsoftware deipersonal computer. Molti sistemiembedded, infatti, evitano di incorporare componenti con parti meccaniche in movimento (come glihard disk), poiché meno affidabili rispetto a componenti allo stato solido come lememorie Flash.
In aggiunta, i sistemiembedded possono essere fisicamente inaccessibili (come per le batterie di perforazione dei pozzi di petrolio, oppure i componenti lanciati nellospazio), 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 chiamatowatchdog che ripristina il processore se il programma presente sullo stesso non azzera con una certa frequenza iltimer interno del componente.
Sistemi di automazione casalinghi cometermostati,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.
Attrezzi eutensili (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 nongeneral purpose, ovvero icomputer riprogrammabili propriamente detti, possono essere definiti sistemiembedded evidenziando così la loro notevole importanza. Il fatto che il sistemaembedded sia incorporato e dunque non visibile agli occhi dell'utilizzatore induce il senso comune a pensare ad una prevalenza dei computergeneral 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.
La piattaforma sulla quale può venir sviluppato un sistemaembedded varia drasticamente a seconda della sua complessità, consumi (elettrici), costo e campo di utilizzo. Si passa daiPLC emicrocontrollori più semplici ad architetture più complesse basate su circuiti integrati sofisticati (System-on-a-chip - vedere di seguito.)
Alcune piattaforme di sviluppo (reference board oreference design) molto usate sono basate su architettureARM,MIPS,Coldfire/68k, H8,SH,V850,FR-V,M32R, eccetera. Talvolta sono impiegate le più comuni architettureIBM compatibili, eventualmente adattate, conCPUX86 oPowerPC.
Altre architetture più semplificate sono basate su microcontrollerPICmicro, Intel8051,Atmel AVR, eccetera.
L'evoluzione, che porta a maggiore ingegnerizzazione dei componenti, si sta spostando, specie per sistemiembedded ad alto volume di produzione, verso i "System-on-a-chip" (o SoC). I SoC racchiudono, in un singolo circuito integrato di tipoASIC, il microcontroller/CPU e/o il DSP, memoria, oscillatori e clock, regolatore di tensione, eventuali interfacce AD/DA, e verso l'esterno (USB,ethernet, eccetera).
Data la complessità crescente, non è raro che il produttore dell'hardware fornisca un BSP (oBoard Support Package) per semplificare il supporto e integrazione tra il software sviluppato ad hoc, l'ambiente operativo sottostante e l'hardware.
Un altro comune metodo di progetto prevede l'utilizzo diFPGA (Field-Programmable Gate Array), con la programmazione di tutta la logica interna, inclusa la CPU. La maggior parte dei FPGA sono progettati proprio per questo scopo. Tipicamente si fa uso di FPGA affiancandoli ad altri circuiti integrati per l'interfacciamento.
Questa situazione è in contrasto con quella del mercato deidesktop computer, che al momento è composto solo da poche architetture concorrenti, principalmente l'Intel/AMDx86 ed ilPowerPC diApple/Motorola/IBM, quest'ultimo usato nei computerApple Macintosh fino al2005.
Utile menzionare anche lo standardPC/104, per quanto riguardante solo ilform factor (la taglia della scheda madre e simili) e il bus di comunicazione, è presente in ambito industriale e tipicamente impiega elettronica comune nei sistemi desktop (CPUX86) con riadattamenti per questi usi specifici. Usualmente, quindi, impiegano anche i medesimi sistemi operativi (principalmenteDOS,Linux od unsistema operativo real-time, come ad esempioQNX, oInferno).
Le interfacce utente per i sistemi embedded variano anche di molto tra sistema e sistema e quindi meritano qualche commento aggiuntivo.
I progettisti di interfacce comePARC,Apple,Boeing edHP tendono a minimizzare il numero di diverse interazioni dell'utente. Ad esempio, i loro sistemi utilizzano due soli bottoni (il minimo assoluto) per controllare un menu di sistema (un bottone verrebbe utilizzato per selezionare la successiva voce di menu, l'altro per attivare quella selezionata).
Untouch screen oppure dei bottoni ai bordi dello schermo possono anche essere utilizzati per minimizzare le interazioni con l'utente.
Un'altra comune pratica è quella di minimizzare e semplificare il tipo di output. A volte si usa anche associare unalampadina allo stato di ogni interfaccia, oppure ad ogni situazione di errore. Un'altra economica variazione è quella di creare due file di lampadine, accoppiate ad unamatrice di errori che possono verificarsi (l'utente può allora incollare delle etichette che spieghino l'errore nella lingua che preferisce).
Per esempio, lo standard dellaBoeing per una interfaccia di test è composta da un bottone e alcune lampadine. Quando si preme il bottone, tutte le luci si accendono. Quando il bottone viene rilasciato, le lampadine associate agli errori verificatisi rimangono accese. Le etichette sono ininglese semplificato.
I progettisti usano molto i colori e le sensazioni ad essi collegate. Ilrosso indica che l'utente può farsi male (si pensi alsangue).Giallo indica che qualcosa può andare storto.Verde indica che lo stato è positivo. Questa combinazione ricorda da vicino quella di unsemaforo, perché molte persone sono in grado di comprenderla, anche istintivamente.
Molti progettisti fanno sì che l'immagine visualizzata cambi immediatamente dopo l'interazione con l'utente. Se la macchina sta per fare qualcosa, normalmente si avvia nel giro di 7 secondi, oppure fornisce un rapporto sul procedere dell'operazione.
Se è necessario uno schermo, molti progettisti si avvalgono di testo semplice, principalmente perché gli utenti sono abituati a leggere. Unainterfaccia grafica è gradevole allo sguardo e permette di fare qualunque cosa, ma tipicamente aggiunge circa un anno di ritardo per la progettazione (ideazione, approvazione, traduzione, ecc.) e necessita di uno o due programmatori aggiuntivi, senza aggiungere alcun reale contenuto al sistema. Inoltre, una interfaccia troppo affollata in realtà tende a confondere gli utenti, perché può utilizzare simboli dall'aspetto poco familiare.
Se in un progetto è necessario riferirsi ad alcune parti della struttura (come in unafotocopiatrice), queste sono spesso etichettate con numeri ben visibili sulla struttura.
Una interfaccia di rete è semplicemente uno schermo remoto e si comporta grosso modo come una qualsiasi altra interfaccia utente.
Una delle interfacce generiche basate su schermo più famose è quella composta da due bottoni ed una linea di testo nella lingua madre dell'utente. È utilizzata ad esempio neicercapersone, nellestampanti di fascia media, negli switch di rete ed in genere in tutte le situazioni che richiedono una elevata interazione con l'utente.
Quando c'è del testo, il progettista sceglie una o più lingue: quella predefinita è normalmente una delle più conosciute dal gruppo di utenti a cui il prodotto è destinato.
La maggior parte dei progettisti tende ad utilizzare il set di caratteri nativo della lingua, nonostante ciò possa rivelarsi difficoltoso. Le persone che utilizzano set di caratteri particolari preferiscono, infatti, leggere testi scritti in questa maniera.
Il testo è normalmente tradotto da personale specializzato, anche se nello staff del progetto ci sono persone madrelingua.
Le organizzazioni straniere spesso tendono a dare ad un grosso distributore il compito di aggiornare e correggere le traduzioni nella loro lingua. Ciò spesso previene le critiche provenienti da altre persone madrelingua, che tendono a credere che nessuna organizzazione straniera può conoscere la propria lingua così bene come loro.
Quando possibile si tende a rendere il più chiaro possibile sul display i metodi di funzionamento del macchinario.
Nelle organizzazioni meglio gestite, una persona approva l'interfaccia utente. Spesso si tratta di un cliente, di un distributore oppure di qualcuno direttamente responsabile per la vendita del sistema. I committenti, infatti, tendono a prendere decisioni poco rapidamente, oppure a non prenderle affatto. Ciò causa costosi ritardi che potrebbero essere evitati come sopra riportato.
Come per altri software, i progettisti di sistemi embedded utilizzanocompilatori,assembler edebugger per sviluppare i software relativi al sistema.
Tuttavia possono usare anche alcuni programmi più specifici:
Unin-circuit emulator (ICE) è un dispositivo hardware che sostituisce o si interfaccia con il microprocessore, ed offre funzionalità per caricare velocemente e effettuare ildebugging di codice di prova all'interno del sistema.
Per velocizzare e rendere economica la diagnostica e il debugging, specie su sistemi prodotti su larga scala, viene integrata, a livello di SoC,microcontroller o CPU, l'interfacciaJTAG (alias IEEE 1149.1), una norma di interfacciamento semplice ed economico atto a sospendere il normale funzionamento del processo e interrogarne le fasi tramite collegamento a un personal computer.
Alcuni programmi aggiungono un controllo di ridondanza (checksum) o unCyclic redundancy check (CRC) al programma, in modo da permettere al sistemaembedded di controllare la validità del programma.
Compilatori elinker specifici possono essere utilizzati per migliorare l'ottimizzazione di hardware particolari.
Un sistemaembedded può avere un proprio linguaggio specifico o programma di sviluppo, oppure offrire miglioramenti ad un linguaggio esistente.
Data la complessità crescente, non è raro che il produttore dell'hardware fornisca un BSP (oBoard Support Package) per semplificare il supporto e integrazione tra il software sviluppato ad-hoc, l'ambiente operativo sottostante e l'hardware.
I programmi per la generazione del software possono avere provenienza diversa:
Compagnie produttrici di software specializzate nel mercato dei sistemiembedded
Possono essere tool provenienti dal progettoGNU (si veda anchecross compiler)
Talvolta possono essere utilizzati strumenti di sviluppo per personal computer se il processoreembedded è molto simile ad un comune processore per PC
Un telefono pubblico Internet utilizzanteWindows XP.
La presenza o meno di un completoSistema operativo su un sistemaembedded varia drasticamente a seconda della complessità della sua architettura e campo di utilizzo. Nei casi più semplici i dispositiviembedded potrebbero essere sprovvisti di un sistema operativo vero e proprio.
Su microcontrollori semplici, tipicamente opererà ciclicamente un singolo programma di pochi byte, talvolta indicato come programma di "monitor" in quanto dedicato principalmente a monitorare lo stato delle porte di I/O, senza alcuna sovrastruttura (gestione dei processi, eccetera); su ambienti complessi possono trovare applicazione i medesimi sistemi operativi impiegati comunemente per scopi generali (Linux,Windows CE, ecc.) eventualmente personalizzati (per operare in un ambiente con risorse minimali, in gergoa basso footprint), oppure più specializzati per gestire eventi insistema operativo in tempo reale (comeVxworks oQNX) o estremamente specializzati e non disponibili sul mercato (come i sistemi operativi dei cellulariGSM di prima generazione, per esempio, sviluppati tipicamente dal produttore degli apparati stessi).
Gran parte dei sistemi embedded hanno capacità native di auto-verifica delle proprie funzionalità. Tipicamente in caso di procedure inloop o subentrando in situazioni dideadlock, intervengono dei meccanismi di 'protezione' chiamatiwatchdog.
Ci sono diversi tipi principali di verifiche, divise in base alla funzione o componente controllata:
Verifica Calcolatore: CPU, RAM e memoria programmabile. Spesso si effettua una volta all'accensione. Nei sistemi di importanza critica si effettua anche periodicamente o continuamente.
Verifica Periferiche: Simula ingressi e misura uscite. Un sorprendente numero di sistemi di comunicazione, analogici o di controllo possono fare queste verifiche, spesso a costo molto basso.
Verifica Alimentazione: Solitamente misura ogni linea di potenza, e può controllare anche qual è l'ingresso (batterie o rete). Le alimentazioni sono spesso sfruttate al massimo, con poco margine di scarto.
Verifica Comunicazione: Verifica la ricezione di semplici messaggi da parte delle altre unità connesse. Internet, ad esempio, usa il messaggioICMP "ping".
Verifica Collegamenti: Solitamente usano un cavo sistemato a serpentina tra punti rappresentativi dei cavi che devono essere collegati. I sistemi di comunicazione sincroni, come la telefonia, spesso usano "sync test" a questo scopo. Le verifiche dei cavi sono economiche, e estremamente utili quando l'unità ha dei connettori.
Verifica Attrezzaggio: Spesso un sistema dev'essere regolato quando viene installato. Questa verifica fornisce indicazioni alla persona che installa il sistema.
Verifica Consumi: Misura le risorse che il sistema utilizza, e avvisa quando le quantità sono basse. L'esempio più comune è la lancetta della benzina di un'auto. Gli esempi più complessi possono essere i sistemi di analisi medica automatica che gestiscono inventari di reagenti chimici.
Verifica Operativa: Misura varie cose che interessano all'utente lavorando sul sistema. Notare che si effettua mentre il sistema è in funzione. Esempi sono gli strumenti di navigazione aeronautici, il contachilometri di un'auto, le lucine di un disk-drive.
Verifica di Sicurezza: eseguita periodicamente secondo un intervallo di sicurezza, assicura che il sistema sia ancora affidabile. La durata dell'intervallo è in genere appena inferiore al tempo minimo entro cui un malfunzionamento può causare danni.
Per quanto riguarda le funzioni di aggiornamento del software (firmware, sistema operativo o driver a seconda) dei sistemiembedded, vi sono attualmente tre possibili scenari:
1) il microcontrollore è totalmente "chiuso": il software nasce e muore con il dispositivo e quindi non è upgradabile;
2) il microcontrollore aggiornabile ma solo mediante intervento presso la rete dell'OEM ovvero presso unCAT; in questi casi si deve utilizzare un apposito strumento di diagnostica e programmazione del software;
3) il microcontrollore è aggiornabile dall'utente esattamente come un normalePC. Esempi classici: il telefono cellulare (via cavo, viabluetooth o viaOTA), il firmware della TV (mediante chiavettaUSB, inserita nell'apposita porta dell'apparecchio, contenente l'aggiornamento scaricato dal sito del produttore) e altre situazioni analoghe.
È piuttosto semplice prevedere che nel tempo la situazione più frequente sarà la terza, eccetto i casi in cui il sistemaembedded sovraintenda requisiti di sicurezza.