Está en la página 1de 32

Pgina1 de32 CODEWARRIORyLENGUAJEC

FCEFyN UniversidadNacionaldeCrdoba

CAPTULOIV
INTRODUCCIN Codewarrior (CW) IDE es un completo sistema para editar, compilar y enlazar, simular, programar y depurarparalosDSCdeFreescale. Laversin8.0delCWIDEestcompuestoporuneditor,ensamblador,compiladorC/C++optimizado, enlazador,simulador,programadorydepurador. En el paquete se incluye el UNIS Processor Expert, el cual es una herramienta que automatiza la generacindecdigo,configuracindeperifricos,dispositivosexternosyalgoritmos. ENTORNODEDESARROLLOINTEGRADOIDE ElIDEesunaaplicacindesoftwarequeintegralamayoradelasherramientasdeprogramacinenuna nicapiezadesoftware. Msadelantesevercmocrear,simularydepurarunproyectoenlafamiliaDSP56F8XXX. Luego de lanzar la aplicacin aparece el IDE como la que se muestra en la Figura 1. Esta ventana de arranquelepermitealusuariocrearunnuevoproyecto,correrunejemplodedemostracin,cargarun proyectoyaexistenteosimplementeusarelIDE.

Figure1CWIDEpantallaprincipal

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina2 de32 CODEWARRIORyLENGUAJEC CREANDOUNNUEVOPROYECTO PararealizarunnuevoproyectoenCW,presionesseleccionelaopcinFILE>NEWdelmenprincipalo icono de la barra de herramienta. Una nueva ventana emergente aparece y es el asistente de proyecto, que le permite al usuario seleccionar, el tipo de proyecto, el dispositivo, el nombre y su ubicacin. Losdiferentestiposson(verFigura2): EABI Stationery: El mismo le permite crear un proyecto para las placas de referencia de FreescaleconelestndarEABIparatenercompatibilidadconOSprincipalmente. EVM Example Stationery: Esta opcin le permite crear un proyecto simple para las boards de referenciadeFreescaleyobtenemosunaaplicacinfuncionandoeselmejorpuntodepartida. NEWProjectWizard:esunasistenteparalacreacindeproyectogenrico. EmptyProject:Creaunproyectovaciosindefinicionesespecficasdeunaplacaenparticular. Makefile Importer Wizard: este tipo de proyecto se utiliza para pasar un proyecto basado en makefileaunproyectomanejadoenelIDE. Processor Expert Examples Stationery: Crea proyectos con ejemplos listos para las placas de referenciadentrodelentornodeProcessorExpert. ProcessorExpertStationary:SirveparacrearproyectosconProcessorExpertnosolamentepara unaplacadereferencia.
FCEFyN UniversidadNacionaldeCrdoba

Figure2Creacindenuevoproyecto

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina3 de32 CODEWARRIORyLENGUAJEC SiseleccionamosDSP56800XNewProjectWizardnosaparecelasiguienteventana,paraseleccionarla subfamiliadeDSCyelprocesadorespecificodeesasubfamilia(verFigura3).


FCEFyN UniversidadNacionaldeCrdoba

Figure3Seleccindelprocesadorparaelproyecto. ElIDEdeCWsoportatrestiposdelenguajes:Assembly,CyC++tambinesposiblehacerlamezclade ellosenelmismoproyectolaopcindeC++esthabilitadaenlaversinprofesional(verFigura4).

Figure4SeleccindelLenguajeaUtilizarenelproyecto. Despus de seleccionar el lenguaje del proyecto (o lenguajes si hay ms de uno seleccionado), es necesarioquedefinamoslalocacindelcdigogeneradosivaaestarenmemoriainternaomemoria externaodarlaposibilidaddetrabajarconambas(verFigura5).

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina4 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure5SeleccindeMemoriaInternaoExterna. AhorayaestlistoparacrearelproyectoyhayquepresionarelbotndeFINISHcomosemuestraenla siguienteFigura6.

Figure6Generarelproyectodeacuerdoalasopcionespreviamenteseleccionadas. Laventanadeproyectoconsistedeunalistadearchivospertenecientesalproyecto.Algunosarchivos importantesson:DSP56F805_init.cqueesunarchivoautomticamentegeneradoporelIDEycontiene toda la secuencia de inicializacin de la CPU, DSP56F805_external_mem_linker.cmd que es el archivo que contiene todos los comandos asociados al enlazador describiendo todos los mapas de memoria, MSLC56800.libyFP56800.libsonlaslibrerasparaellenguajeC.EnlaFigura7semuestraunaimagende laventanadelproyecto.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina5 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure7Proyectogeneradoapartirdelasistentedeproyecto. Acontinuacinvemoslosdetallesdelaventanadeproyectoysusfuncionalidades(Figura8)

