Compilacion lenguaje c para micro avr
1.
Comenzando
Las herramientas de desarrollo de aplicaciones provienen de GNU y funcionan en Linux. Para arrancar este
sistema operativo en los ordenadores del laboratorio hay que esperar que arranquen de la red (pueden tardar unos 20 seg.) y luego, en el menú que se muestra seleccionar “A) Linux”. Tras el arranque deLinux hay que entrar en la cuenta de prácticas: Login: ********** Password: ******* Dentro de la cuenta de prácticas cada grupo tendrá su propio subdirectorio. Este es un listado de las herramientas de desarrollo y otras aplicaciones útiles: avr-gcc: compilador de C para AVR. avr-as: ensamblador para AVR. avr-ld: linker. avr-objcopy: conversor de formatos de ficheros ejecutables. avr-objdump:desensamblador para AVR. make: gestor de proyectos. avrprg: programador para el prototipo del microcontrolador (defecto: COM1) terminal: terminal para el puerto serie (defecto: COM2, 9600 baudios) nedit: editor de texto para programas en C.
1
2.
Programa de ejemplo
En el directorio “ejemplo” hay un conjunto de ficheros que mustran de forma básica como generar imágenes
de memoria para elmicrocontrolador AVR a partir de código fuente en C y en ensamblador. Para compilar el programa de ejemplo en primer lugar copiaremos los ficheros a otro directorio y luego siemplemente ejecutaremos el comando “make”. Los ficheros del ejemplo son: crt0.s: Código de arranque en ensamblador. prg1.c: programa en C. Incluye la función “main”. regs2313.h: definiciones de los registros del micro. Makefile:dependencias y control de la compilación. El proceso de la compilación queda representado de forma gráfica en la siguiente figura:
objeto ELF
crt0.s
avr−as
crt0.o
linker−script
avr23xx.x avr−ld prg1 avr−objcopy
prg1.c
avr−gcc
objeto ELF
prg1.o
prg1.srec
ejecutable hexadecimal (S−record)
ejecutable ELF
regs2313.h .../libgcc.a
libreria del gcc
ld.map
mapa dememoria
En la compilación intervienen otros ficheros como son la librería del gcc (libgcc.a) y el “linker-script” (avr23xx.x) que controla el proceso de enlazado. Las dependencias entre ficheros y los comandos que se han de ejecutar para generarlos están detallados en el fichero “Makefile”, que contiene líneas como las siguientes: prg1.srec:(tab) prg1 (tab) avr-objcopy -O srec prg1 prg1.srec
Enestas líneas se indica que “prg1.srec” se obtiene a partir de “prg1” y que el comando que hay que ejecutar para generar “prg1.srec” es “avr-objcopy ...”
2
prg1: (tab) prg1.o crt0.o (tab) avr-ld -o prg1 -T $(LSCRIPT) -Map ld.map crt0.o prg1.o $(LIBGCC)
Aquí indicamos que “prg1”, el ejecutable ELF, depende de “prg1.o” y de “crt0.o”, e indicamos el comando con el linker para enlazar ambosobjetos y la librería del gcc, que está definida en la variable “LIBGCC” crt0.o: (tab) crt0.s (tab) avr-as -o ctr0.o crt0.s
Aquí indicamos que “crt0.o” se genera a partir de “crt0.s” mediante el ensamblador “avr-as” prg1.o: (tab) prg1.c regs2313.h (tab) avr-gcc -O2 -mmcu=at90s2313 -mtiny-stack -c prg1.c
Por último en estas líneas indicamos que “prg1.o” depende de “prg1.c” y “regs2313.h” y elcomando para compilar el programa fuente en C es “avr-gcc ...”. Las tabulaciones en el fichero Makefile son importantes: Si se sustituyen por espacios el comando “make” da errores.
3.
Opciones de los comandos
Como hemos visto en el ejemplo cada comando (ensamblador, compilador, linker,...) tienen un gran número
de opciones que se pueden seleccionar en la línea de comandos. Destacaremos acontinuación las más relevantes:
avr-as
-o : Indica cual va a ser el fichero de salida
avr-gcc
-S : genera un listado en ensamblador en lugar del fichero objeto. -c : genera sólo el fichero objeto. (No se intenta generar un ejecutable) -O: nivel de optimización: • -O0 : sin optimización. • -O1 : optimización de transferencias entre registros. • -O2 : más optimizaciones. 3
• -O3 : además se...
Regístrate para leer el documento completo.