Sviluppo di Firmware – [5 step principali]

Giorgio Morini

Giorgio Morini

Product Development

Giorgio Morini

Giorgio Morini

Product Development

Lo Sviluppo di Firmware Personalizzati – [5 step principali]

Sviluppare un nuovo firmware da zero può diventare un impresa titanica. 

Servono forti competenze di programmazione e di analisi del progetto. 
Cerchiamo di riassumere il processo in 5 step principali per affrontare correttamente lo sviluppo di firmware

Prima di procedere e spiegarti come si sviluppa un firmware, partiamo con il definire cos’è un firmware.

Santa Wikipedia ci viene in soccorso con una definizione che io ho trovato molto precisa: “…il firmware è una specifica classe di software che fornisce input di basso livello per il controllo di specifici componenti hardware”. 

Link a wikipedia per saperne di più sui firmware. 

Tutto chiaro no?

Tradotto in linguaggio più semplice, il firmware è quella tipologia di codice che per esempio controlla delle valvole, degli interuttori, legge termometri o pressostati, etc,.

Viene normalmente installato all’interno del microprocessore (CPU).

Da lì può “dialogare” direttamente con tutti i componenti hardware della scheda elettronica e controllarli a seconda delle esigenze.

Possiamo dire che generalmente ogni schede elettronica necessita quindi di un firmware per poter funzionare.

E’ facile notare come, parallelamente alla diffusione delle schede elettroniche, c’è stata quella del firmware.

Molti dei comuni oggetti che comunemente si trovano nelle nostre abitazioni è infatti governato da una scheda elettronica.

Ci basta fare un salto in cucina.

Si trovano comunemente in commercio infatti forni, microonde, lavastoviglie, frighi, etc, che hanno piccoli pannelli di controllo da cui attivare tutte le funzioni.

Dietro a questi pannelli di controllo ci sono sempre delle schede elettroniche, e quindi firmware, che “dirigono le operazioni”.

Puoi trovare altre informazioni sulle basi della progettazione firmware qui. 

Come tutte le tipologie di software, anche i firmware hanno dei particolari linguaggi di programmazione con cui vanno scritti.

La scelta del linguaggio dipende dalla tipologia di hardware su cui andrà installato.

Nella maggior parte dei casi, l’hardware su cui andrà installato il firmware è il microprocessore.

I microprocessori (chiamati anche CPU) possono avere infatti architettura a 8, 16, 32, e 64 bit.

Su questa pagina di Wikipedia puoi trovare altre informazioni sull’architettura dei microprocessori.

I più comuni nelle applicazione domestiche/industriali sono tuttora quelli a 32 bit. Questi infatti garantiscono un adeguato spazio di memoria mantenendo i costi di sviluppo e gestione bassi.

Ma torniamo ai linguaggi di programmazione.

Anche qui come in molti settori, l’innovazione tecnologica nel corso degli anni ha radicalmente rinnovato il sistema.

Una volta con i vecchi processori a 8 bit, per esempio, il linguaggio più utilizzato era Assembly. Man mano che i processi da controllare sono diventati più complicati, i processori sono passati da 8 a 16 e poi 32 bit, richiedendo linguaggi più complessi.

I più comuni e largamente diffusi sono diventati C e C++.

C e C++ sono quelli che comunemente usiamo anche noi in Troll per la gestione di un po’ tutti i progetti, da quelli più semplici a quelli più complessi.

Prenota la tua consulenza gratuita!

Ogni sistema integrato necessita di essere testato.

Continuamente.

E’ consigliato anche che ogni sistema venga testato a diversi livelli.

I più comuni sono:

  1. Test di sistema: Verifica che il prodotto intero funzioni e soddisfi tutti i requisiti riportati nella fase precedente.
  2. Test d’integrazione: Sono utilizzati per verificare se una serie di sotto-sistemi interagisce come ci si aspetta e produce i risultati corretti;
  3. Test sull’unità: Test sui singoli componenti del software performano come i programmatori si aspettano.


Dei 3, i test di sistema sono i più comuni e facilmente impiegabili.

Infatti, si testa direttamente il prodotto completo se svolge tutte le attività per cui è stato progettato.

Le altre 2 tipologie di test hanno bisogno di un team di ingegneri specializzati per essere implementati e una completa esposizione dell’hardware con accesso al software.

4. Progetta per cambiare e migliorare

Durante la definizione dell’architettura del firmware è fondamentale tenere a mente che il firmware avrà, sicuramente, bisogno di implementazioni successive.

