Ejemplo de proyecto en lenguale C y ensamblador
Se muestra un ejemplo de proyecto que incluye archivos fuentes en lenguaje C y en ensablador. El programa realiza la suma de dos valores enteros inicializados en el código fuente que es devuelto por la función main().
Archivo .c: "declara" la función suma como externa, esto define el prototipo de la función (recibe dos enteros y devuelve un entero) y al declararlo como externo, el compilador no devuelve error (por no encontrar la implementación de la función).
Archivo .s: "define" la función suma
Código en lenguaje C
Código en lenguaje ensamblador
Construcción para simulación
La primer línea compila el código fuente del archivo main.c y genera el archivo objeto main.o
La segunda línea ensambla el archivo fuente suma.s y genera el archivo suma.o
La última línea enlaza los dos archivos objetos (main.o y suma.o) y genera el archivo suma.elf
Las diferentes opciones utilizadas son:
-c para detener la construcción luego de la etapa de compilación y tiene como salida el archivo objeto (.o).
-o para indicar el nombre del archivo de salida.
-Wall para habilitar todos las advertencias (warnings) del compilador.
-mcpu=arm7tdmi para indiar la arquitectura del procesador.
-g para incluir información de depuración en los archivos de salida.
Simulación en PC con gdb
A COMPLETAR
Construcción utilizando `make`
Archivo Makefile para la compilación cruzada
1 CC = arm-none-eabi-gcc
2 AS = arm-none-eabi-as
3 LD = arm-none-eabi-ld
4
5 OBJECTS = main.o suma.o
6
7 CFLAGS = -Wall -mcpu=arm7tdmi -g -c
8 ASFLAGS = -mcpu=arm7tdmi -g
9 LDFLAGS = -Ttext=0 -nostartfiles -g
10
11 suma.elf: $(OBJECTS)
12 $(CC) $(LDFLAGS) $(OBJECTS) -o suma.elf
13
14 suma.o: suma.s
15 $(AS) $(ASFLAGS) suma.s -o suma.o
16
17 main.o: main.c
18 $(CC) $(CFLAGS) main.c
19
20 clean:
21 rm *.o *.elf
Archivo Makefile para la compilación sobre la RPi
1 CC = gcc
2 AS = as
3 LD = ld
4
5 OBJECTS = main.o suma.o
6
7 CFLAGS = -Wall -g -c
8 ASFLAGS = -g
9 LDFLAGS = -g
10
11 suma.elf: $(OBJECTS)
12 $(CC) $(LDFLAGS) $(OBJECTS) -o suma.elf
13
14 suma.o: suma.s
15 $(AS) $(ASFLAGS) suma.s -o suma.o
16
17 main.o: main.c
18 $(CC) $(CFLAGS) main.c
19
20 clean:
21 rm *.o *.elf