Programación de los microcontroladores: Compiladores.
Para programar los microcontroladores, hemos de valernos de un software específico para esta tarea, que se suele conocer como "Compilador".
En el caso que nos ocupa, un chip de Atmel, existen diferentes herramientas disponibles. Voy a nombrarlas y a dar una opinión muy personal de sus ventajas o inconvenientes.
Voy a referirme todo el tiempo a sus características de compatibilidad y uso con la placa Arduino Uno, ya que es la que empleo para cargar el software en el chip ATMega328P.
El proyecto de hardware libre denominado Arduino, pone a disposición de todos nosotros un compilador sencillo pero muy bien organizado y muy práctico. Además se ofrecen innumerables librerías de funciones hechas, así como una comunidad de usuarios con foros muy activos, en los que consultar las dudas, etc.
Esto hace que se programe en C, en una capa por encima del hardware, que facilita mucho el trabajo. Claro que si queremos cosas muy específicas, no habrá más remedio que bajar a la capa inferior, con los registros, interrupciones, etc. El compilador te permitirá hacerlo, aunque no ofrece herramientas específicas de depuración.
Otra ventaja es que puedes pinchar el chip de Atmel ATMega328P en la placa Arduino Uno, y cargar los programas con facilidad, y todo ello sin necesidad de configurar nada manualmente.
Es una opción equilibrada para quienes quieran desarrollar código avanzado para estos chips, sin que ello nos obligue a interaccionar con un entorno excesivamente complicado para muchos de los proyectos que se desarrollan en la plataforma Arduino. El compilador está basado en el software de Microsoft Visual C++, que es una herramienta magnífica. Este compilador AVR es también una herramienta muy estable y madura.
En la página 21 del documento indicado a continuación, se explica -en español- cómo adaptar AVR 4 a la programación del chip Atmel ATMega328P aprovechando las librerías del entorno Arduino, y los que es más importante, pudiendo cargar directamente los programas en la placa Arduino Uno:
http://download.lpmagazine.org/es/2010/Linux_06_2010_ES.pdf
Como inconveniente, se puede decir que se está quedando obsoleto, por el simple paso de los años.
Basado en el entorno Visual Studio 2010 de Microsoft, es una herramienta muy potente, y con un entorno visual claramente más avanzado que su versión anterior AVR 4.
Sin embargo, es bastante difícil de poner en marcha con el entorno Arduino y la placa Arduino Uno. A partir del artículo indicado en el apartado anterior, y de este otro:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=110776
es posible lograrlo, con un poco de tenacidad.....
En esta versión de Atmel Studio, hay disponible una extensión llamada "Arduino Ide for Atmel Studio 6.1" que integra menús específicos para desarrollar proyectos Arduino.
Gracias a esta opción, es posible disfrutar de las ventajas de un editor de código de características profesionales, de forma gratuita. De todos los entornos de desarollo que conozco, el mejor, sin duda, es el Visual Studio de Microsoft, que a su vez es la base del compilador de Atmel.
Esta imagen es para mostrar que con un poco de trabajo por nuestra parte, podemos llegar a crear un botón en el menú, con el que la carga del software en el chip de la placa Arduino, se haga de forma totalmente automatizada:
En principio, todo aquello que esté desarrollado en lenguaje C habría de ser compilado en cualquiera de los tres compiladores, sin obtener diferencias. Sin embargo, no siempre es así, ya que, por ejemplo, el compilador de Arduino es mucho más tolerante ante pequeños incumplimientos de las reglas que impone el lenguje C, lo que provoca que un código fuente que compila perfectamente en el entorno Arduino, pueda generar un gran número de errores al compilarlo en un entorno AVR.
Por ej. en el entorno Arduino, una variable global, definida en un determinado fichero de C, puede ser empleada sin problemas en otro fichero de C, del mismo proyecto.
Sin embargo, esto provoca un error en un compilador AVR, ya que al ser más estrictos, se exige que esa variable sea declarada como "extern" en el otro fichero donde la queremos emplear.
A pesar de haber empleado ampliamente las herramientas Visual C++ y Visual Studio, el entorno Atmel Studio, en sus versiones 5 y6, me ha resultado bastante complicado de poner en funcionamiento con mi placa Arduino Uno. Esto no ha ocurrido con el compilador AVR4, que es más simple.
El Plug-in "Arduino Ide for Atmel Studio 6.1" facilita trabajar desde Atmel Studio sobre placas Arduino, aunque creo que los menús quedan un poco escondidos, y se podría mejorar, porque no es muy intuitivo.
Quiero resaltar aquí que las capacidades de depuración que ofrecen los entornos AVR se vuelven prácticamente inútiles cuando tenemos que depurar un software que interactúa con una placa como la nuestra, que es la que le va dando los valores de entrada, etc.
Por ello, la característica que más valoro de los entornos AVR es su editor de código, que te ayuda a cosas como buscar dónde aparece una determinada variable, o a ver dónde está definida, etc. también lo bien que identifica con colores cada tipo de dato, etc.
El compilador Arduino me parece incomparablemente brillante en su sencillez. Ya hemos comentado algunas de sus limitaciones, pero si no vamos a hacer cosas muy complicadas, es una opción muy buena.
En este momento, el código fuente de un chip lo tengo compilado en entorno Arduino, y el del otro chip, en los entornos AVR.