Figure8Funcionalidadesdelaventanadegerenciamientodeproyecto.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina6 de32 CODEWARRIORyLENGUAJEC Para poder depurar un archivo, el mismo tiene que estar marcado, de lo contrario no se generan los smbolosparaladepuracin.Acontinuacinselistantodaslasextensionesdearchivosquemanejael CW,pormediodelaTabla1. Tabla1:ExtensionesdearchivosquemanejaelCW
FCEFyN UniversidadNacionaldeCrdoba

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina7 de32 CODEWARRIORyLENGUAJEC EDITANDOARCHIVOS Editaremos un archivo para empezar usaremos el main.c y para ello hacemos dobleclick sobre el nombredelarchivoenlaventanadeproyecto,ynosaparecerlaventanadeedicindecdigocomose muestraenlaFigura9.
FCEFyN UniversidadNacionaldeCrdoba

Figure9Funcionalidadesdelaventanadeedicin. Luegodehacerunacompilacincompletaobtenemoslaventanaconloserrores/advertencia/hallazgos con la cual nos va a permitir navegar para encontrar los problemas con una breve descripcin de los mismosconsucdigodeerrorparapoderbuscarsuexplicacinmsdetalladaademscontandoconun botnparaelloytambinbotonesdenavegacincomoseveenlaFigura10.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina8 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure10Ventanadenavegacindeerrores. Si se detectan errores no se generan los archivos binarios. El compilador tambin genera las advertenciasyloshallazgossialgncdigodudosoesencontrado.Sinosedetectaronerroreselarchivo .elfesgeneradoenelsubdirectoriooutputdentrodelaestructuradelproyecto.

CONFIGURANDOPROYECTOS Ahora se vern las ventanas de configuracin de proyecto como se muestran en la Figuras 11 a 21. Comopuedeobservarsehaymuchasopcionesquesetendrnquerevisaryseleccionardeacuerdoala naturaleza y necesidades especificas del proyecto. La principales son Target Settings, M56800 Target, C/C++ Language, C/C++ Warning, M56800 Assembler, ELF Disassembler, M56800 Processor, Global Optimization,M56800Linker,RemoteDebuggingandM56800TargetSettings.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina9 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure11Ventanainicialdeconfiguracindelproyecto

Figure12Ventanadeconfiguracinparaseleccionarsiloquevamosacompilaresunaaplicacinouna librera.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina10 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure13VentanadeconfiguracindellenguajeC

Figure14Ventanadeconfiguracindelosreportesdeadvertencias.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina11 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure15VentanadeconfiguracindelAssembleryloimportanteeslageneracindellistingfile.

Figure16Ventanadeconfiguracindelbinariogenerado.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina12 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure17Ventanadeconfiguracindelprocesadorparahacerusoderecursosespecficos.

Figure18Ventanadeconfiguracindelasoptimizacionesglobales

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina13 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure19Ventanadeconfiguracindelenlazadoractenemosqueactivarsiqueremosgenerarel archivoS19.

Figure20Ventanadeconfiguracindelaconexindeldepuradorosiusaremoselsimulador. ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina14 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure21VentanadeconfiguracindelTarget. DEPURANDOUNPROYECTO Paradepurarunaaplicacinloquetenemosquehaceresapretarel iconodedepuracinenla ventana de proyecto o a travs del men principal PROJECT>DEBUG y se dispara la compilacin y enlacedetodoelproyectoysinohayerroresentoncesseabrelaventanadedepuracincomolaque se muestra en Figura 22, en la cual puede observarse la cantidad de recursos con los cuales se van a interactuarenlatareadedepuracindeldaada.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina15 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure22VentanadeDepuracin Para ver los registros del procesador se selecciona la funcin en el men del programa VIEW >REGISTERS,loquepermitevisualizarlaventanacuyoaspectosemuestranenlaFiguras23y24.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina16 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure23VentanadeRegistrosGenerales

