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.
Compilador Ardiuno.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 a mano.
Compilador AVR 4.Es la opción más equilibrada para quienes quieran desarrollar código avanzado para estos chips. 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 Compilador AVR 5.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=110776es posible lograrlo, con un poco de tenacidad.....

En mi opinión, al compilador AVR 5 le faltan todavía algunos "service packs" para ser una versión realmente definitiva.
Integración de placa Arduino en compiladores AVR.Esta imagen es para mostrar que con un poco de trabajo, 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:
Compatibilidad entre progarmas desarrollados en los diferentes entornos.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.
Mis reflexiones sobre este tema.A pesar de haber empleado ampliamente las herramientas Visual C++ y Visual Studio durante una fase ya pasada de mi vida profesional, el entorno
AVR5 me ha resultado bastante complicado de poner en funcionamiento con mi placa Arduino Uno. Esto no ha ocurrido con el compilador
AVR4, que está mucho más maduro.
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 identific