martes, 2 de noviembre de 2010

Desarrollo de firmware sobre lenguaje de alto nivel

Un microprocesador es un elemento que se encarga de interpretar determinadas instrucciones y de dar las órdenes para ejecutar dichas instrucciones en conjunto con otros elementos con los cuales debe funcionar, como memorias, buses, puertos I/O, etc. Por su parte, los microcontroladores son sistemas más complejos, los cuales contienen un microprocesador interno y todos los elementos necesarios para que pueda trabajar de forma independiente. Así, un microcontrolador contiene puertos I/O, un reloj o base de tiempo, memoria de datos, memoria del programa, una ALU (Unidad Lógica y Aritmética) que permite realizar procesos lógicos y aritméticos, entre otras características adicionales.

Los microprocesadores trabajan con un conjunto de instrucciones, las cuales consisten en códigos binarios que le dicen al microprocesador la función que debe realizar. Diferentes microprocesadores tienen diferentes conjuntos de instrucciones, por lo tanto, para trabajar desde el nivel de instrucciones, es necesario tener un profundo conocimiento de todo el conjunto de instrucciones del microprocesador, con el fin de diseñar programas que aprovechen todas las capacidades de éste.

El lenguaje ensamblador asigna nombres mnemónicos a los códigos de las instrucciones del microprocesador; así, para realizar una operación, no es necesario aprenderse el código correspondiente a dicha operación, sino que basta con usar el nombre del comando, el cual se asigna de tal forma que recuerde la operación que hace. Por ejemplo, la instrucción MOV le indica al microprocesador que debe mover ciertos datos de un lugar a otro, dependiendo de los parámetros. Cada microprocesador tiene un conjunto específico de instrucciones, las cuales le brinda el fabricante al desarrollador junto con toda la información del microprocesador que le pueda ser útil en el momento de desarrollar aplicaciones.

Realizando la transición de lenguaje de programación ensamblador a un lenguaje de mayor nivel, como lo es C, encontramos que C es un lenguaje multipropósito que puede ser implementado sobre cualquier hardware, a diferencia del lenguaje ensamblador, el cual varía dependiendo del microprocesador que se esté usando. Adicionalmente, el lenguaje C es más sencillo e intuitivo, y tiene herramientas que pueden simplificar notablemente la tarea del desarrollador, como la implementación sencilla de operaciones matemáticas, inclusión de librerías estándar que contienen las funciones más usadas, entre otras. El archivo en lenguaje C se compila usando un compilador específico para el procesador sobre el que se realizará la implementación. La salida del compilador es código ensamblador, el cual se ensambla, generando un archivo de código objeto que posteriormente se enlaza con librerías del compilador a través del linker. Luego del enlace, se obtiene finalmente código de máquina que puede ser cargado directamente a la memoria de programa.

En la siguiente figura se muestra el proceso de compilación de un programa en C:

Estructura de compilación de un programa de alto nivel

La principal ventaja de trabajar en lenguaje C con respecto a ensamblador es que requiere de un tiempo de desarrollo menor, y también un tamaño del programa menor (escrito por el usuario), pues el lenguaje C incluye operadores y funciones comúnmente utilizadas, para las cuales la implementación en lenguaje ensamblador requiere de mayor tiempo de desarrollo. Como ejemplo sencillo para demostrar esta tesis, tómese el manejo de variables de punto flotante. Mientras que en lenguaje C basta con declarar la variable como flotante y utilizar los operadores y funciones aritméticas (el compilador se encarga de llevar la variable flotante a enteros que puede manejar el hardware del microcontrolador); el lenguaje ensamblador no admite el manejo de este tipo de variables y es necesario realizar más procedimientos para el manejo y operación aritmética de las mismas.

A continuación se muestra una tabla con las principales ventajas y desventajas de trabajar en lenguaje de alto nivel para microcontroladores:


No hay comentarios:

Publicar un comentario