Figure24VentanadeDetalledeRegistrodelConversortienedefinidostodossusbitsysus combinacionesfacilitandoladepuracinyconsultadevaloresalmomentodelaconfiguracindeun perifrico. ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina17 de32 CODEWARRIORyLENGUAJEC ARCHIVODECOMANDOSDEENLACE LosarchivosCMDsonlosarchivosdequeledefinealenlazadorcomoreservarmemoriaparatodaslas piezasdecdigoydatoquecomponenelproyecto. LosarchivosCMDtienensupropiolenguajecompleto,conpalabrasclaves,directivas,yexpresionesque sonusadasparacrearlasespecificacionesparasucdigodesalida.Lasintaxisyestructuradelarchivo deenlaceessimilarqueotrolenguajedeprogramacin. HaytresseccionesimportantesenunarchivoCMD: 1. SegmentosdeMemoria(MemorySegments) 2. SegmentosdeSeccin(SegmentSections) 3. BloquesdeCierre(ClosureBlocks) Un archivo CMD debe contener un segmento de memoria y segmento de secciones, los bloques de cierresonopcionales.LasFunciones,palabrasclaves,directivasycomandosdelosarchivosdeenlacese listanacontinuacin:
.(locationcounter) ADDR ALIGN ALIGNALL FORCE_ACTIVE INCLUDE KEEP_SECTION MEMORY OBJECT REF_INCLUDE SECTIONS SIZEOF SIZEOFW WRITEB WRITEH WRITES WRITEW

FCEFyN UniversidadNacionaldeCrdoba

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina18 de32 CODEWARRIORyLENGUAJEC ParamayordetallereferirsealmanualdeTargetingcorrespondiente. AcontinuacinsemuestraunejemplodecdigocorrespondienteaunarchivoCMDconMemoria Externa:


# ---------------------------------------------------# Metrowerks sample code # linker command file for DSP56805 # using # external # external # internal # mode # EXT

FCEFyN UniversidadNacionaldeCrdoba

pRAM xRAM xRAM (0x30-40 for compiler regs) 3 0

# ---------------------------------------------------# see end of file for additional notes # additional reference: Motorola docs # for this LCF: # interrupt vectors # program code # constants # dynamic data

--> --> --> -->

external external external external

pRAM starting at zero pRAM xRAM xRAM

# stack size is set to 0x1000 for external RAM LCF

# requirements: Mode 3 and EX=0 # note -- there is a mode OB but any Reset or COP Reset # resets the memory map back to Mode 0A.

# DSP56805EVM board settings: # OFF --> jumper JG7 (mode 0 upon exit from reset) # ON --> jumper JG8 (enable external board SRAM)

# CodeWarrior debugger Target option settings # OFF --> "Use Hardware Breakpoints" # ON --> "Debugger sets OMR at Launch" option # note: with above option on, CW debugger sets OMR as # OMR: # 0 --> EX bit (stay in Debug processing state) # 1 --> MA bit # 1 --> MB bit

# DSP56805 # mode 3 (development)

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina19 de32 CODEWARRIORyLENGUAJEC


# EX = 0 MEMORY { .p_interrupts_ext_RAM .p_external_RAM .x_compiler_regs_iRAM .x_internal_RAM # .x_reserved .x_peripherals .x_flash_ROM .x_external_RAM .x_core_regs }

FCEFyN UniversidadNacionaldeCrdoba

(RWX) (RWX) (RW) (RW) (RW) (R) (RW) (RW)

: : : : : : : : :

ORIGIN ORIGIN ORIGIN ORIGIN ORIGIN ORIGIN ORIGIN ORIGIN ORIGIN

= = = = = = = = =

0x0000, 0x0080, 0x0030, 0x0040, 0x0800, 0x0C00, 0x1000, 0x2000, 0xFF80,

LENGTH LENGTH LENGTH LENGTH LENGTH LENGTH LENGTH LENGTH LENGTH

= = = = = = = = =

0x0080 0x0000 0x0010 0x07C0 0x0400 0x0400 0x1000 0xDF80 0x0000

# we ensure the interrupt vector section is not deadstripped here KEEP_SECTION{ interrupt_vectors.text }

# place all executing code & data in external memory SECTIONS { .interrupt_vectors_for_p_ram : { # from 56805_vector.asm * (interrupt_vectors.text) } > .p_interrupts_ext_RAM

