C/C-Linux:Compile:Condorboard-Stable

=Compilando en C y C-Linux=

Descripción
C es un lenguaje de programación de alto nivel para un procesador, microcontrolador, u otro dispositivo programable similar. En C la funcionalidad del codigo se es divida en multiples funciones, las cuales son llamadas desde la funcion principal main. En el caso de este lenguaje las instrucciones son genericas para todos los procesadores. Se debe tener en cuenta pasarle al compilador la referencia del procesador especifico utilizado para que las referncias a direcciones de memoria u otras constantes sean las adecuadas.

Requisitos
Para iniciar la compilación de un programa en assembly, debe contar con los siguientes items ''Las siguientes indicaciones aplican para los ejemplos descritos en esta wiki y disponibles en el repositorio GIT condorboard-code (Descargar). Se recomienda al usuario tomar como base dichos ejemplos.''
 * 1) Toolchain (Ver Instalacion Herramientas de Desarrollo)
 * 2) Programa en C con la funcionalidad deseada. (Ver Ejemplos)

Proceso de Compilación
Para explicar el proceso de compilación se toma como base el ejemplo C_GPIO_Blinking_Led (su funcionamiento se explica en la seccion ejemplos).

Dentro de la carpeta de este proyecto se encuentran los siguientes archivos:


 * main.c: Es el programa del usuario descrito en lenguaje C (source file). Aqui se encuentran las definiciones de las funciones auxiliares y de la funcion principal main. En la seccion Ejemplos, se describe más detalladamente su funcionamiento. La extension .c indica que es un archivo descrito en lenguaje c.
 * Makefile: Es un archivo de instrucciones para la compilacion del programa del usuario. En su interior se encuentra el conjunto de instrucciones especificas necesarias para dicha compilación. Su razón de ser es que constituye una forma generica, para realizar las llamadas a los programas encargados de la compilación mediante sencillos comandos. Dichos programas que intervienen en la compilación son:
 * arm-elf-gcc:Construye el codigo objeto de cada uno de los archivos c (.c) por separado. En este paso tambien puede ser posible compilar codigo en assembly (.S) y construir los respectivos archivos objetos.
 * arm-elf-ld:se linkean (resuleven dependencias (labels, direcciones, etc) ) todos los archivos objetos creados a partir del codigo fuente y se crea un unico archivo ejecutable (.elf).
 * arm-elf-objcopy: Construye el archivo binario (.bin), a partir del archivo ejecutable (.elf), que será ejecutado por el procesador.

Procedimiento Para la Compilación
Una vez se tiene un proyecto similiar al explicado, se procede a su compilación mediante la ejecución de las siguientes instrucciones:

Al final del proceso se podran observar que se generaron los siguientes archivos.


 * main.o: Archivo objeto del programa de usuario.
 * main.elf: Archivo ejecutable
 * main.bin: Archivo binario. Este es el que será enviado al procesador para su ejecución.

Descripción
Como se mencionó anteriormente C es un lenguaje de programación de alto nivel para un procesador, microcontrolador, u otro dispositivo programable similar. La diferencia entre C y C-Linux radica en que este ultimo esta destinado para ejecutarse sobre un procesador con un sistema operativo embebido Linux.

La programación en C-Linux es muy similar a C. La principal diferencia radica en el acceso a los recursos hardware del dispositivo (memoria, perifericos, etc), el cual debe realizarse a traves de llamadas al kernel del sistema operativo.

Requisitos
Para iniciar la compilación de un programa en assembly, debe contar con los siguientes items ''Las siguientes indicaciones aplican para los ejemplos descritos en esta wiki y disponibles en el repositorio GIT condorboard-code (Descargar). Se recomienda al usuario tomar como base dichos ejemplos.''
 * 1) Toolchain (Ver Instalacion Herramientas de Desarrollo)
 * 2) Programa en C-Linux con la funcionalidad deseada. (Ver Ejemplos)

Proceso de Compilación
Para explicar el proceso de compilación se toma como base el ejemplo CLinux_GPIO_Blinking_Led (su funcionamiento se explica en la seccion ejemplos).

Dentro de la carpeta de este proyecto se encuentran los siguientes archivos:


 * blinkingled.c:Es el programa del usuario descrito en lenguaje C (source file). Aqui se encuentran las definiciones de las funciones auxiliares y de la funcion principal main. En la seccion Ejemplos, se describe más detalladamente su funcionamiento. La extension .c indica que es un archivo descrito en lenguaje c.
 * gpio.c:Se definen las funciones auxiliares para el manejo del periférico GPIO, utilizadas por la aplicación principal.
 * gpio.h:Contiene los prototipos de las funciones descritas en gpio.c
 * Makefile: Es un archivo de instrucciones para la compilacion del programa del usuario. En su interior se encuentra el conjunto de instrucciones especificas necesarias para dicha compilación. Su razón de ser es que constituye una forma generica, para realizar las llamadas a los programas encargados de la compilación mediante sencillos comandos. Dichos programas que intervienen en la compilación son:
 * arm-angstrom-linux-gnueabi-gcc:Compilador cruzado para la distribucion angstrom de Linux Embebido.

Procedimiento Para la Compilación
Una vez se tiene un proyecto similiar al explicado, se procede a su compilación mediante la ejecución de las siguientes instrucciones:

Al final del proceso se podran observar que se generaron los siguientes archivos.


 * blinkingled: Archivo Ejecutable. Este es el que será enviado al procesador para su ejecución.