El software incorporado es muy diferente.
En una aplicación de escritorio, las abstracciones y las bibliotecas le ahorran mucho tiempo de desarrollo. Tiene el lujo de arrojar otro par de megabytes o gigabytes de RAM o algunos núcleos de CPU de 2 + GHz de 64 bits en un problema, y otra persona (usuarios) está pagando por ese hardware. Es posible que no sepa en qué sistemas se ejecutará la aplicación.
En un proyecto integrado, los recursos suelen ser muy limitados. En un proyecto en el que trabajé (procesadores de la serie PIC 17X) el hardware tenía 2Kwords de memoria de programa, 8 niveles de pila (en hardware) y 192 bytes (<0.2kB) de RAM. Los diferentes pines de E / S tenían diferentes capacidades y usted configuró el hardware según sea necesario escribiendo en los registros de hardware. La depuración implica un osciloscopio y un analizador lógico.
En las incrustaciones, las abstracciones a menudo se interponen en el camino y gestionarían (y costarían) los recursos que no tiene. Por ejemplo, la mayoría de los sistemas integrados no tienen sistema de archivos. Los hornos de microondas son sistemas integrados. Controladores de motor de automóvil. Algunos cepillos de dientes eléctricos. Algunos auriculares con cancelación de ruido.
Un factor muy importante para mí en el desarrollo de sistemas embebidos es saber y controlar a qué se traduce el código en términos de instrucciones, recursos, memoria y tiempo de ejecución. A menudo, la secuencia exacta de instrucciones controla, por ejemplo, el tiempo para las formas de onda de la interfaz de hardware.
Las abstracciones y la "magia" detrás de escena (por ejemplo, un recolector de basura) es ideal para aplicaciones de escritorio. Los recolectores de basura le ahorran MUCHO tiempo persiguiendo pérdidas de memoria, cuando la memoria se puede / puede asignar dinámicamente.
Sin embargo, en el mundo embebido en tiempo real, necesitamos saber y controlar cuánto tardan las cosas, a veces en nanosegundos, y no podemos arrojar otro par de megas de RAM o una CPU más rápida a un problema. Un ejemplo simple: cuando se atenúa el software de los LED mediante el control del ciclo de trabajo (la CPU solo tenía el control de encendido / apagado de los LED), NO está bien que el procesador se apague y haga, por ejemplo, recolección de basura durante 100 ms porque la pantalla se vería visiblemente parpadea o se apaga.
Un ejemplo más hipotético es un controlador de motor que dispara directamente bujías. Si esa CPU se apaga y recolecta basura durante 50 ms, el motor se apagaría por un momento o se dispararía en la posición incorrecta del cigüeñal, lo que podría detener el motor (¿al pasar?) O dañarlo mecánicamente. Podrías matar a alguien.