.executing_code : { # .text sections * (.text) * (rtlib.text) * (fp_engine.text) * (startup.text) * (user.text) } > .p_external_RAM

.data : { # .data sections * * * * (.const.data) (fp_state.data) (rtlib.data) (.data)

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina20 de32 CODEWARRIORyLENGUAJEC


# .bss sections * (rtlib.bss.lo) __bss_start = .; * (.bss) __bss_end = .; __bss_size = __bss_end - __bss_start;

FCEFyN UniversidadNacionaldeCrdoba

# setup the heap address __heap_addr = .; __heap_size = 0x1000; # larger heap for hostIO __heap_end = __heap_addr + __heap_size; . = __heap_end;

# setup the stack address _min_stack_size = 0x0200; __stack_addr = __heap_end; __stack_end = __stack_addr + _min_stack_size; . = __stack_end;

# set global vars # MSL uses these globals: F_heap_addr = __heap_addr; F_heap_end = __heap_end; F_stack_addr = __stack_addr;

# stationery init code globals F_bss_size F_bss_addr # # # # = __bss_size; = __bss_start;

next not used in this LCF we define anyway so init code will link these can be removed with removal of rom-to-ram copy code in init file

F_data_size = 0x0000; F_data_RAM_addr = 0x0000; F_data_ROM_addr = 0x0000; F_rom_to_ram = 0x0000; # zero is no rom-to-ram copy

} > .x_external_RAM }

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina21 de32 CODEWARRIORyLENGUAJEC


# ------------------------------------------------------# additional notes:

FCEFyN UniversidadNacionaldeCrdoba

# about the reserved sections # for this external RAM only LCF: # # # # p_interrupts_RAM -- reserved in external pRAM memory space reserved for interrupt vectors interrupt vectors must start at address zero interrupt vector space size is 0x80

# x_compiler_regs_iRAM -- reserved in internal xRAM # The compiler uses page 0 address locations 0x30-0x40 # as register variables. See the Target manual for more info.

# # # #

notes: program memory (p memory) (RWX) read/write/execute for pRAM (RX) read/execute for flashed pROM

# data memory (X memory) # (RW) read/write for xRAM # (R) read for data flashed xROM # LENGTH = next start address - previous # LENGTH = 0x0000 means use all remaining memory

# revision history # 011020 R4.1 a.h. first version # 030220 R5.1 a.h. improved comments

LENGUAJECDECW AcontinuacindamosunabrevedescripcindellenguajeCparalafamiliaDSP568XX EllenguajeC++noessoportadoenlafamiliaDSP56800 Lasfuncionesmatemticasenpuntoflotantenoestnsoportadas(ej:Sin,Cos,Sqrt). LafuncinsizeofdellenguajeCnoeslomismoquelafuncinSIZEOFdelenlazador.EnC,la funcin sizeof retorna el nmero de tipos SIZE_T, el cual el compilador declara ser el tipo unsignedlongint.LafuncinsizeofenCretornaelnmerodepalabras,mientrasquelafuncin SIZEOFdelenlazadorretornaelnmerodebytes.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina22 de32 CODEWARRIORyLENGUAJEC FormatosdeNmeros Se explicar como el compilador CW implementa los tipos de numerous enteros y de punto flotante para los procesadores DSP56800 (ver Figuras 25 a 27). Para ms informacin sobre los tipos integer mirarelarchivolimitis.hyparalostiposfloatmirarelarchivofloat.hqueestnexplicadosenelmanual MSLCReferenceManual.
FCEFyN UniversidadNacionaldeCrdoba

Figure25TiposdeDatosEnteros.

Figure26Tiposdedatosdepuntoflotantes ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina23 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure27Tiposdedatosdepuntofijo.

