Code Warrior
Code Warrior
Code Warrior
Este documento posibilitar al estudiante comprender y utilizar el ambiente de desarrollo CodeWarrior IDE para la creacin, depuracin y descarga de programas de los sistemas basadas en microcontroladores Freescale, y particularmente permitir: Entender las partes que componen a CodeWarrior. tilizar el simulador para probar un programa. Comprobar las opciones que o!rece el Depurador incluido en CodeWarrior. tilizar las di!erentes opciones para programar un "rc#i$o.
Introduccin.
E%isten en el mercado $arias opciones para poder compilar es decir con$ertir del lengua&e C al lengua&e maquina los programas que son desarrollados por los dise'adores de !irm(are, pero sin embargo las opciones que cada uno de estos paquetes nos o!recen son limitadas y no siempre apro$ec#an las $enta&as que o!rece la arquitectura del microcontrolador o del microprocesador utilizado y siempre son de un costo ele$ado, es por esto que es altamente recomendable utilizar el paquete de desarrollo que cada empresa que crea los microcontroladores nos propone. En el caso de Freescale )emiconductor, se o!rece CodeWarrior De$elopment )tudio, este IDE permite a los usuarios pasar a tra$*s de todas las etapas de desarrollo desde el mane&o concepto #asta programar la memoria del microcontrolador.
"lgunas de las $enta&as que nos pro$ee CodeWarrior son: tiliza un sistema basado en ,royectos que nos #ace !acil el mane&o de multiples arc#i$os. Creacin automatica de -emplates para iniciar el proyecto, arc#i$os de encabezado tambien llamados #eader !iles para cada uno de los productos de Freescale. Dos e%celentes #erramientas para disminuir la cur$a de aprendiza&e de los peri!ericos como son: o De$ice Initialization -ool, o ,rocessor E%pert. Cuenta con Editor y compilador para lengua&e C, C.., y lengua&e ensamblador. /in0er entre el Compilador y el sistema de Descarga. )imulador, con $arias #erramientas para ayudar a la depuracion del sistema sin necesidad de contar con el microcontrolador !isicamente. El Editor cuenta con #erramientas que permiten la comparacin entre arc#i$os, !cil cambio entre componentes 1llamados targets2. ,ermite el mane&o de Control de 3ersiones con programas como C3), o )ub$ersion Fcil inter!ace con otros programas com 4atlab.
Com i!"dor.
Como se menciono en el punto anterior los compiladores por lo regular son caros y es un costo que el desarrollador del producto debe absorber sin embargo el ambiente de Desarrollo CodeWarrior e%isten dos $ersiones una es gratuita CodeWarrior IDE (it# ,ro&ect Wizard con la cual se puede realizar lo siguiente: 6 6 6 6 6 6 6 6 4ane&o de ,royectos con #asta 78 arc#i$os. )e puede compilar cdigo ensamblador en !orma ilimitada. Compilador de C con 9: opciones de optimizacin. Es posible compilar #asta +;<bytes de cdigo en C o C.. para dispositi$os de las !amilias =C:> y =C1)2:>?@):>. Descarga rpida del programa a 4emoria Flas# con dos opciones: 6 =C:>: 3ia 45A:> 6 =C1)2:>?@):>: 3ia BD4 )imulador completo para todo el c#ip. AI) De$ice Initialization tool para generar cdigo de inicializacin tanto para el C, como para los peri!icos de las !amilias =C:>, =C1)2:>?@):>. AI) ,rocessor E%pertC con componentes para las !amilias =C:>, =C1)2:>.
Arc#i$o PRM.
Como se menciono en el capitulo 7 el lugar donde queden almacenadas las $ariables y constantes es siempre una prioridad CodeWarrior utiliza un arc#i$o que es mane&ado por el /in0er para ubicar las zonas de memoria de nuestro microcontrolador. Este arc#i$o es llamado "rc#i$o ,@4. El arc#i$o ,@4 como se muestra en la !igura siguiente cuenta con dos zonas principales en la primera llamada )ED4EA-) y la segunda llamada ,/"CE4EA-. En la zona de )ED4EA-) se de!inen las distintas zonas del mapa de memoria del componente eligiendo el tipo de memoria sea @"4 o @54 esto le permite al programa que descarga y #ace el programado de las distintas memorias donde es @"4 y donde es @54. Ejemplo. En el siguiente e&emplo se $e como se de!ine un segmento de @"4 y y de @54 para el ):>ED>. /a memoria que se etiqueto como @54 utiliza el espacio desde :%E::: y #asta la direccin :%FF"D, y la memoria @"4 se elige de la :%::;: #asta la :%::FF.
Solucin SEGMENTS ROM RAM END = READ_ONLY 0xE000 = READ_WRITE 0x0060 to to 0xFFAD; 0x00FF;
Este arc#i$o es generado automticamente por CodeWarrior una $ez que se utiliza el ,ro&ect Wizard para crear el espacio de traba&o en base a uno de los microcontroladores. ,ero nos !alta la segunda zona la zona de ,/"CE4EA- en esta parte el lin0er in!orma al compilador y al programa de descarga donde $a el cdigo, donde $an las $ariables y donde $an las constantes dentro del mapa que se creo en la parte de )ED4EA-. Ejemplo. )e desea que de manera automtica las $ariables se coloquen en @"4 y el cdigo y constantes se guarden en @54 . Solucion. PLACEMENT DEFAULT_RAM DEFAULT_ROM END INTO INTO RAM; ROM;
DIRECTIVAS PRA%MA /as directi$as ,@"D4" nos permiten in!ormar al compilador de acciones que tiene que tomar durante el proceso de compilacin, en este caso, solo nos $amos en!ocar en como podemos elegir donde ubicar una $ariable o constante en di!erentes zonas de memoria de!inidas por el arc#i$o ,@4 que anteriormente $imos. /as directi$as ,@"D4" que nos permiten esto son: D"-"G)ED. Indica el segmento para guardar una $ariable o dato. Este segmento debe estar declarado en el arc#i$o ,@4. /as constantes tambi*n pueden indicarse el lugar donde sern guardadas con esta directi$a. C5DEG)ED. Indica el segmento para el siguiente cdigo. H por lo tanto se debe tratar como tal. C5A)-G)ED. Indica que el dato siguiente es reser$ado y debe mantenerse constante. " continuacin se muestran e&emplos sobre el uso de las directi$as, Ejemplo. En el siguiente e&emplo las !unciones ! y # son de!inidas en di!erentes segmentos utilizando Ipragma C5DEG)ED. )e puede obser$ar que tanto la de!inicin de la !unciona asJ como el cdigo de la !uncin se deben de de!inir con la directi$a. -ambien debe #acerse notar que tanto C5DID5+ como C5DID58 son segmentos que estan de!inidos en el arc#i$o ,@4. /* Def ! " #! $e %&' F(!" o!e' */ )*+&,-& CODE_SEG CODIGO. exte+! /o $ f0/o $1; )*+&,-& CODE_SEG CODIGO2 exte+! /o $ 30/o $1; )*+&,-& CODE_SEG DEFAULT /* Co$ ,o $e %&' F(!" o!e' */ )*+&,-& CODE_SEG CODIGO. /o $ f0/o $14 /* - e!t+&' 5(e f e't& e! CODIGO. 301; /* 3 e't& e! e% Se,-e!to CODIGO2*/ 6 )*+&,-& CODE_SEG MY_CODIGO2 /o $ 30/o $14 f01; 6
)*+&,-& CODE_SEG DEFAULT Ejemplo. En el siguiente e&emplo las $ariables a y b son de!inidas en di!erentes segmentos utilizando Ipragma D"-"G)ED. 5bser$e que despu*s de elegir el segmento para cada una de las $ariables se regresa al segmento DEF" /- . /* Def ! " #! $e )*+&,-& DATA_SEG !t 8; )*+&,-& DATA_SEG !t :; )*+&,-& DATA_SEG 7&+ &8%e' */ S9ORT_MEMORY CUSTOM_MEMORY DEFAULT
COMPILACION CONDICIONAL. En muc#as ocasionas deseamos #acer un cdigo lo su!icientemente robusto que nos permita que sea reutilizado para nue$os dise'os o simplemente una actualizacin del producto que estamos lanzando, y mas por los cambios tan rpidos que nuestro mundo globalizado nos demanda. na alternati$a para poder de alguna manera controlar que una parte de cdigo sea compilada para ciertos casos y en casos distintos no, son las directi$as para compilacin condicional. Estas directi$as son: ) f ) f$ef ) f!$ef )e% f )e%'e )e!$ f; Estas directi$as se basan en el !uncionamiento tal cual de una sentencia IFKE/)E de cdigo con la di!erencia que su uso es solo por el compilador y no por el cdigo que se esta e&ecutando. Ejemplo. En el siguiente e&emplo se desea utilizar el mismo cdigo generado tanto para el 4CL):>ED> como para el 4CL):>EDM aunque son de la misma !amilia e%isten algunos registros que no se encuentran en la misma direccin por tanto usando la siguiente compilacin condicional se puede elegir entre la librerJa del ED> y la librerJa del EDM. El de!ine es la condicion del IFDEF por tanto en este caso se selecciona ED>
Solucin.
MACROS. )u uso elimina la realizacin de tareas repetiti$as, automatizndolas. Bsicamente, se trata de un grupo de comandos de una aplicacin, organizados segNn un determinado &uego de instrucciones y cuya e&ecucin puede ser pedida de una sola $ez para realizar la !uncin que se desea. /a directi$a DEFIAE nos sir$e para poder crearlas, ba&o la siguiente sinta%is. )$ef !e ?ETI<UETA $e %& MACROA ?ACCIONES DE LA MACROA
Ejemplo. En este e&emplo se crean las macros /EDGEACEADID5 y /EDGBIC5/5@ en la primera nos permite apagar o prender el /ED que esta conectado al bit 9 del puerto B. H #aciendo uso de la macro /EDGBIC5/5@ podemos de una manera muy simple y automazida cambiar el color del /EDGBIC5/5@ obser$a que se e&ecutan dos lineas de cdigo y en el programa principal solo lo mandas llamar como si !uera una !uncin. )$ef )$ef )$ef )$ef !e OFF 0 !e ON . !e LED_ENCENDIDO0't&t('1 !e LED_CICOLOR0"o!t+o%1
ESTRUCTURA DE ARC&IVOS. El orden es uno de los elementos que al programar se $uel$e necesario es por esta razn entre otras que se requiere organizar el cdigo que #acemos en di!erentes arc#i$os, CodeWarrior al utilizar su ,royect Wizard para empezar un proyecto genera como se muestra en la !igura siguiente, una estructura de arc#i$os bsica. Esta estructura contiene las siguientes carpetas )5 @CE) en la cual se deben agregar todos los arc#i$os con e%tensin F.C es decir todos los que contienen el cdigo !uente de todas y cada una de las !unciones dise'adas para el programa. IAC/ DE) en esta carpeta deben a'adirse los arc#i$os F.= que contienen las de!iniciones de las $ariables asi como los prototipos de las !unciones de los arc#i$os F.C ,@5OEC- )E--IAD). Esta carpeta contiene las propiedades del proyecto completo. Dentro de esta carpeta se encuentra : o )-"@- ,GC5DE. Eue nos da el cdigo de inicializacin del )-"C< y otras partes del C, para e&ecutar codigo "A)I C. o /IA<E@ FI/E). Dentro de esta carpeta se encuentra el arc#i$o ,@4 con las de!iniciones necesarias para el lin0er. o "rc#i$o B @[email protected]/. Contiene de!iniciones que seran utilizadas por el =IW"@E 1programa de Descarga2 para la programacin de la memoria F/")= y EE,@54. o "rc#i$o F.4",. Contiene in!ormacin generada despu*s de la compilacin, nos indica el tama'o de cada una de las !unciones, el tama'o y posicin donde estan almacenadas las $ariables, etc.
Fig. 9.7 Estructura de un ,rograma Denerado por el ,ro&ect Wizard para el ):>ED>.
D'(c"r)".
/a etapa intermedia una $ez que el programa #a sido compilado es descargarlo a la memoria del 4icrocontrolador para poder #acer depuracin del mismo. ,ara esto cabe aclarar que por cone%iones se denomina en CodeWarrior a las distintas !ormas que e%isten para conectarnos con el 4C para tanto programar la memoria como para poder #acer depuracin. En el caso del microcontrolador que #emos estado usando el 4CL):>ED> este microcontrolador pertenece a la !amila =C1)2:> de Freescale el cual utiliza el modulo de BD4 para poder #acer estas !unciones, /a tar&eta que DE45ED> tiene entonces un BD4 desarrollado por la empresa ,PE. ,or lo cual utiliza una cone%in , ,PE 4ultilin0 ? Cyclone ,ro, en la siguiente !igura se muestran las opciones disponibles en CodeWarrior.
,ara poder entonces descargar el programa debemos realizar una cone%in entre nuestro -"@DE- 1 tar&eta o microcontrolador2 y nuestra ,C, en la !ig 9.9 se muestra la $entana que aparece una $ez que se #a eligido y en la cual se elige la inter!ase de cone%in, misma que se utilizo durante la e%plicacin en el capitulo 8.
D' ur"cin.
na de las #erramientas que mas nos sir$en para poder corregir errores de programacin 1bugs2 son las #erramientas de depuracin en CodeWarrior es crear B@E"<,5IA-) y W"-C=,5IA-) a continuacin se da una e%plicacin de cada uno de ellos. En la !igura 9.; )e muestra una imagen de la #erramienta de Depuracin =IW"3E que $iene dentro del "mbiente de Desarrollo de CodeWarrior.
Fig. 9.; Imagen de la =erramienta de Depuracin =i(a$e. B@E"<,5IA-. Es un comando que permite detener la e&ecucin del programa en una lJnea de cdigo indicada. ,ara !i&ar un B@E"<,5IA- basta con solo dar clic derec#o sobre la lJnea de cdigo donde se desea !i&ar el B@E"<,5IA-. Como se muestra en la !igura 9.Q la !lec#a con color ro&o indica que se #a !i&ado un B@E"<,5IA- de manera que al correr el programa en !orma continua al encontrar la !lec#a ro&a el programa de depuracin dentiene la e&ecucin en esa lJnea y se puede obser$ar el resultado que #asta ese momento se lle$a.
W"-C=,5IA-. Es un B@E"<,5IA- en una localidad de memoria especJ!ica. Como se $e en la !ig. 9.> )e agrega un W"-C=,5IA- al registro )CID del puerto serial, para obser$ar en que momento cambia y es modi!icado. "l igual que un B@E"<,5IA#aciendo clic con botn derec#o aparece el menN donde se puede elegir agregar W"-C=,5IA-.
Funcion'( E( 'ci"!'(
" continuacin en listamos tres !unciones e%tras con las que cuenta el ambiente de Desarrollo de CodeWarrior:
E%isten algunas #erramientas que o!recen compa'Jas socias de Freescale para poder #acer Depuracin en /Jnea o en $i$o, entre estas se encuentran el ,PE 4ultilin0 BD4 que es la !igura 9.++ y en la !igura 9.+8 se obser$a un ,PE Cyclone ,ro que permite programar 5FF/IAE asJ como 5A/IAE.
Establece el nombre del proyecto En el cuadro de te%to SProject Name:U y la ruta donde se guardar la in!ormacin del proyecto en el cuadro de te%to Location: )eleccionamos el /engua&e a utilizar, para este e&emplo solo marcamos la casilla de C, y #acemos clic en el botn terminar Finish
"l !inalizar el proceso de creacin del proyecto aparece la $entana del proyecto como se muestra na $ista mas detallada a la $entana del proyecto
Esta #erramienta realiza el proceso de compilacin de nuestro programa en SCU y de enlace el cual genera el arc#i$o de salida y los mapas necesarios para despu*s programar y depurar nuestra aplicacin.
Esta #erramienta integra la !uncin de compilar y enlazar S4a0eU si es que no se #a compilado nuestro cdigo y e&ecuta el programa de depuracin, el cual a su $ez graba el programa en nuestro microcontrolador y permite la depuracin del cdigo.
Archivo main().c
En este arc#i$o es donde escribiremos nuestro cdigo, e incluye la !uncin main12 la cual llamada despu*s de un proceso de inicializacin denominado startup12, encargado de inicializar las $ariables como es requerido por el estndar "A)I de C.
void MCU_init(void); /* Device initialization function declaration */ void main(void) { /* Uncomment this function call after using Device Initialization to use the generated code */ /* MCU_init(); */ EnableInterrupts; /* enable interrupts */ /* include your code here */
for(;;) { __RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave this function */ }
/* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data /* Port B Data
M.K Compilar el programa "l terminar tu cdigo en C #az clic en el botn S4"<EU, con lo cual se inicializar el proceso de compilacin en cual tomo el cdigo en C y $eri!icar que no #aya errores de escritura en el cdigo, o nos ad$ertir sobre ciertas !unciones que e!ectu el compilador, si el cdigo no tiene errores de sinta%is este ser traducido a un lengua&e para que pueda ser programado y entendido por el microcontrolador.
9.K ,rogramar el microcontrolador "ntes de proceder con esto $eri!ica que la tar&eta DE45L):>ED> este conectada a la computadora con el cable )B. /os led de )B ,W@ y ,W@G5 - deben estar encendidos, asJ como el led $erde 3DD. )ino no esta encendido el led $erde 3DD $eri!ica que los &umpers ,W@G)E/ este colocado en la posicin 3B. /a programacin se realiza mediante la #erramienta Debug y lo #ace en !orma automtica cuando damos clic en el botn DEB D. Durante este proceso se indican el estado de programacin de la memoria del microcontrolador 1memoria Flas#2 /as operaciones que realiza el Debugger son: Borra la memoria. )e ba&a el cdigo a la memoria F/")= 1 se programa el microcontrolador2 )e $eri!ica el programa )e e&ecuta el programa y para automticamente en la !uncin main12. "l terminar el proceso de programacin del microcontrolador tenemos la siguiente pantalla:
;.K Correr paso a paso la aplicacin ,ara correr la aplicacin paso a paso o instruccin por instruccin, se utiliza el botn ;.+.K 5bser$ar como se modi!ica la memoria del microcontrolador ;.8.K 5bser$ar el encendido y apagado de los /ED
Q.K ,ara e&ecutar el programa se utiliza el botn Aota. )i se e&ecuta el programa los /ED aparecern que estn todo el tiempo encendidos, debido a que apagan y prenden muy rpidamente.
PTAD_PTAD2; /*El LED1 toma el valor del SW1*/ PTAD_PTAD2; /*El LED2 toma el valor del SW2*/
EnableInterrupts; /* enable interrupts */ /*include your code here */ PTBDD_PTBDD6 = 1;/*Puerto PTB6 como salida*/ PTBDD_PTBDD7 = 1;/*Puerto PTB7 como salida*/ for(;;) { PTBD_PTBD6 = 1; /* Apaga el LED en PTB6 */ PTBD_PTBD7 = 1; /* Apaga el LED en PTB7 */ PTBD_PTBD6 = 0; /* Enciende el LED en PTB6 */ PTBD_PTBD7 = 0; /* Enciende el LED en PTB7 */ __RESET_WATCHDOG(); /* feeds the dog */ }
"l terminar tu cdigo en C #az clic en el botn S4"<EU, con lo cual se inicializar el proceso de compilacin en cual tomo el cdigo en C y $eri!icar que no #aya errores de escritura en el cdigo, o nos ad$ertir sobre ciertas !unciones que e!ectu el compilador, si el cdigo no tiene errores de sinta%is este ser traducido a un lengua&e para que pueda ser programado y entendido por el microcontrolador.
/os /EDs estaran apagados #asta que sea presionado alguno de los botones.