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 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 integrato, le risorse sono spesso molto limitate. In un progetto su cui ho lavorato (processori della serie PIC 17X) l'hardware aveva 2 KB di memoria di programma, 8 livelli di stack (in-hardware) e 192 byte (< 0.2kB) di RAM. Diversi pin I / O avevano capacità diverse e l'hardware è stato configurato come necessario scrivendo su registri hardware. Il debug coinvolge un oscilloscopio e un analizzatore logico.
In embedded, le astrazioni spesso intralciano e gestiscono (e costano) risorse che non si hanno. Per esempio. la maggior parte dei sistemi incorporati non ha un file system. I forni a microonde sono sistemi integrati. Controller per motori auto. Alcuni spazzolini da denti elettrici. Alcune cuffie con cancellazione del rumore.
Un fattore molto importante per me nello sviluppo di sistemi embedded è conoscere e controllare ciò che il codice traduce in termini di istruzioni, risorse, memoria e tempo di esecuzione. Spesso l'esatta sequenza di istruzioni controlla ad es. tempistica per forme d'onda dell'interfaccia hardware.
Le astrazioni e la "magia" dietro le quinte (ad esempio un garbage collector) sono ottime per le app desktop. I raccoglitori di immondizie ti fanno risparmiare un sacco di tempo a caccia di perdite di memoria, quando la memoria è / può essere allocata dinamicamente.
Tuttavia, nel mondo embedded in tempo reale abbiamo bisogno di conoscere e controllare quanto tempo le cose richiedono, a volte anche fino a nanosecondi, e non è possibile lanciare un altro paio di megabyte di RAM o una CPU più veloce a un problema. Un semplice esempio: quando si esegue il dimming software dei LED controllando il duty cycle (la CPU aveva solo il controllo on / off dei LED), NON è OK per il processore che si spegne e fa ad es. garbage collection per 100ms perché il display lampeggerà visibilmente o uscirà.
Un esempio più ipotetico è un controller del motore che accende direttamente le candele. Se quella CPU si disattiva e fa la garbage collection per 50 ms, il motore si fermerebbe per un momento o sparerebbe alla posizione sbagliata dell'albero motore, potenzialmente bloccando il motore (durante il passaggio?) O danneggiandolo meccanicamente. Potresti far uccidere qualcuno.