abril 25, 2024

BitCuco

¡Hola Mundo!

C embebido – Introducción al nivel Medio

c embebido

El lenguaje de programación C embebido es una variante de C, desarrollado originalmente por Dennis Ritchie de los sistemas Unix. A menudo se le llama lenguaje de programación para nivel medio / alto, ya que combina los elementos de los lenguajes de alto nivel con la funcionalidad del lenguaje ensamblador.

Características de C embebido

Una de las mejores características de C embebido es que no está vinculado a ningún hardware o sistema en particular. Esto facilita a un usuario escribir programas que se ejecutarán sin modificación en casi todas las máquinas.

Los lenguajes de programación más comunes para sistemas embebidos puros son C y el lenguaje ensamblador. El lenguaje C utilizado para sistemas embebidos es ligeramente diferente en comparación con el lenguaje C utilizado para fines generales (bajo una plataforma de PC).

Por lo general, se espera que los programas para sistemas embebidos supervisen y controlen dispositivos externos y usen la arquitectura interna del procesador, como el manejo de interrupciones, temporizadores, comunicaciones en serie y otras funciones disponibles. Algunas de éstas funciones que ofrece C embebido son:

  • Eficiencia, los programas deben ser lo más cortos posible y la memoria debe usarse de manera eficiente.
  • Velocidad, los programas deben ejecutarse lo más rápido posible.
  • Facilidad de implementación, facilidad de mantenimiento y legibilidad.

Compiladores para C embebido

Los compiladores de C para sistemas embebidos deben proporcionar formas de examinar y utilizar diversas características de la arquitectura interna y externa del microcontrolador.

Tanto para interrumpir las rutinas de servicio, leer y escribir en memorias internas y externas, manipular bits, implementar temporizadores / contadores y examinar registros internos.

La mayoría de los compiladores para C embebido (así como los compiladores de C normales) se han desarrollado para admitir el ANSI [American National Standard for Information], pero en comparación con el C ordinario, pueden diferir en términos del resultado de algunas declaraciones.

Obviamente, la tendencia es migrar de los desarrolladores de sistemas embebidos del lenguaje ensamblador a C.

La opción de usar el lenguaje C para aplicaciones basadas en plataformas de computación embebida es una opción que puede generar riesgos de fallos.

Los sistemas embebidos en la mayoría de los casos se basan en dispositivos programables tales como microcontroladores, procesadores de señal digital, procesadores gráficos, etc.

Hasta hace unos años, la programación más eficiente de estos procesadores era solo una realizada con lenguaje ensamblador, la única con una correspondencia directa entre las instrucciones simbólicas y las instrucciones de la máquina. De esta manera, el lenguaje ensamblador asegura que el código sea mínimo, tanto con respecto a la ocupación de la memoria como al tiempo de ejecución. La reducción de código y el tiempo mínimo de ejecución son típicos de los requisitos de los sistemas integrados que el desarrollador debe respetar.

Aún así, nos vemos obligados a desarrollar la aplicación en lenguaje ensamblador cuando tratamos las partes críticas, tales como los controladores de dispositivos; funciones que gobiernan directamente el hardware del sistema; los procedimientos para gestionar las interrupciones, etc.

De hecho, el desarrollador de sistemas embebidos no confía fácilmente en un lenguaje de alto nivel, ya que no tiene el conocimiento completo de la correspondencia de lo que escribe en un nivel simbólico y cómo el compilador realmente produce al nivel de las instrucciones a nivel máquina.

Del Lenguaje Ensamblador a C

El lenguaje C en el desarrollo de sistemas comerciales se ha utilizado desde la introducción de la primera computadora personal. Durante décadas, los programadores de sistemas embebidos han ignorado el lenguaje C debido a diversos problemas de compilación, a pesar de su difusión.

De vez en cuando, algunos productores de compiladores de C lanzaron una versión para microcontroladores o DSP, pero la calidad del código producido era demasiado baja para inducir a los desarrolladores a descartar la posibilidad de usar el lenguaje C en el desarrollo de sistemas integrados.

Una de las características comunes que se requieren es que el compilador de C pueda manejar para los sistemas embebidos es superar la precisión limitada del número entero (aritmético) y de la ALU (Unidad aritmético-lógica). El valor entero, tanto para los microcontroladores de 8 y 16 bits, requiere mucha atención en la manipulación de los números reales y su arquitectura.

Es muy abstracto para los compiladores de C calcular la arquitectura sin un modelo de optimización de compilación. Algunos compiladores de C hacen extensiones que permiten soportar específicamente procesadores aritméticos integrados de punto fijo y en el uso de variables tales como el registro de hardware.

Sin embargo, existe una fuerte motivación para pasar del lenguaje ensamblador al lenguaje C para sistemas embebidos. Las principales motivaciones son la portabilidad y la legibilidad.

El desarrollo rápido de aplicaciones con C garantiza más fácilmente los requisitos de tiempos de desarrollo. Estos problemas se vuelven más significativos si el código necesita ser transferido de un desarrollador a otro, y si debe mantenerse durante mucho tiempo.

Obviamente, solo se puede cumplir si el código ejecutable es eficiente y compacto, lo que solo puede garantizarse mediante un compilador optimizado.

En otra publicación daremos algunos ejemplos de cómo elaborar código embebido con lenguaje C.