Académique Documents
Professionnel Documents
Culture Documents
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
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.
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.
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
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
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
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.
9 de 10
Escrito por Alan Kharsansky Versin preliminar, todos los comentarios y sugerencias son bienvenidos a seminario-embebidos@googlegroups.com 29-10-2010
10 de 10