ConvencionesdeLlamadasyEstructuradelaPila ElIDEdeCWparalosDSP56800almacenalosdatosylasllamadasafuncionesdemanerasquepueden serdiferentesaotrasplataformasdedestino. ConvencionesdeLlamadas LosregistrosA,R2,R3,Y0eY1pasanlosparmetrosalasfunciones.Cuandounafuncinesllamada,la lista de parmetros es barrida de izquierda a derecha. Los parmetros son pasados en la siguiente forma: 1. Elprimervalorde32bitsescolocadoenA 2. Losprimerosdosvaloresde16bitssoncolocadosenY0eY1respectivamente 3. Lasprimerasdosdireccionesde16bitssoncolocadasenR2yR3respectivamente. 4. Todoslosparmetrosrestantessonenviadosalapila,comenzandodeparmetromshaciala derecha. Parmetros de mltiplespalabras tienen la palabra menos significativas enviada primeroalapila. 5. Cuandosellamaaunarutinaqueretornaunaestructura,elllamadorpasaunadireccinenR0 elcualespecificardondecopiarlaestructura. LosregistrosA,R0,R2eY0sonusadospararetornarlosresultadosdelasfuncionescomosigue: 1. Valoresde32bitssonretornadosenA. 2. Valoresdedireccionesde16bitssonretornadosenR2. 3. Todoslosvaloresde16bitsquenoseandireccionessonretornadosenY0.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina24 de32 CODEWARRIORyLENGUAJEC RegistrosNoVoltilesyRegistrosVoltiles Los registros novoltiles son registros que pueden ser usados para almacenar valores a travs de las llamadasafunciones.Estosregistrossontambinllamadosregistrosdeguardaatravsdellamadasde funciones(SaveOverCallregistersSOCs). Los registros voltiles son registros que no pueden almacenar valores a travs de las llamadas a funciones.EstosregistrossontambinllamadosnonSOCs. EnlaFigura28semuestraunlistadodelosregistrosvoltilesynovoltiles Figure28Listadodelaclasificacindelosregistrosvoltilesynovoltiles. EstructuradelaPila Laestructuradelapilaesgeneradacomosemuestraacontinuacin.Lapilacreceenordenascendente, significandoestoqueponerundatoenlapila,incrementaladireccindelapuntadordepila:
FCEFyN UniversidadNacionaldeCrdoba

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina25 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

SP Piladelafuncinllamada LocalesdeUsuario LocalesdelCompilador Registrosnovoltiles Registrosdeestados Direccinderetorno Parmetros EspaciodeRegistrosVoltiles Piladelafuncinllamante SPsize Elregistropunterodepila(SP)esunregistrode16bitsusadoimplcitamenteentodaslasinstrucciones de PUSH y POP. La pila de software soporta estructuras programadas, tales como el pasaje de parmetros a subrutinas y variable locales. Si est programando con ambos lenguajes Assembly y lenguajeCdealtoniveluselastcnicasdepilaparamantenercompatibilidadyentendimientoentrelos lenguajes. Veaque esposiblesoportarelpasajedeparmetrosyvariableslocalesauna subrutinaal mismotiempoconelusodelaestructuradelapila. UbicacindelaPiladeUsuario ElcompiladorDSP56800construyeestructurasparallamadasdefuncionesenformajerrquicasusando elapuntadordepila(SP) paralocalizarlaprximalocacinde memoriadisponibleen lacualvamosa ubicarlaestructuradeinformacindelasfuncionesllamadas.Nohayusualmenteregistrosapuntadores para estructuras explicitas. Normalmente el tamao de las estructuras son fijados a tiempo de compilacin.Lacantidadtotaldelespaciodepilarequeridaparalosargumentosdevienen,lasvariables locales,elretornodeinformacindelafuncin,lasposicionesparasalvarregistros(incluyendoaquellos en los pragmas de las funciones de interrupcin) es calculado y la estructura de la pila es ubicada al comienzodelafuncinllamada. Algunas veces se puede necesitar modificar el SP en ejecucin de programa para ubicar espacio de almacenamiento local temporario usando llamadas de assembler en lnea. Esto invalida todos los desplazamientosdelaestructuradelapilaparaserusadoconelSPparaaccederalasvariableslocales, los argumentos en la pila, etc. Con la funcionalidad de ubicacin de la pila de usuario, se puede usar instrucciones de assembler en lnea (con ciertas restricciones) para modificar el SP, mientras mantenemoslaprecisindelasvariableslocales,datostemporariosdelcompiladorydesplazamientos

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina26 de32 CODEWARRIORyLENGUAJEC delosargumentos,ej:esasvariablespuedenaunseraccedidas puestoqueelcompilador conoceque vanamodificarelapuntadordelapila. Lafuncionalidaddeubicacindepiladeusuarioeshabilitadaconlaconfiguracindelsiguientepragma: #pragma check_inline_sp_effects [on|off|reset] El pragma puede ser usado en funciones individuales. Por defecto el pragma est deshabilitado al comienzodelacompilacindecadaarchivoenelproyecto. Lafuncionalidaddeubicacindepiladeusuariopermitesimplementeagregarlneasdeassembleren lneaparamodificarelSPencualquierlugardelafuncin.Estasrestriccionessondecarcterdirecto: 1. El SP debe ser modificado por la misma cantidad en todos los caminos de ida al punto de controldeflujodemezcla. 2. ElSPdebesermodificadoporunacantidadconstante.Estoesunmododedireccionamientotal como(SP)+NyescriturasdirectassobreelSPnosonmanejadas. 3. ElalineamientodelSPdebesermantenidoapropiadamente. 4. No debe sobreescribir la ubicacin de la pila del compilador por el decremento del SP en el espaciodelapilaubicadaporelcompilador. Elpuntounoesrequeridocuandosepiensaconinstruccionesdeltipoifthenelse.Siunaramadel puntodedecisinmodificaelSPenunsololadoylasotrasramaslomodificandeotramanera,luegoel valor de SP depende del tiempo de ejecucin y el compilador no es capaz de determinar donde las variables bsicas estn ubicadas en tiempo de ejecucin. Para prevenir esto a que suceda la funcionalidad de ubicacin de pila de usuario cruza el grafico de control de flujo, grabando las modificaciones del SP por las instrucciones de assembler en lnea a travs de todos los caminos del programa.Estoluegocontrolatodoslospuntosdemezclaparaasegurarsequelasmodificacionesque se hicieron sobre el SP son consistentes en cada rama, convergiendo al punto de mezcla. Si esto no sucedeunaadvertenciaesemitidaanunciandolainconsistenciaentrelasramas. UnavezqueelcompiladordeterminaquelasmodificacionesenlneadelSPsonconsistentesenelgrafo decontroldeflujo,losdesplazamientosdelSPusadosparareferenciarlasvariableslocales,argumentos defuncionesovalorestemporalessonreparadosalconocerlasmodificacionesenlneadelSP.Advierta quepuedelibrementeubicarespaciolocalparaalmacenamientoenlapila: 1. SepuedemodificartantocomosequieraelSPalolargodetodaslasramasalpuntodecontrol demezcladeflujo. 2. El SP est alineado correctamente. El SP debe ser modificado por una cantidad que el compiladorpuedadeterminarentiempodecompilacin. ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC
FCEFyN UniversidadNacionaldeCrdoba

