'Incrustado' es un término un poco cargado ...
En algunos aspectos, cualquier sistema dedicado a ejecutar una sola aplicación podría llamarse un sistema integrado, siempre y cuando haya algo de hardware que controlar. Podría decirse que puede llamar a un PPC604 de 400MHz con 2GB de RAM que ejecuta una aplicación Java encima de Linux como un sistema integrado, si es que controla un proceso a través de módulos de E / S locales. Por otro lado, un arduino que solo ejecuta algún tipo de aplicación de red mínima no sería un gran sistema integrado. Pero probablemente 'integrado' hace que la mayoría de las personas piense en controladores basados en flash con solo unos pocos cientos de bytes de RAM, sin sistema operativo para hablar y una gran cantidad de periféricos en chip.
Dicho esto, probablemente los dos mayores obstáculos que los programadores no integrados suelen enfrentar los sistemas integrados de aprendizaje son los registros e interrupciones de E / S.
Las interrupciones en realidad pueden ser el más fácil de los dos conceptos para los programadores no integrados, ya que los problemas principales con estos, la concurrencia y la programación basada en eventos, a menudo se encuentran en las aplicaciones convencionales. Lo que hace que las interrupciones sean dolorosas es darse cuenta de la extrema sensibilidad de un sistema a la calidad de su manejo de interrupciones, y las complejidades de lidiar con el hardware para eliminar la condición de interrupción y configurar el siguiente. Con una GUI, un punto muerto mata solo la aplicación. Con un controlador de interrupciones, un punto muerto hace que todo el sistema se bloquee.
Los dispositivos de E / S parecen ser el área que causa la mayor dificultad. Para los no iniciados, puede ser una sorpresa descubrir que leer este registro aquí tiene un efecto en ese registro allí . Escribir 1 para borrar bits. Bits de estado que se borran cuando se lee un registro de datos, etc. Hay tantas posibilidades con el hardware de E / S que no existe una regla general para tratarlo, excepto aprender a encontrar e interpretar las hojas de datos del dispositivo. Escribir un controlador de dispositivo para un puerto serie le enseñará mucho sobre la programación de E / S de bajo nivel.
Realmente no hay sustituto para aprender estas cosas que remangarse las mangas y programar algo de lenguaje directo C y / o ensamblador en el metal desnudo. Incluso el sistema integrado basado en Java mencionado anteriormente eventualmente necesita un controlador de dispositivo para la E / S, y esto significa en última instancia tratar con algo de C. La experiencia es el mejor maestro. Elija un microcontrolador, ya sea MSP430, TMS320, AVR, ARM, PIC, 68HC11, lo que sea, encuentre un kit de evaluación y cree algunos sistemas.