Ahora estoy trabajando con microcontroladores de 8bit, anteriormente he jugado un poco con los PIC de Microchip, no obstante, ahora ten铆a en mente poder hacer todo el desarrollo con software libre. As铆 que he elegido los AVR de Atmel. Tambien he tocado un poco Arduino que est谩 basado en esta familia de micros, no obstante ahora profundizo m谩s en la arquitectura de los AVR y depuro el c贸digo con la interfaz JTAG.
Herramientas necesarias:
- Programador(hardware) AVR Dragon.
- Librerias C, AVR Libc.
- Compilador Gcc-avr.
- Debugger Gdb-avr.
- Front end para el debugger DDD.
- Avarice.
Compilando con GCC-avr:
Para compilar he usado esta secuencia de comandos.
avr-gcc -g -OS -mmcu=atmega16 -c test.c;avr-gcc -g -mmcu=atmega16 -o test.elf test.o;avr-objcopy -j .text -j .data -O ihex test.elf test.hex
Aqu铆 a grandes rasgos, se genera un fichero objeto, luego un archivo binario GNU ejecutable y por 煤ltimo el .hex que volcaremos en la memor铆a del micro. M谩s informaci贸n en este libro.
Depurando con Avarice + GDB-AVR/DDD:
Los elemetos que intervienen y como estan conectados entre si:
Atmega16 <—JTAG–> AVR Dragon <—USB—> Avarice <—TCP/IP—> GDB-avr
El programador AVR Dragon viene de casa sin cables ni manuales, as铆 que es conveniente echarle una ojeada a la p谩gina del fabricante, para conocer el conexionado, y poder hacerse el cable o insertar los z贸calos.
Para poner en marcha Avarice:
avarice -g -j usb --erase --program --file test.hex :4242
que borra y programa el micro y espera una conexi贸n en el puerto 4242.
Para conectar GDB con Avarice y comenzar a depurar, hay que indicar que fichero tiene que tomar y por que puerto tiene que establecer la conexi贸n, esto se puede hacer creando un fichero de configuraci贸n en el directorio donde ejecutamos gdb:
Por ejemplo el fichero gdb.conf con este contenido:
file test.elf target remote localhost:4242
luego ejecutamos gdb-avr:
avr-gdb -x gdb.conf
Si preferimos usar un entorno gr谩fico, podemos usar DDD, con el siguiente comando.
ddd --debugger "avr-gdb -x gdb.conf"
Alguna cuesti贸n m谩s:
El par谩metro -OS que se ha usado a la hora de compilar con GCC, indica a este que optimice el c贸digo para ahorrar recursos, a la hora de depurar puede que no se usen algunas varibles que a priori usamos en nuestro programa. Quitando ese par谩metro se puede solucionar este problema.
Esta cuesti贸n y muchas m谩s estan en el FAQ de avr-libc, imprecindible!!
Y nada m谩s espero que este minihowto le sirva a alguien :-)
Referencias:

comentarios recientes