Bienvenido: Ingresar

Subir página de contenido

Puedes subir contenido para la página con el nombre abajo. Si cambias el nombre de la página, puedes subir contenido para otra página. Si el nombrede la página lo dejas en blanco, tomaremos el nombre del archivo

Archivo de contenido para la página
Nombre de la página
Comentario
En el juego de las bochas, como se llama la mas chiquita?

Versión 1 con fecha 2019-09-06 13:47:47

location: WebHome / TrabajosPracticos / EjemploC

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().

Código en lenguaje C

   1 #include <stdio.h>
   2 
   3 extern int suma(int a, int b);
   4 
   5 int main(void)
   6 {
   7   int a = 71;
   8   int b = 29;
   9   int c;
  10 
  11   c = suma(a,b);
  12 
  13   return c;
  14 } 

Código en lenguaje ensamblador

   1 .text
   2 .arm
   3 .global suma
   4 
   5 suma:
   6   add   r2, r0, r1
   7   mov   r0, r2                    
   8   mov   pc, lr  

Construcción para simulación

   1 arm-none-eabi-gcc -Wall -mcpu=arm7tdmi -g -c main.c -o main.o
   2 arm-none-eabi-as -mcpu=arm7tdmi -g suma.s -o suma.o
   3 arm-none-eabi-gcc -Ttext=0 -nostartfiles -g main.o suma.o -o suma.elf
   4 
  • 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