Pgina27 de32 CODEWARRIORyLENGUAJEC Unnuevopragmaesdefinido: #pragma check_inline_sp_effects [on|off|reset] generarunaadvertenciasielusuariointroduceassemblerenlneaquemodificanelSPunacantidad dependientedeltiempodeejecucin.Sielpragmanoesespecificado,entonceslosdesplazamientosde la pila usados para acceder a las variables bases de la pila sern incorrectos. Es responsabilidad el usuario habilitar #pragma check_inline_sp_effects, si se desea modificar el SP con assemblerenlneayaccederavariableslocalesenlapila.Tengaencuentaqueestepragmanotiene efectoenfuncionesaniveldeassembleroarchivosdeassemblerpuro(.ASM). Engeneral,assemblerenlneapuedeserusadoparacreargrafosdeflujosarbitrariosynotodosellos puedenserdetectadosporelcompilador. Porejemplo:
REP #3 LEA (SP)+

FCEFyN UniversidadNacionaldeCrdoba

EsteejemplomodificaraelSPenunvalorde3,peroelcompiladorverasolamentelamodificacinde unsolovalor.Otroscasoscomoestospuedensercreadosporelusuariousandosaltosoderivaciones conassemblerenlnea.Estassonconstruccionespeligrosasynosondetectadasporelcompilador.Enel casodequeelSPesmodificadoporunacantidaddependientedeltiempodeejecucin,unaadvertencia esemitida. EnlaFigura29semuestraelcdigodemodificacinpermitaporelSPusandoassemblerenlnea. Figure29ModificacinpermitidadelSPusandoassemblerenlnea.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina28 de32 CODEWARRIORyLENGUAJEC En este caso funcionar porque no hay puntos de control de flujo de mezcla. El SP es modificado consistentementealolargodetodoslasramasdecomienzoafinaldelasfuncionesyespropiamente alineado.
FCEFyN UniversidadNacionaldeCrdoba

Figure30ModificacinNOpermitidadelSPusandoassemblerenlnea. EnelejemplodelaFigura30,segenerarelsiguientemensajedeadvertenciaporquelaentradadelSP almacroExitCriticalesdiferentedependiendodelaramaquetomeelif.Porlotantoelaccesoalas variablesa,bycpuedennoserlascorrectas:


