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