Qué es la programación bare metal en los sistemas embebidos?

La programación bare metal es la escritura de firmware que se ejecuta directamente en el hardware sin tener ninguna abstracción subyacente como los sistemas operativos.

Generalmente los programas bare metal tendrán un cargador de arranque mínimo para iniciar el procesador, el reloj y la memoria y saltar al programa principal.

En los sistemas embebidos más antiguos, la programación bare metal era bastante común ya que los microcontroladores no tenían ancho de banda para ejecutar sistemas operativos voluminosos. Poco a poco, a medida que la tecnología maduraba y los procesadores eran mucho más potentes, surgió el uso de sistemas operativos. Pero hasta la fecha hay un montón de sistemas embebidos de pequeña escala que todavía ejecutan programas bare metal.

Generalmente la programación bare metal se utiliza en los siguientes escenarios.

  1. Cuando se diseña un sistema de gama baja utilizando un microcontrolador de gama baja y se ejecuta el código en el bucle while 1. Usted don't tiene ancho de banda de la CPU y la memoria más alta para ejecutar y cargar los sistemas operativos.
  2. Cuando el tiempo de arranque de su sistema es estricto y usted puede't lograr utilizando sistema basado en OS. El sistema basado en el sistema operativo tarda segundos en arrancar y, por lo tanto, no es factible cuando se desea un tiempo de arranque determinista.
  3. Cuando se desea un control directo de cada pieza de hardware y registro para cumplir con los requisitos de tiempo.
  4. Cuando se desea eliminar la sobrecarga del sistema operativo
  5. Cuando se implementan bucles de control en los que la adquisición de datos del ADC y su procesamiento para activar el PWM en la retroalimentación requiere un rendimiento en tiempo real.
  6. Quieres poseer y controlar cada pieza de código que escribes y no quieres usar módulos externos debido a problemas de licencias o a tener que pagar royalties a terceros, etc.
  7. Estos son los casos más destacados en los que la gente opta por la programación bare metal.

Pero también hay algunas desventajas.

  1. No tienes el lujo de tener un sistema operativo que te abstrae del hardware subyacente, no tienes que preocuparte de escribir controladores de dispositivos, programador, gestión de memoria, gestión de hilos, etc. Todo lo que tiene que hacer es centrarse en el desarrollo de su aplicación.
  2. Sólo tiene que llamar a la API y no tiene que preocuparse por la estratificación de su código,
  3. No tiene que preocuparse por arreglar los problemas a nivel del controlador o del kernel, ya que esos módulos ya están en buena forma.
  4. Tiene un montón de herramientas, código abierto para referirse a la construcción de su código.
  5. Puede construir componentes más modulares y reutilizables.
  6. Tiene herramientas para depurar su código. No tienes que colgarte de JTAG para el análisis de volcado de memoria.
  7. Puedes construir sistemas embebidos mucho más complejos con interfaz de usuario y servidor web, etc.

Así que, tienes que decidir en base a tus necesidades.