Molte aziende, grazie alla loro esperienza, hanno sviluppato negli anni codici base da utilizzare come partenza per vari progetti, personalizzandoli poi in base ai vari requisiti.

L’esempio classico è quello del settore dei forni da cucina.

Se infatti un forno di una marca costosa e moderna, ha una serie di bottoni per diverse tipi di cotture, quello più economico avrà sicuramente meno programmi a disposizione dell’utente.  

In questo caso verrà utilizzata una base firmware uguale per i 2 forni, alla quale verranno aggiunte tutte le funzionalità necessarie nel forno moderno.

In fase di progettazione, quindi, tutti questi aspetti vanno tenuti a mente, progettando anche in funzione di possibili integrazioni future.

In fase di definizione dei requisiti e prima pianificazione, il team di sviluppo del software dovrà aver ben chiaro quale sarà la pianificazione di upgrade del prodotto.

Il team progetterà di conseguenza il firmware assicurandosi che le implementazioni siano facilmente integrabili.

Questo metodo di lavoro potrà essere applicato anche tramite l’utilizzo di pacchetti che, man mano che il prodotto viene migliorato, vengono installati.

Per esempio un forno con molte funzioni può essere composto dal firmware base + pacchetto A. Qualora l’azienda voglia offrire una serie di ulteriori upgrade per la cottura della pizza gli basterà installare il “pacchetto B”. Il firmware sarà quindi composto da: firmware base + pacchetto A + pacchetto B.

Questo tipo di approccio porta a sviluppare un firmware base senza “bug”, che con l’installazione di pacchetti successivi permette di costruire prodotti complessi molto velocemente.

Questo diminuisce il “time-to-market” e l’investimento iniziale necessario.

Più un’azienda ha esperienza e conoscenze specifiche nello sviluppo di firmware, più avrà a disposizione pacchetti base di firmware che faciliteranno il design di un nuovo prodotto.

5. La gestione della variabile “tempo”

Un aspetto che non tutti i sistemi integrati richiedono, ma che risulta di fondamentale importanza è la gestione della variabile tempo.

Un semplice esempio può essere quello di un forno (siamo amanti della buona cucina qua in Troll,… 🙂 ) che dopo 5 secondi dall’accensione attiva il pre-riscaldamento.

Questa semplice istruzione è facilmente integrabile perché definita in ogni suo aspetto. Dall’accensione aspetta 5 secondi e poi accendi la resistenza.

Ci sono però una serie di requisiti chiamati “hard real-time” oppure “soft real-time” che sono più complicati da programmare. Le “soft real-time” sicuramente sono quelle più difficili da definire in modo non-ambiguo.

Un esempio di questo può essere quello dei un decoder per TV.

Qui infatti ci possono essere varie regole che regolano la registrazione di frame video. Potrebbe per esempio consentire il fatto che 1 frame video ogni tanto venga perso, ma mai 2 di fila. Un’altro ancora, quello di non perdere mai l’audio, prioritizzandolo rispetto ad altri processi.

Il trucco che utilizziamo per gestire le diverse tipologie di sistemi è quello di mantenere ben divisi i requisiti “real-time” e “non-real-time”. Questo per semplificare l’architettura del firmware, e l’eventuale successiva implementazione.

Un altro vantaggio, del mantenere tutte le funzioni “real-time” separate, è quello di facilitare i test che verificano che tutte le deadline vengano rispettate.

Conclusioni

Come avrai intuito da questa breve intro allo sviluppo di firmware, è che regna la complessità nella scrittura di questi codici.

Le variabili da tenere in considerazione sono infinite e risulta fondamentale essere ordinati e precisi, seguendo un processo di lavoro ben definito.

Come abbiamo descritto sopra, si parte dall’analisi dei requisiti, continuando con la scelta del microprocessore e scelta del linguaggio di programmazione.

L’analisi dei requisiti dovrà tenere in considerazione possibili upgrade del prodotto. Vedi esempio del forno da cucina.

Dando per scontato che sai programmare, occorre scrivere pacchetti di codice e continuamente testarli su vari livelli, così come avere bene chiaro come gestire la variabile “tempo” all’interno del sistema.

Devi Progettare una Scheda elettronica Personalizzata

Iscriviti qui sotto per scaricare la guida completa

Hai bisogno di ulteriori info?

Scrivici e prenota la tua consulenza gratuita!

Top