Il software incorporato è molto diverso.
Su un'app desktop, le astrazioni e le librerie ti fanno risparmiare molto tempo di sviluppo. Hai il lusso di lanciare un altro paio di megabyte o gigabyte di RAM o alcuni core della CPU a 64 bit a 2 + GHz a un problema e qualcun altro (utenti) sta pagando per quell'hardware. Potresti non sapere su quali sistemi verrà eseguita l'app.
In un progetto incorporato, le risorse sono spesso molto limitate. In un progetto su cui ho lavorato (processori serie PIC 17X) l'hardware aveva 2 parole chiave di memoria del programma, 8 livelli di stack (nell'hardware) e 192 byte (<0,2 KB) di RAM. Pin I / O diversi avevano capacità diverse e l'hardware è stato configurato secondo necessità scrivendo ai registri hardware. Il debug comporta un oscilloscopio e un analizzatore di logica.
In embedded, le astrazioni spesso si intromettono e gestiscono (e costano) le risorse che non hai. Ad esempio, la maggior parte dei sistemi embedded non ha file system. I forni a microonde sono sistemi integrati. Controller per motori auto. Alcuni spazzolini elettrici. Alcune cuffie con cancellazione del rumore.
Un fattore molto importante per me nello sviluppo di sistemi embedded è conoscere e controllare ciò a cui il codice si traduce in termini di istruzioni, risorse, memoria e tempi di esecuzione. Spesso l'esatta sequenza di comandi di istruzioni, ad es. Tempistica per le forme d'onda dell'interfaccia hardware.
L'astrazione e la "magia" dietro le quinte (ad es. Un garbage collector) sono eccezionali per le app desktop. I garbage collector ti fanno risparmiare MOLTO tempo a caccia di perdite di memoria, quando la memoria è / può essere allocata in modo dinamico.
Tuttavia, nel mondo embedded in tempo reale, dobbiamo sapere e controllare quanto tempo impiegano le cose, a volte fino a nanosecondi, e non possiamo lanciare un altro paio di megabyte di RAM o una CPU più veloce a un problema. Un semplice esempio: quando si esegue l'oscuramento software dei LED controllando il ciclo di lavoro (la CPU aveva solo il controllo on / off dei LED), NON è GIUSTO che il processore si spenga e esegua ad esempio la garbage collection per 100 ms perché il display sarebbe visibilmente lampeggia o si spegne.
Un esempio più ipotetico è un controller del motore che accende direttamente le candele. Se quella CPU si spegne e esegue la raccolta dei rifiuti per 50 ms, il motore si spegne per un momento o si spegne nella posizione errata dell'albero motore, potenzialmente arrestando il motore (mentre passa?) O danneggiandolo meccanicamente. Potresti far uccidere qualcuno.