- 1. Sviluppo dei requisiti del prodotto
- 2. Progettazione di sistemi e sviluppo di algoritmi
- 3. Codifica per firmware incorporato
- Test del firmware incorporato
Lo sviluppo del software è generalmente difficile, ma per un sistema embedded è a un livello di difficoltà completamente nuovo. Gli sviluppatori di firmware devono avere una buona conoscenza dello sviluppo hardware e comprendere il funzionamento interno di un processore integrato. Per l'articolo di oggi, condividerò strumenti e suggerimenti che potrebbero essere utilizzati per raggiungere un alto livello di efficienza ed eliminare alcune delle cose che rendono noioso lo sviluppo del firmware.
Lo sviluppo del software integrato passa attraverso il processo di sviluppo simile allo sviluppo del software "ordinario". Indipendentemente dal modello di sviluppo / gestione adottato, lo sviluppo di software integrato prevede generalmente i seguenti passaggi:
- Sviluppo del requisito del prodotto
- Progettazione di sistemi e sviluppo di algoritmi
- Codifica
- Test
Esamineremo alcune delle difficoltà che derivano da queste fasi e alcuni degli strumenti che potrebbero aumentare l'efficienza e la produttività.
1. Sviluppo dei requisiti del prodotto
Le specifiche del prodotto sono spesso realizzate pensando ai progettisti della scheda. Di solito contiene poche informazioni che potrebbero aiutare lo sviluppo del firmware, quindi, lo sviluppatore del software integrato si ritrova con un documento difettoso di 250 pagine (in media) che non può essere utilizzato per i riferimenti e se non attentamente considerato potrebbe facilmente portare a sviste nella progettazione che, a loro volta,, porta a prolungare il periodo di tempo del progetto se non al fallimento generale del progetto. I documenti contengono raramente informazioni sui registri o sui loro campi di bittra le altre cose e questo costa agli sviluppatori del firmware diverse ore di lavoro mentre cercano nel documento per identificare cose come quale registro appartiene a quale gruppo e quale campo di bit appartiene a quale registro. Di seguito sono riportati alcuni suggerimenti che potrebbero essere presi in considerazione per garantire lo sviluppo di documenti di specifica del progetto più utili.
Uso delle descrizioni dei registri
Come discusso in precedenza, gli sviluppatori di firmware devono comprendere le complessità di tutti i registri, memorie, ecc. Di tutti gli elementi di controllo (CPU, MCU, ecc.) In un progetto per essere in grado di controllare efficacemente tutte le parti del sistema. A tal fine, gli sviluppatori del firmware possono garantire che il documento delle specifiche contenga una descrizione appropriata dei registri insieme alle mappe di memoria. A tutti i registri nell'elemento di controllo potrebbe essere assegnato un nome distintivo che li renda facilmente identificabili in tutto il documento e potrebbero essere tutti collegati a caldo in modo tale da portare a un elenco all'interno del documento che indica il nome, la posizione, il blocco e l'indirizzo di ogni registro.
Descrizioni delle attività
Un altro modo attraverso il quale i documenti di specifica possono essere resi utili agli sviluppatori di software embedded è descrivendo cosa dovrebbe fare ogni blocco e come dovrebbe farlo. Inoltre, in questa fase, dovrebbero esserci piani per la gestione degli errori sotto ogni blocco. Essenzialmente questo sembra che lo sviluppatore del firmware abbia detto; “Quando arrivo qui, devo fare questo, questo e questo, assicurandomi che questo, questo e quello non avvenga”. Questo aiuta a guidare il lavoro dello sviluppatore e aiuta a valutare il progetto ancor prima che la progettazione inizi per identificare potenziali errori e bug, risparmiando tempo e denaro preziosi.
Ci sono altri fattori tra cui la struttura del documento, l'uso di caratteri di facile lettura (qualcosa con cui gli sviluppatori possono lavorare anche quando sono stanchi), grafici e immagini ove possibile che potrebbero aumentare l'efficienza del team del firmware dopo questa fase.
2. Progettazione di sistemi e sviluppo di algoritmi
Questa fase prevede lo sviluppo di pseudocodici, diagrammi di flusso, macchine a stati e tutto ciò che riguarda la progettazione di ciò che il firmware. Per questa fase, è possibile utilizzare un certo numero di strumenti per organizzare i pensieri, esplorare software legacy / scritto in precedenza attorno al progetto e sviluppare il proprio diagramma di flusso, macchina a stati, ecc. Alcuni di questi strumenti sono discussi di seguito.
PIM
In questa fase dello sviluppo del prodotto, gli sviluppatori tendono a scarabocchiare molto mentre raccolgono risorse sul progetto dai collegamenti Web alle formule, ecc. Uno dei modi migliori per tenere traccia di queste informazioni in modo che siano utili in seguito è attraverso l'uso di PIM (gestione delle informazioni sul prodotto). Ci sono un certo numero di PIM là fuori, ma ne menzionerò alcuni con alcune caratteristiche eccezionali.
1. Evernote
Evernote ti aiuta a prendere appunti disponibili su qualsiasi piattaforma in modo da poter controllare la nota che hai fatto sul tuo PC mentre sei a casa dell'autobus. Le note sono ben organizzate e sono completamente ricercabili, quindi troverai sempre ciò di cui hai bisogno.
2. TrunkNote
Trunk note è un'applicazione per prendere appunti simile a un Wiki. Porta tutto il potere organizzativo dei wiki nel prendere appunti. È un'applicazione basata su telefono cellulare ma può essere facilmente sincronizzata con un PC tramite WIFI.
Altri tipi di PIM come Tiddlywiki ecc. Ognuno di essi è dotato di funzionalità che possono renderlo più attraente per individui specifici e potrebbero richiedere alcuni campionamenti prima di stabilirne uno.
Comprensione del codice legacy
Un altro gruppo di strumenti molto utili durante la fase di progettazione sono gli strumenti per la comprensione dei codici legacy. In situazioni in cui il prodotto in fase di progettazione è una versione migliorata di un prodotto precedente, lo sviluppatore potrebbe trovare utile rivedere il lavoro già svolto per ottenere alcune idee e forse bit di codice per questo nuovo progetto. Questa potrebbe essere una strada piuttosto lunga, soprattutto se non facevi parte del team che ha creato il software precedente. Esistono numerosi software che aiutano a costruire alberi, creare documentazione e diagrammi di flusso da codice già scritto.
1. Doxygen
Doxygen è uno strumento abbastanza potente che aiuta a creare documentazione da codici sorgente. È stato progettato principalmente per funzionare con C ++ ma funziona anche con C, Python e alcuni altri linguaggi. Ha la capacità di estrarre la struttura del codice di qualsiasi codice, fornendo grafici di dipendenza generati automaticamente e diagrammi di ereditarietà per aiutare a visualizzare il codice.
2. Graphviz
Secondo il loro sito web, graphviz aiuta a presentare le informazioni strutturali come diagrammi di grafici e reti astratte. Può essere utilizzato insieme a Doxygen per comprendere meglio la grafica da esso prodotta.
3. Srecord
Srecord è un potente strumento per manipolare le immagini del firmware e convertire tra diversi formati di file. Può essere utilizzato per calcolare ed eseguire CRC e checksum su blocchi di byte, correggere i file di errore creati a causa di toolchain difettosi e filtrare o spostare sezioni di file tra le altre cose. Maggiori informazioni sul suo utilizzo possono essere trovate sulla sua pagina SourceForge.
Alcuni altri strumenti che rientrano in questa categoria sono CrystalRev e Hexplorer, tra gli altri.
Sviluppo di algoritmi
Tutta la ricerca e il prendere appunti si aggregano allo sviluppo di algoritmi che si trasformano in pseudocodici e diagrammi di flusso per il progetto. Esistono diversi strumenti per lo sviluppo di diagrammi di flusso e sebbene la maggior parte di essi non sia esclusiva per lo sviluppo del firmware, forniscono funzionalità utili e importanti che semplicemente portano a termine il lavoro e aiutano anche a mantenere i grafici durante tutto il ciclo di sviluppo del prodotto. Di seguito sono riportati alcuni dei migliori strumenti disponibili per i diagrammi di flusso.
1. QFSM
QFSM è uno strumento grafico per la progettazione e la simulazione di macchine a stati finiti. La sua capacità di simulare i progetti lo rende molto migliore della maggior parte degli altri software di questo gruppo. È particolarmente utile quando si progettano macchine a stati per FPGA e hardware di destinazione simili.
2. Grafico lucido
Lucid chart è probabilmente il software per diagrammi di flusso migliore e più flessibile in circolazione. È basato sul Web e dispone di funzionalità di squadra che ti consentono di lavorare tra più dispositivi e collaborare in tempo reale con i compagni di squadra.
3. Microsoft Visio
Visio è attualmente uno dei migliori strumenti grafici. Ha una serie di oggetti provenienti da diversi campi che facilitano la descrizione di qualsiasi cosa. Tuttavia, non viene fornito con funzionalità che migliorano la collaborazione tra i team e può essere utilizzato solo su una macchina Windows su cui è installato.
4. Presentazioni Google
Una delle cose fondamentali nello sviluppo dei prodotti nel mondo di oggi è l'uso di strumenti che consentono ai team di collaborare efficacemente ovunque si trovino e questa è una cosa che Google Slides porta a bordo. Può essere utilizzato per sviluppare tutti i tipi di grafici, dai diagrammi di flusso del software agli organigrammi e alle mappe mentali. È basato su cloud e funziona in quasi tutti i browser più diffusi.
Esistono molti altri strumenti per la creazione di diagrammi di flusso e lo sviluppo di algoritmi generali, come al solito, ognuno con i suoi pro e contro.
3. Codifica per firmware incorporato
Tutto ciò che è stato menzionato fino a questo punto conduce qui. Il mondo degli SDK e degli IDE, la scelta degli strumenti in questa fase dipende dal dispositivo di destinazione e dalle funzionalità da incorporare nel dispositivo, per questo motivo escluderò dalla discussione gli SDK e gli IDE popolari come MPLAB, ecc. a strumenti di natura più complementare.
1. QT (sviluppo GUI)
I display (interattivi o meno) sono i mezzi più popolari per fornire feedback agli utenti in questi giorni e l'SDK di QT è uno dei migliori in circolazione e probabilmente non è estraneo a nessuno all'interno della cerchia incorporata. Fornisce funzionalità "drag and drop" che semplificano lo sviluppo di applicazioni complesse basate su GUI per dispositivi embedded, indipendentemente dalla piattaforma di destinazione o dal linguaggio di programmazione utilizzato per lo sviluppo complessivo del progetto. In pratica elimina lo stress associato all'utilizzo del codice per creare interfacce utente.
2. (Prototipazione veloce)
Uno dei maggiori colli di bottiglia nello sviluppo di software embedded è il fatto che l' hardware di solito non è disponibile per testare le cose in movimento durante lo sviluppo del software. Spesso, quando è disponibile, gli sviluppatori del firmware sarebbero stati costretti ad aspettare tutto il tempo necessario affinché l'hardware fosse pronto facendo poco o nulla. Ciò aumenta il tempo di consegna e non crea spazio per il tipo di sincronizzazione tra gli ingegneri hardware e gli sviluppatori del firmware che avrebbe aumentato la qualità del prodotto. Per aiutare a risolvere questo problema, i ragazzi di VaST hanno creato una piattaforma di prototipazione virtuale a livello di sistemi elettronici che potrebbe essere utilizzata per creare un prototipo hardware virtuale su cui è possibile eseguire il software integrato per determinare le prestazioni dei sistemi prima che l'hardware sia pronto.
3. Doxygen (documentazione)
Una delle parti più importanti della scrittura di qualsiasi codice è la documentazione e uno degli strumenti più popolari per questo è Doxygen. Oltre al suo utilizzo per comprendere il software legacy, Doxygen ha la capacità di estrarre automaticamente commenti da un codice e creare documentazione che lo includa. Le strutture Doxygen includono i file graficamente e creano riferimenti per ogni funzione, variabile e macro utilizzata nel codice. I diagrammi di flusso e i diagrammi di flusso dei dati possono anche essere incorporati nella documentazione combinando Doxygen con graphviz.
4. GIT (sistemi di controllo della versione)
È difficile credere che qualcuno sviluppi software di qualsiasi tipo senza una sorta di sistema di controllo della versione in questi giorni, ma nel caso in cui lo fai, è una pessima idea che potrebbe portare a errori che ti costeranno tempo e denaro. Git si distingue tra tutti gli strumenti di controllo della versione disponibili per diversi motivi. È open source, veloce, efficiente e principalmente locale. Oltre a Git, vale la pena menzionare anche strumenti come sovversion.
Test del firmware incorporato
Il test è una parte importante del processo di sviluppo di qualsiasi cosa. Le aziende perdono migliaia di dollari quando i dispositivi vengono richiamati a causa di errori del firmware, quindi è una parte dello sviluppo che dovrebbe essere presa molto sul serio. È spesso fatto, mano nella mano, con la codifica e il primo set di strumenti per il test del codice, sono probabilmente i debugger all'interno dell'IDE o dell'SDK utilizzati per il progetto. Il test è disponibile in diverse forme e viene eseguito in fasi diverse, in quanto tale, coinvolge diversi tipi di strumenti. Gli strumenti di test dallo sviluppo del firmware vanno dalla convalida del progetto all'analisi statica e agli strumenti di test di runtime. Di seguito sono riportati alcuni strumenti che trovo davvero utili.
1. Crystal REV
Crystal revs è uno strumento per studiare il codice. Può essere utilizzato per generare un diagramma di flusso dal codice C / C ++ che lo rende un ottimo strumento per rivedere il proprio codice e vedere se il progetto preliminare è quello che è stato implementato. Con Crystal Rev, sarai in grado di vedere rapidamente la differenza tra il design e l'implementazione. La sua capacità di generare diagrammi di flusso, dati e flusso di chiamate da codici lo rende anche uno strumento utile per analizzare il codice legacy.
2. PC- Lint
PC-lint è uno dei più vecchi strumenti di test del firmware in circolazione. È in grado di analizzare il software per identificare bug, vulnerabilità di sicurezza e garantire che il codice sia stato scritto in linea con gli standard del settore. Strumenti simili includono polyspace e LRDA, Eggplant e Tessy tra gli altri.
3. Wireshark
Ciò è utile quando si creano dispositivi di rete. È essenzialmente uno sniffer di pacchetti e potrebbe aiutare a visualizzare i dati che il tuo dispositivo sta trasmettendo. Questo potrebbe aiutare a proteggere il dispositivo.
4. Driver della porta seriale virtuale
VSPD di eltima software è uno strumento che ho recentemente introdotto anche da un amico. È molto utile quando si lavora su driver di dispositivo e altri sviluppi relativi alle porte com. La porta COM seriale virtuale ti dà la possibilità di testare il comportamento delle porte COM senza il dispositivo di destinazione. È possibile creare un numero illimitato di porte in grado di emulare tutte le impostazioni delle porte com reali. Il software include anche funzionalità come la suddivisione della porta seriale, l'unione delle porte COM, l'utilizzo di connessioni della porta COM in bundle tra le altre funzioni interessanti.
Questo è tutto per questo articolo, grazie per aver dedicato del tempo per leggere. Sebbene sia impossibile probabilmente elencare tutti gli strumenti disponibili, spero che tu trovi utili alcuni di questi strumenti.