Warning : Inconsistent inline assembly modification of SP in this function. M56800_main.c line 29 ExitCritical();

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina29 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure31ModificacindelSPporunacantidaddependientedeltiempodeejecucin. ElejemplodelaFigura31,generarelsiguientemensajedeadvertencia:
Warning : Cannot determine SP modification value at compile time M56800_main.c line 20 EnterCritical();

Este ejemplo es invlido puesto que el SP es modificado por una cantidad dependiente en tiempo de ejecucin. Si todas las modificaciones de assembler en lnea al SP a lo largo de todas las ramas son igualmente implementadas a la salida de la funcin, no es necesario explcitamente desalojar el espacio incrementado de la pila. El compilador limpiar las lneas extras de assembler en la pila automticamentealfinaldelafuncin. El ejemplo de la Figura 32, no necesita llamar al macro ExitCritical porque el compilador automticamentelimpiarlaslneasextrasdeassemblerenlapila.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina30 de32 CODEWARRIORyLENGUAJEC


FCEFyN UniversidadNacionaldeCrdoba

Figure32Borradoautomticodelassemblerenlneaenlapila SeccionesGeneradasporelCompilador ElcompiladorcreaciertasseccionespordefectocuandocompilaarchivosfuentesdeC.Estassecciones pordefectosontodasmanejadasporloscomandosdedefaultenelarchivoCMDysonlassiguientes: .text (elcompiladorcolocaelcdigoejecutableacpordefecto)

.data (elcompiladorcolocalosdatosinicializadosacpordefecto) .bss (elcompiladorcolocalosdatosnoinicializadosacpordefecto)

Nota:Estasseccionessonseccionesgeneradasporelcompiladorpordefecto.Otrasseccionesdefinidas porelusuariopuedensergeneradasatravsdelusode:
#pragma define_section

Si el proyecto tiene la opcin habilitada write constant data to .rodata en M56800 Processor de los TargetSettings,entonceselcompiladorgenerarlaseccin.rodataparadatosconstantes.Estaopcin essobreescritaporelusodethe#pragmause_rodata.

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina31 de32 CODEWARRIORyLENGUAJEC Nota:Laseccin.rodatanoesmanejadopordefaultporelarchivoCMD.Porlotantosiud.necesitael usodeestaseccindebecolocarladentrodelarchivoCMDdentrodeunadelasseccionesdelmapade memoria(verFigura33). Pordefectolosdatosinicializadosacerosonpuestosenlaseccin.bssporelcompilador.Estoeshecho parareducireltamaodecargadelaaplicacin.Eltamaodecargaesreducidoporqueenvezcargarel depuradorunasecuenciadecerosenlaseccin.data(laseccincargable),elcompiladorsimplemente muevelosdatosinicializadosaceroalaseccin.bss(seccinnocargable),lacualesinicializadaacero por el cdigo de arranque. Este comportamiento puede ser sobreescrito por el uso del #pragma explicit_zero_dataoporelusode#pragmause_rodata,elcualponetodoslosdatosconstantesenuna seccinespecial.rodata.
FCEFyN UniversidadNacionaldeCrdoba

Figure33MapadeMemoria ConfiguracinOMR Elregistrodeoperacindemodo(OMR)espartedelcontroladordeprogramadelncleodelDSP56800. Esteregistroeselresponsabledelamayoradelosmodosencomoelncleoopera. Nota:ParalosdetallesgeneralesdelOMPverelDSP56800FamilyManual.Paralosdetallesespecficos del registro ver el manual del chip por lo general el DSP56800 User Manual. El compilador CW tiene ciertos requerimientos sobre el valor contenido dentro del registro y el modo en que el ncleo del DSP56800opera.EstosrequerimientosestnexpresadosenlaFigura34.

Figure34BitsderequerimientossobreelOMR

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC

Pgina32 de32 CODEWARRIORyLENGUAJEC BIBLIOGRAFIA DSP56800FamilyManual.16BitDigitalSignalControllers.DSP56800FMRev.3.111/2005.Freescale. DSP56800UserManual.16BitHybridControllers.DSP56F8017UMRev.607/2004.Freescale. CodeWarrior Development Studio for Freescale 56800/E Hybrid Controllers: MC56F83xx/DSP5685x FamilyTargetingManual.Freescale. MSLCReference10.0.Freescale.
FCEFyN UniversidadNacionaldeCrdoba

ProcesamientoDigitaldeSealesFCEFyNUNCCODEWARRIORyLENGUAJEC