'Incorporato' è un po 'un termine caricato ..
Per alcuni aspetti, qualsiasi sistema dedicato all'esecuzione di una singola applicazione potrebbe essere chiamato un sistema incorporato, purché ci sia dell'hardware da controllare. Probabilmente è possibile chiamare un PPC604 a 400 MHz con 2 GB di RAM che esegue un'applicazione Java sopra Linux un sistema incorporato, se succede che sta controllando un processo attraverso moduli I / O locali. D'altra parte, un arduino che esegue solo una sorta di applicazione di rete minima non sarebbe molto simile a un sistema incorporato. Ma probabilmente "incorporato" fa pensare alla maggior parte dei controller basati su flash con solo poche centinaia di byte di RAM, nessun sistema operativo di cui parlare e una pletora di periferiche su chip.
Detto questo, probabilmente i due maggiori ostacoli ai programmatori non embedded di solito affrontano l'apprendimento dei sistemi embedded: i registri I / O e gli interrupt.
Gli interrupt possono in realtà essere il più semplice dei due concetti da gestire per i programmatori non incorporati, poiché i problemi principali con questi, la concorrenza e la programmazione guidata dagli eventi, sono spesso riscontrati nelle applicazioni tradizionali. Ciò che rende gli interrupt una sofferenza è rendersi conto dell'estrema sensibilità di un sistema alla qualità della sua gestione degli interrupt, e la complessità di trattare con l'hardware per cancellare la condizione di interrupt e impostare per il successivo. Con una GUI, un deadlock uccide solo l'applicazione. Con un gestore di interrupt, un deadlock provoca il blocco dell'intero sistema.
I dispositivi I / O sembrano essere l'area che causa la maggior difficoltà. Per chi non lo sapesse, può essere una sorpresa scoprire che leggere questo registro qui ha un effetto su quel registro lì . Scrivere 1 per cancellare i bit. Bit di stato che si cancellano quando si legge un registro dati, ecc. Esistono così tante possibilità con l'hardware I / O che non esiste una regola generale per gestirlo, tranne che per imparare a trovare e interpretare le schede tecniche dei dispositivi. Scrivere un driver di dispositivo per una porta seriale ti insegnerà molto sulla programmazione I / O di basso livello.
Non c'è davvero alcun sostituto per imparare queste cose se non di rimboccarsi le maniche e programmare un linguaggio C e / o di assemblaggio diretto sul metallo nudo. Anche il summenzionato sistema embedded basato su Java alla fine ha bisogno di un driver di dispositivo per l'I / O, e questo significa in definitiva avere a che fare con alcuni C. L'esperienza è il miglior insegnante. Scegli un microcontrollore, che si tratti di MSP430, TMS320, AVR, ARM, PIC, 68HC11, qualunque cosa, trova un kit di valutazione e costruisci alcuni sistemi.