Vous êtes sur la page 1sur 10

Seminario

de Sistemas Embebidos Facultad de ingeniera UBA

Tutorial LPCXpresso IDE, CodeRed

Mini Tutorial LPCXpresso IDE, CodeRed


1. Workspace
Lo primero que se necesita para poder encarar un proyecto (con proyecto nos referimos a un programa que corra en el micro) en CodeRed es definir un workspace. El workspace es una carpeta en algn disco que va a contener a los distintos proyectos (ac proyecto se usa como lo usa CodeRed, es decir cdigo que se compila y genera una salida (hex o similar). Entonces para empezar se debe seleccionar un workspace (si no lo pregunta cuando inicia): File > Switch Workspace y elegimos alguno ya usado o bien uno nuevo

A modo de ejemplo, se incluye con este documento 2 workspaces, 1 configurado para el LPC1343 (WS_Template_1343) y otro para el LPC1768 (WS_Template_1768). En cada uno se incluyeron bibliotecas listas para usar. (en la proxima seccin se explican las diferencias). Si se elige cualquiera de estos dos workspaces puede ocurrir dos cosas: Que aparezcan los proyectos dentro de la carpeta, en este caso ya estamos listos para empezar Que no aparezcan. En este caso hay que tocar botn derecho en el Project Explorer y seleccionar importar. (O File> Import, pero no el acceso rpido de import example projects, eso es para zips). Los pasos son: 1 de 10

Seminario de Sistemas Embebidos Tutorial LPCXpresso IDE, CodeRed Facultad de ingeniera UBA o Seleccionar dentro de General -> Existing Project into workspace y luego en el root directory seleccionar la carpeta del disco que contiene al workspace. Debera aparecer algo asi:

o Tildar todos los proyectos (si es que queremos incluir a todos) y no tildar ninguna de las dos opciones de abajo. Darle Finish y todo debera quedar as en el Project Explorer.

En los workspace de ejemplo estn incluidas las siguientes bibliotecas. Para el LPC1343: 2 de 10

Seminario de Sistemas Embebidos Tutorial LPCXpresso IDE, CodeRed Facultad de ingeniera UBA Lib_CMSISv1p30_LPC13XX: contiene las definiciones bsicas del CORTEX-M3 de ARM as como las direcciones de memoria y otros perifricos del LPC1343 en particular. Lib_MCU: contiene drivers de los perifricos del 1343. Es decir, las funciones de bajo nivel que manejan los perifricos (adc, gpio, uart, etc.). Cuidado que esto es solo a modo de ejemplo y algunos drivers no estn completos o estn preconfigurados para ciertas tareas (por ejemplo el ADC para leer por polling o interrupcin) Lib_BaseBoard: Funciones para manejar los distintos dispositivos del BaseBoard de Embedded Artists. Lib_FatFs_SD: funciones para manejar una memoria MMC/SD Incluye funciones de bajo nivel (manejo del SPI) y de alto nivel (f_open, f_read, f_close) al mejor estilo c de PCs. FreeRTOS_Library: biblioteca del sistema operativo en tiempo real FreeRTOS. Para el LPC1768 se incluyen: Lib_CMSIS: En este caso es la ltima versin provista por NXP. Incluye tanto definiciones y funciones del core como los Drivers. Es de alguna manera el CMSIS y el Lib_MCU del 1343 pero todo junto. FreeRTOS_Library: idem 1343

2. Proyectos
Si hicimos todo bien podramos ver en el Project Explorer los proyectos incluidos dentro del workspace. Existen dos tipos de proyectos diferentes para el CodeRed Las bibliotecas estticas Los programas de aplicacin

Las bibliotecas estticas son un montn de funciones y archivos .h que sirven para luego incluir en otros proyectos. De las bibliotecas no se saca cdigo tipo HEX sino que solo se sacan cdigo objeto (.o) con las funciones. En el caso de que nuestro programa las utilize, el linker las va a buscar ah. La idea es que lo programas pueden linkearse a las bibliotecas y as poder mantener organizado el cdigo. Por ejemplo, si uno quiere hacer una aplicacin que use una memoria SD y algn perifrico del BaseBoard y todo esto manejarlo con un FreeRTOS entonces deberan linkear el proyecto que estn haciendo a ests bibliotecas estticas. Un ejemplo sera asi: (de paso va un breve repaso del proceso de compilacin/linkeo en c)

3 de 10

Seminario de Sistemas Embebidos Facultad de ingeniera UBA

Tutorial LPCXpresso IDE, CodeRed

La biblioteca esttica Lib_MCU luego de compilar cada uno de sus archivos .c y generar salidas .o, junta todos en un archivo .a. Este archivo contiene el cdigo objeto de todas las funciones declaradas en los diferentes .c. El proyecto compila el main.c, el funciones.c y genera los .o. Luego el linker junta los .o y los .a y produce el .hex que es el que se le baja al microcontrolador finalmente. Ahora que ya sabemos que tipos de proyectos existen y para que sirven cada uno, vamos a ver como se los crean desde 0.

3. Consideraciones generales 3.1. Estructura de un proyecto


Cuando nos propongamos hacer un proyecto (en sentido global), se recomienda armar un workspace en el que contengan las diferentes bibliotecas estticas necesarias para el mismo y los programas en si. Es por esto que las carpetas que junto a este documento se llaman Template_XXX. Una buena idea es copiar esta carpeta como est y cambiarle el nombre. Luego usarla como workspace y ah crear el proyecto del programa que queramos hacer. En las proximas secciones vemos como se hace. Muchas veces las bibliotecas se configuran seteando defines. Esto permite que se incluyan o excluyan funciones por ejemplo, o que cierta tarea se haga de una u otra manera. Es por eso que no recomiendo compartir las bibliotecas entre distintos Proyectos(en el sentido de un programa que queremos armar para que haga algo). Es por eso recomendable que tengan un workspace con las bibliotecas necesarias configuradas para cada uno.

4 de 10

Seminario de Sistemas Embebidos Tutorial LPCXpresso IDE, CodeRed Facultad de ingeniera UBA 3.2. Search paths Cuando tenemos varas bibliotecas y programas dentro de un workspace, ests no estn conectadas de ninguna manera. Es decir que si yo en mi programa tengo una lnea como: #include lpc17xx_adc.h para poder incluir las funciones del ADC que viene de la biblioteca Lib_MCU, CodeRed no sabe a donde ir a bsucar el archivo de header. Por eso debemos definirle los Includes Paths. Asi mismo, si ya los incluimos y todo anduvo bien, a la hora de compilar, el CodeRed no sabe contra que archivo objeto (.a) linkear, se lo tenemos que especificar (su ubicacin y nombre) explcitamente. Esto se llama Library search paths. Esto lo vamos a ver en las siguientes secciones, pero lo comento ahora para que se entienda la prxima seccin.

4. Crear una Static Library

Para crearla hay que hacer click en este link que aparece en el QuickStart Panel No encontr otra manera de llegar a este link. Pero una vez que le dan a esa opcin les pide un nombre y luego adentro pueden poner los .c y .h que necesiten con sus funciones y luego hacer un Build para generar su propia biblioteca esttica. Si se necesitaran incluir .h, hay que definirle los include paths. Como las bibliotecas no se linkean, no hay Library search pathsque se puedan configurar.

5 de 10

Seminario de Sistemas Embebidos Facultad de ingeniera UBA

Tutorial LPCXpresso IDE, CodeRed

5. Crear un proyecto (programa)


Para crear un nuevo programa, podemos ir a File->New->Project. Luego elegir LPCXpresso C Project

Luego elegir la familia que corresponda (NXP LPC1300 para un LPC1343, o NXP LPC1700 par aun LPC1768). Podrn ver que hay dos opciones, C Project y C semihosting Project. El semihosting es una manera que tiene el debugger de intercalarse en el cdigo real que permite cosas como hacer un printf en cualquier parte de nuestro programa y que est llegue a nuestra consola de Debug. Si no ponemos el de semihosting, igual podremos debuggear paso por paso pero no podremos hacer el printf. Est sera el tipo de proyecto normal. Luego le damos un nombre, elegimos exactamente el microcontrolador que utilizaremos y finalmente nos pregunta si queremos usar el CMSIS. Esto lo que hace es poner un #define __USE_CMSIS=CMSISv1p30_LPC17xx que sirve para que se ejecuten ciertas cosas al inciio. El problema de esto es que solo anda si la biblioteca esttica del CMSIS se llama exactamente de una manera que ellos decidieron. Si no la encuentra puede dar un error. Entonces no lo tildemos y lo linkeamos a mano. Esto crea un proyecto con la siguiente estructura:

6 de 10

Seminario de Sistemas Embebidos Tutorial LPCXpresso IDE, CodeRed Facultad de ingeniera UBA cr_startup_lpc17.c, es el archivo que contiene los llamados a los handlers en interrupcin y diferentes inicializaciones necesarias para que se ejecute correctamente el programa (por ejemplo, inicializar por default todas las variables globales a 0). Pero si miran adentro, hay muchos condicionales de este estilo: #ifdef __USE_CMSIS SystemInit(); #endif Y esto no va a estar activado a menos que se defina de alguna manera __USE_CMSIS. Como no tildamos la opcin en el Wizard, esto no est definido por lo que no va a estar activado. Para activarlo podramos poner un define en alguna parte, pero la manera ms prolija de hacerlo es definirle el Symbol al proyecto. Esto se hace haciendo click en Quick Settings en la barra de arriba y entrando a defined symbols:

Ah tendremos que agregar la siguiente linea: __USE_CMSIS=CMSISv1p30_LPC17xx De esta manera si cerramos y volvemos a abrir el archivo cr_startup_lpc17.c veremos que no est ms grisado y que se ejecutara el cdigo. El main.c es donde pondremos nuestro programa principal. Es donde esta el int main(void) que todos conocemos. Ah mismo podemos poner cualquier cosa que querramos. Pero para esto compile, hay que linkearlo con el CMSIS y tambin con las diferentes bibliotecas estticas que vayamos a utilizar. Para hacer esto hay que definir (desde el mismo lugar que la imagen anterior) las siguientes cosas: Include Paths todos los paths de los diferentes proyectos que utilicemos que tengan los .h que querremos llamar desde un include. Se hace as:

7 de 10

Seminario de Sistemas Embebidos Facultad de ingeniera UBA

Tutorial LPCXpresso IDE, CodeRed

y debera quedar algo asi:

Library Sarch Paths De manera similar debemos incluir todas las carpetas donde estn los .a contra los que queremos linkear. Por ejemplo para linkear Lib_MCU, hay que seleccionar la carpeta Debug dentro del proyecto Lib_MCU por que ah es donde el compilar deja los .a que genera. Podra ser la carpeta Release tambin dependiendo de cmo est configurado el proyecto. Libraries Finalmente hay que seleccionar los archivos .a contra los que vamos a linkear (antes solo definimos donde estn, medio raro no?). Para eso elegir la ultima opcin Libraries Tocar el + y luego seleccionar los .a DE A UNO POR VEZ de la siguiente manera:

8 de 10

Seminario de Sistemas Embebidos Facultad de ingeniera UBA

Tutorial LPCXpresso IDE, CodeRed

Para que habremos puesto el path antes, todava no lo se. Pero sino no funciona Por ltimo una aclaracin. Estos quick settings son en realidad accesos directos a la configuracin mucho ms completo del proyecto al que pueden acceder tocando botn derecho en el nombre del proyecto y luego Project Settings. Se darn cuenta que encontrar el Include Pathses todo un desafo, as que es mejor usar los quick settings. Si todo sali bien, ya deberan poder descargar el programa haciendo un Build y tocando en el iconito del bicho que est arriba.

Set library type


La opcin por defecto es Redlib (semihost), si en su proyecto no utilizar funciones de biblioteca Redlib como por ejemplo printf es recomendable seleccionar la opcin Newlib (none), de este modo se liberan buffers en el segmento data (algunos cientos de bytes de memoria RAM del MCU). Referencia: Getting started with NXP LPCXpresso (6.4 Code size , 6.4.1 printf )

9 de 10

Seminario de Sistemas Embebidos Facultad de ingeniera UBA

Tutorial LPCXpresso IDE, CodeRed

Escrito por Alan Kharsansky Versin preliminar, todos los comentarios y sugerencias son bienvenidos a seminario-embebidos@googlegroups.com 29-10-2010

10 de 10

Vous aimerez peut-être aussi