Está en la página 1de 10

Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed

laculLad de lngenlerla u8A




1 de 10
!"#" %&'()"*+ ,-./0)122( 3456 .(71817

9: ;()<20*=1
Lo prlmero que se neceslLa para poder encarar un proyecLo (con proyecLo nos referlmos a un
programa que corra en el mlcro) en Code8ed es deflnlr un workspace. Ll workspace es una
carpeLa en algun dlsco que va a conLener a los dlsLlnLos proyecLos (ac proyecLo se usa como lo
usa Code8ed, es declr cdlgo que se complla y genera una sallda (hex o slmllar). LnLonces para
empezar se debe selecclonar un workspace (sl no lo pregunLa cuando lnlcla):
llle > SwlLch Workspace y eleglmos alguno ya usado o blen uno nuevo

A modo de e[emplo, se lncluye con esLe documenLo 2 workspaces, 1 conflgurado para el
LC1343 (WS_1emplaLe_1343) y oLro para el LC1768 (WS_1emplaLe_1768). Ln cada uno se
lncluyeron blblloLecas llsLas para usar. (en la proxlma seccln se expllcan las dlferenclas). Sl se
ellge cualqulera de esLos dos workspaces puede ocurrlr dos cosas:
Cue aparezcan los proyecLos denLro de la carpeLa, en esLe caso ya esLamos llsLos para
empezar
Cue no aparezcan. Ln esLe caso hay que Locar boLn derecho en el ro[ecL Lxplorer y
selecclonar lmporLar. (C llle> lmporL, pero no el acceso rpldo de lmporL example
pro[ecLs, eso es para zlps). Los pasos son:
Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


2 de 10
o Selecclonar denLro de Ceneral -> LxlsLlng ro[ecL lnLo workspace y luego en el
rooL dlrecLory selecclonar la carpeLa del dlsco que conLlene al workspace.

ueberla aparecer algo asl:


o 1lldar Lodos los proyecLos (sl es que queremos lnclulr a Lodos) y no Llldar
nlnguna de las dos opclones de aba[o. uarle llnlsh y Lodo deberla quedar asl en
el ro[ecL Lxplorer.


Ln los workspace de e[emplo esLn lncluldas las slgulenLes blblloLecas.
ara el LC1343:
Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


3 de 10
,">?.!@3@A90BC?,-.9B//D conLlene las deflnlclones bslcas del CC81Lx-M3 de A8M
asl como las dlrecclones de memorla y oLros perlferlcos del LC1343 en parLlcular.
,">?!.ED conLlene drlvers de los perlferlcos del 1343. Ls declr, las funclones de ba[o
nlvel que mane[an los perlferlcos (adc, gplo, uarL, eLc.). Culdado que esLo es solo a modo
de e[emplo y algunos drlvers no esLn compleLos o esLn preconflgurados para clerLas
Lareas (por e[emplo el AuC para leer por polllng o lnLerrupcln)
,">?F*21F(*)7D lunclones para mane[ar los dlsLlnLos dlsposlLlvos del 8ase8oard de
Lmbedded ArLlsLs.
,">?G*'G2?@4D funclones para mane[ar una memorla MMC/Su lncluye funclones de ba[o
nlvel (mane[o del Sl) y de alLo nlvel (f_open, f_read, f_close) al me[or esLllo c de C's.
G)118%H@?,">)*)ID blblloLeca del slsLema operaLlvo en Llempo real lree81CS.
ara el LC1768 se lncluyen:
,">?.!@3@D Ln esLe caso es la ulLlma versln provlsLa por nx. lncluye LanLo deflnlclones
y funclones del core como los urlvers. Ls de alguna manera el CMSlS y el Llb_MCu del
1343 pero Lodo [unLo.
G)118%H@?,">)*)ID ldem 1343
J: -)(I1='(2
Sl hlclmos Lodo blen podrlamos ver en el ro[ecL Lxplorer los proyecLos lncluldos denLro del
workspace. LxlsLen dos Llpos de proyecLos dlferenLes para el Code8ed
Las blblloLecas esLLlcas
Los programas de apllcacln
Las blblloLecas esLLlcas son un monLn de funclones y archlvos .h que slrven para luego lnclulr
en oLros proyecLos. ue las blblloLecas no se saca cdlgo Llpo PLx slno que solo se sacan cdlgo
ob[eLo (.o) con las funclones. Ln el caso de que nuesLro programa las uLlllze, el llnker las va a
buscar ahl.
La ldea es que lo programas pueden llnkearse a las blblloLecas y asl poder manLener organlzado
el cdlgo.
or e[emplo, sl uno qulere hacer una apllcacln que use una memorla Su y algun perlferlco del
8ase8oard y Lodo esLo mane[arlo con un lree81CS enLonces deberlan llnkear el proyecLo que
esLn haclendo a esLs blblloLecas esLLlcas. un e[emplo serla asl: (de paso va un breve repaso
del proceso de compllacln/llnkeo en c)

Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


4 de 10


La blblloLeca esLLlca Llb_MCu luego de compllar cada uno de sus archlvos .c y generar salldas
.o, [unLa Lodos en un archlvo .a. LsLe archlvo conLlene el cdlgo ob[eLo de Lodas las funclones
declaradas en los dlferenLes .c.
Ll proyecLo complla el maln.c, el funclones.c y genera los .o. Luego el llnker [unLa los .o y los .a y
produce el .hex que es el que se le ba[a al mlcroconLrolador flnalmenLe.
Ahora que ya sabemos que Llpos de proyecLos exlsLen y para que slrven cada uno, vamos a ver
como se los crean desde 0.
B: .(#2"71)*="(#12 K1#1)*+12
B:9: 52')&='&)* 71 &# 0)(I1='(
Cuando nos propongamos hacer un proyecLo (en senLldo global), se recomlenda armar un
workspace en el que conLengan las dlferenLes blblloLecas esLLlcas necesarlas para el mlsmo y
los programas en sl. Ls por esLo que las carpeLas que [unLo a esLe documenLo se llaman
1emplaLe_xxx. una buena ldea es coplar esLa carpeLa como esL y camblarle el nombre. Luego
usarla como workspace y ahl crear el proyecLo del programa que queramos hacer. Ln las
proxlmas secclones vemos como se hace. Muchas veces las blblloLecas se conflguran"
seLeando deflnes. LsLo permlLe que se lncluyan o excluyan funclones por e[emplo, o que clerLa
Larea se haga de una u oLra manera. Ls por eso que no recomlendo comparLlr las blblloLecas
enLre dlsLlnLos royecLos"(en el senLldo de un programa que queremos armar para que haga
algo). Ls por eso recomendable que Lengan un workspace con las blblloLecas necesarlas
conflguradas para cada uno.
Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


3 de 10
B:J: @1*)=L 0*'L2
Cuando Lenemos varlas blblloLecas y programas denLro de un workspace, esLs no esLn
conecLadas de nlnguna manera. Ls declr que sl yo en ml programa Lengo una llnea como:
#lnclude lpc17xx_adc.h"
para poder lnclulr las funclones del AuC que vlene de la blblloLeca Llb_MCu, Code8ed no sabe a
donde lr a bsucar el archlvo de header. or eso debemos deflnlrle los lncludes aLhs". Asl
mlsmo, sl ya los lnclulmos y Lodo anduvo blen, a la hora de compllar, el Code8ed no sabe conLra
que archlvo ob[eLo (.a) llnkear, se lo Lenemos que especlflcar (su ublcacln y nombre)
expllclLamenLe. LsLo se llama Llbrary search paLhs". LsLo lo vamos a ver en las slgulenLes
secclones, pero lo comenLo ahora para que se enLlenda la prxlma seccln.
M: .)1*) &#* @'*'"= ,">)*)I
ara crearla hay que hacer cllck en esLe llnk que aparece en el CulckSLarL anel
no enconLre oLra manera de llegar a esLe llnk. ero
una vez que le dan a esa opcln les plde un nombre y
luego adenLro pueden poner los .c y .h que neceslLen
con sus funclones y luego hacer un 8ulld" para
generar su propla blblloLeca esLLlca.
Sl se neceslLaran lnclulr .h, hay que deflnlrle los lnclude
paLhs. Como las blblloLecas no se llnkean, no hay
Llbrary search paLhs"que se puedan conflgurar.
Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


6 de 10
N: .)1*) &# 0)(I1='( O0)(K)*P*Q
ara crear un nuevo programa, podemos lr a llle->new->ro[ecL. Luego eleglr LCxpresso C
ro[ecL

Luego eleglr la famllla que corresponda (nx LC1300 para un LC1343, o nx LC1700 par aun
LC1768). odrn ver que hay dos opclones, C ro[ecL y C semlhosLlng ro[ecL. Ll semlhosLlng
es una manera que Llene el debugger de lnLercalarse en el cdlgo real que permlLe cosas como
hacer un prlnLf en cualquler parLe de nuesLro programa y que esLe llegue a nuesLra consola de
uebug. Sl no ponemos el de semlhosLlng, lgual podremos debuggear paso por paso pero no
podremos hacer el prlnLf. LsLe serla el Llpo de proyecLo normal".
Luego le damos un nombre, eleglmos exacLamenLe el mlcroconLrolador que uLlllzaremos y
flnalmenLe nos pregunLa sl queremos usar el CMSlS. LsLo lo que hace es poner un #deflne
__uSL_CMSlS=CMSlSv1p30_LC17xx que slrve para que se e[ecuLen clerLas cosas al lncllo. Ll
problema de esLo es que solo anda sl la blblloLeca esLLlca del CMSlS se llama exacLamenLe de
una manera que ellos decldleron. Sl no la encuenLra puede dar un error. LnLonces no lo
Llldemos y lo llnkeamos a mano.

LsLo crea un proyecLo con la slgulenLe esLrucLura:

Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


7 de 10
cr_sLarLup_lpc17.c, es el archlvo que conLlene los llamados a los handlers en lnLerrupcln y
dlferenLes lnlclallzaclones necesarlas para que se e[ecuLe correcLamenLe el programa (por
e[emplo, lnlclallzar por defaulL Lodas las varlables globales a 0). ero sl mlran adenLro, hay
muchos condlclonales de esLe esLllo:
#lfdef __uSL_CMSlS
SysLemlnlL(),
#endlf
? esLo no va a esLar acLlvado a menos que se deflna de alguna manera __uSL_CMSlS. Como no
Llldamos la opcln en el Wlzard, esLo no esL deflnldo por lo que no va a esLar acLlvado. ara
acLlvarlo podrlamos poner un deflne en alguna parLe, pero la manera ms proll[a de hacerlo es
deflnlrle el Symbol" al proyecLo. LsLo se hace haclendo cllck en Culck SeLLlngs" en la barra de
arrlba y enLrando a deflned symbols:

Ahl Lendremos que agregar la slgulenLe llnea:
__uSL_CMSlS=CMSlSv1p30_LC17xx
ue esLa manera sl cerramos y volvemos a abrlr el archlvo cr_sLarLup_lpc17.c veremos que no
esL ms grlsado y que se e[ecuLara el cdlgo.
Ll maln.c es donde pondremos nuesLro programa prlnclpal. Ls donde esLa el lnL maln(vold) que
Lodos conocemos. Ahl mlsmo podemos poner cualquler cosa que querramos.
ero para esLo complle, hay que llnkearlo con el CMSlS y Lamblen con las dlferenLes blblloLecas
esLLlcas que vayamos a uLlllzar. ara hacer esLo hay que deflnlr (desde el mlsmo lugar que la
lmagen anLerlor) las slgulenLes cosas:
3#=+&71 -*'L2
Lodos los paLhs de los dlferenLes proyecLos que uLlllcemos que Lengan los .h que querremos
llamar desde un lnclude". Se hace asl:
Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


8 de 10


y deberla quedar algo asl:


,">)*)I @*)=L -*'L2
ue manera slmllar debemos lnclulr Lodas las carpeLas donde esLen los .a conLra los que
queremos llnkear. or e[emplo para llnkear Llb_MCu, hay que selecclonar la carpeLa uebug
denLro del proyecLo Llb_MCu por que ahl es donde el compllar de[a los .a que genera. odrla
ser la carpeLa 8elease Lamblen dependlendo de cmo esLe conflgurado el proyecLo.
,">)*)"12
llnalmenLe hay que selecclonar los archlvos .a conLra los que vamos a llnkear (anLes solo
deflnlmos donde esLn, medlo raro no?). ara eso eleglr la ulLlma opcln Llbrarles" 1ocar el + y
luego selecclonar los .a uL A unC C8 vLZ de la slgulenLe manera:
Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


9 de 10

ara que habremos puesLo el paLh anLes, Lodavla no lo se. ero slno no funclona
or ulLlmo una aclaracln. LsLos qulck seLLlngs son en realldad accesos dlrecLos a la
conflguracln mucho ms compleLo del proyecLo al que pueden acceder Locando boLn
derecho en el nombre del proyecLo y luego ro[ecL SeLLlngs". Se darn cuenLa que enconLrar el
lnclude aLhs"es Lodo un desaflo, asl que es me[or usar los qulck seLLlngs.
Sl Lodo sall blen, ya deberlan poder descargar el programa haclendo un 8ulld y Locando en el
lconlLo del blcho que esL arrlba.
@1' +">)*)I 'I01
La opcln por defecLo es 817+"> O21P"L(2'Q, sl en su proyecLo no uLlllzar funclones de
blblloLeca 817+"> como por e[emplo 0)"#'R es recomendable selecclonar la opcln S1T+">
O#(#1Q, de esLe modo se llberan buffers en el segmenLo daLa (algunos clenLos de byLes de
memorla 8AM del MCu).
8eferencla: U1''"#K 2'*)'17 T"'L S/- ,-./0)122( OV:M .(71 2"W1 6 V:M:9 0)"#'R Q

Semlnarlo de SlsLemas Lmbebldos 1uLorlal LCxpresso luL, Code8ed
laculLad de lngenlerla u8A


10 de 10






LscrlLo por Alan kharsansky
versln prellmlnar, Lodos los comenLarlos y sugerenclas son blenvenldos a
semlnarlo-embebldos[googlegroups.com
29-10-2010

También podría gustarte