El software integrado es muy diferente.
En una aplicación de escritorio, las abstracciones y las bibliotecas le ahorran mucho tiempo de desarrollo. Puede darse el lujo de lanzar otro par de megabytes o gigabytes de RAM o algunos núcleos de CPU de 2 + GHz de 64 bits a 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 son a menudo 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 capacidades diferentes y usted configuró el hardware según lo necesario escribiendo en los registros de hardware. La depuración implica un osciloscopio y un analizador lógico.
En las incorporaciones, las abstracciones a menudo se interponen y administrarían (y costarían) los recursos que no tiene. P.ej. La mayoría de los sistemas integrados no tienen sistema de archivos. Los hornos de microondas son sistemas embebidos. Controladores de motor de coche. Algunos cepillos de dientes eléctricos. Algunos auriculares con cancelación de ruido.
Un factor muy importante para mí al desarrollar sistemas integrados 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, 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) son excelentes para las aplicaciones de escritorio. Los recolectores de basura le ahorran MUCHO tiempo en la búsqueda de pérdidas de memoria, cuando la memoria se puede asignar dinámicamente.
Sin embargo, en el mundo integrado en tiempo real, necesitamos saber y controlar cuánto tardan las cosas, a veces en nanosegundos, y no podemos lanzar otro par de megas de RAM o una CPU más rápida en un problema. Un ejemplo simple: cuando se realiza la atenuación del software de los LED controlando el 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 de 100 ms porque la pantalla destellaría visiblemente o se apagaría.
Un ejemplo más hipotético es un controlador de motor que dispara directamente las bujías. Si la CPU se apaga y realiza la recolección de basura durante 50 ms, el motor se apagará por un momento o disparará 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 hacer que maten a alguien.