kldsp: compilador de c para procesamiento de programando ... · kcc2:c, kcc3:c, y kcc4:c. para...

5
KLDSP: Compilador de C Para Procesamiento de Se˜ nales Ac´ usticas Dr. Maximino Pe˜ na Guerrero 1 Ing. Jos´ e de Jes´ us Negrete Redondo Dr. Pablo Liza Paulin Reporte Final Registro: 20050293 Febrero, 2006 RESUMEN En este art´ ıculo se presenta el reporte final del proyecto KLDSP: Compilador de C Para Procesamiento de Se˜ nales Ac´ usticas, umero de registro 20050293 (periodo 2005), que consiste en el desarrollo de un compilador de C para la familia Mo- torola de procesadores de se˜ nales digitales 568000, y de una manera espec´ ıfica para el DSP MC56F8323. 1. Introducci´on Cuando empezaron a aparecer los primeros microprocesadores y los primeros procesadores de se˜ nales digitales DSPs (Digital Signal Pro- cessors), los ingenieros ten´ ıan que programarlos siguiendo un repertorio de instrucciones que co- rresponder´ ıan a un tipo de procesador o micro- procesador espec´ ıfico. Este m´ etodo de programacai´on necesitar´ ıa de un cierto tiempo determinado para aprender nue- vamente a utilizar aquellas instrucciones que aparecieran con un nuevo dispositivo. Era evi- dente que el aprendizaje y experiencia en la uti- lizaci´on de un nuevo tipo de repertorio de instruc- ciones no podr´ ıa servir a otro dispositivo (micro- procesador, microcontrolador, o procesador) que posteriormente pudiese aparecer nuevamente en 1 kcc.tex el mercado. Programando estos dispositivos con el lenguage C, de Brian Kernighan y Denis Ritchie, el problema de la obsolecencia de las instruc- ciones hardware de estos dispositivos quedar´ ıa elmininado en su mayor parte. Esto se debe que los lenguajes de programaci´on de alto nivel son independientes del hardware que conforman los dispositivos de computaci´on. Las subrutinas y funciones que definen los al- goritmos de programaci´on y que resuelven cier- tos tipos de problemas en la programaci´on de computadoras pueden volver a utilizarse. T´ ıpi- camente los programadores crean una colecci´on o bibliotecas de funciones programadas con al- goritmos que resuelven los problemas m´as co- munes, principalmente los de entrada y salida de datos, por ejemplo, getchar(), putchar(), sqrt(), exp(), log(), entre muchas otras fun- ciones matem´aticas y de procesamiento de cade- nas de caracteres m´as complejas como printf() o scanf(). Es claro que estas funciones, una vez pro- gramadas, nunca m´as se vuelven a reprogra- mar: !solo se utilizan!. Esta es la principal ven- taja que se tiene al programar con C nuestros microprocesadores y otros dispositivos digitales. Podemos reutilizar el c´odigo que hemos escrito ahorr´andonos una gran cantidad de tiempo que se invierte en el desarrollo de nuestros aparatos electr´onico-digitales. El prop´osito de nuestro proyecto es desarrollar un compilador del lenguaje C que sea de nosotros (academia de ac´ ustica), de tal forma que po- damos realizar cualquier modificaci´on al c´odigo fuente con el fin de adaptarlo a las nuevas necesi- dades de nuestro laboratorio. A este compilador lo llamaremos simplemente kcc. Pensamos que este compilador nos ayudar´ a a resolver muchos de nuestros problemas relacionados, por ejemplo, con el dise˜ no de instrumentos de medici´on, sis- temas de control de ruido, generadores de fun- ciones de audio, analizadores de espectro sonoro, entre muchos otros. 1

Upload: others

Post on 17-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: KLDSP: Compilador de C Para Procesamiento de Programando ... · kcc2:c, kcc3:c, y kcc4:c. Para compilar los cuatro archivos de nuestro compilador se hizo lo siguiente: C:\>gcc -o

KLDSP: Compilador de CPara Procesamiento de

Senales Acusticas

Dr. Maximino Pena Guerrero1

Ing. Jose de Jesus Negrete RedondoDr. Pablo Liza Paulin

Reporte Final

Registro: 20050293

Febrero, 2006

RESUMEN

En este artıculo se presenta el reportefinal del proyecto KLDSP: Compilador deC Para Procesamiento de Senales Acusticas,numero de registro 20050293 (periodo2005), que consiste en el desarrollo deun compilador de C para la familia Mo-torola de procesadores de senales digitales568000, y de una manera especıfica para elDSP MC56F8323.

1. Introduccion

Cuando empezaron a aparecer los primerosmicroprocesadores y los primeros procesadoresde senales digitales DSPs (Digital Signal Pro-cessors), los ingenieros tenıan que programarlossiguiendo un repertorio de instrucciones que co-rresponderıan a un tipo de procesador o micro-procesador especıfico.

Este metodo de programacaion necesitarıa deun cierto tiempo determinado para aprender nue-vamente a utilizar aquellas instrucciones queaparecieran con un nuevo dispositivo. Era evi-dente que el aprendizaje y experiencia en la uti-lizacion de un nuevo tipo de repertorio de instruc-ciones no podrıa servir a otro dispositivo (micro-procesador, microcontrolador, o procesador) queposteriormente pudiese aparecer nuevamente en

1kcc.tex

el mercado.

Programando estos dispositivos con ellenguage C, de Brian Kernighan y Denis Ritchie,el problema de la obsolecencia de las instruc-ciones hardware de estos dispositivos quedarıaelmininado en su mayor parte. Esto se debe quelos lenguajes de programacion de alto nivel sonindependientes del hardware que conforman losdispositivos de computacion.

Las subrutinas y funciones que definen los al-goritmos de programacion y que resuelven cier-tos tipos de problemas en la programacion decomputadoras pueden volver a utilizarse. Tıpi-camente los programadores crean una colecciono bibliotecas de funciones programadas con al-goritmos que resuelven los problemas mas co-munes, principalmente los de entrada y salidade datos, por ejemplo, getchar(), putchar(),sqrt(), exp(), log(), entre muchas otras fun-ciones matematicas y de procesamiento de cade-nas de caracteres mas complejas como printf()

o scanf().

Es claro que estas funciones, una vez pro-gramadas, nunca mas se vuelven a reprogra-mar: !solo se utilizan!. Esta es la principal ven-taja que se tiene al programar con C nuestrosmicroprocesadores y otros dispositivos digitales.Podemos reutilizar el codigo que hemos escritoahorrandonos una gran cantidad de tiempo quese invierte en el desarrollo de nuestros aparatoselectronico-digitales.

El proposito de nuestro proyecto es desarrollarun compilador del lenguaje C que sea de nosotros(academia de acustica), de tal forma que po-damos realizar cualquier modificacion al codigofuente con el fin de adaptarlo a las nuevas necesi-dades de nuestro laboratorio. A este compiladorlo llamaremos simplemente kcc. Pensamos queeste compilador nos ayudara a resolver muchosde nuestros problemas relacionados, por ejemplo,con el diseno de instrumentos de medicion, sis-temas de control de ruido, generadores de fun-ciones de audio, analizadores de espectro sonoro,entre muchos otros.

1

Page 2: KLDSP: Compilador de C Para Procesamiento de Programando ... · kcc2:c, kcc3:c, y kcc4:c. Para compilar los cuatro archivos de nuestro compilador se hizo lo siguiente: C:\>gcc -o

2. Filosofıa de kcc

Nuestro compilador kcc lo hemos disenado conbase en otros compiladores de codigo abierto queexisten en el mundo academico, y que ademasnos han proporcionado las bases para adaptarloa nuestras necesidades.

Uno de estos programas de conversion de codi-go de lenguaje humano a lenguaje que solo en-tienden las maquinas digitales, y que hemos uti-lizado con mas frecuencia, ha sido un sencillocompilador que James E. Henrdix dio a conocercomo Small − C a principio de los 80’s [8] [9].Hoy en dıa este programa todavıa genera codigoen ensamblador para uno de los procesadores deIntel mas famosos, el 8086.

Poco tiempo despues, a finales de los 90’s y alprincipio del segundo milenio, aparecio una ver-sion para dos de los microprocesadores de Mo-torola mas utilizados en el control de dispositivosno tan complejos, el HC11 y el HC12.

Recientemente en marzo del 2004 Peter Graydio a conocer una version mas sofisticada delSmall-C original, pero con el proposito de ge-nerar codigo en ensamblador para el procesadorde senales digitales Motorola MC56F8323 [6] [7].Este ultimo nos ha sido de gran utilidad, puessiguiendo la misma filosofıa, iniciamos algunasadaptaciones a nuestro desarrollo de kcc.

Cabe mencionar que se han hecho otros de-sarrollos importantes, en los cuales hemos basa-do nuestro trabajo, como por ejemplo el compi-lador lcc que desarrollaron Fraser Christopher yDavid Handson en los laboratorios de la AT&TBell (cuna del primer C) y en la universidad dePrinceton; lcc es un compilador cruzado que gen-era codigo para los procesadores MIPS, R3000(que normalmente tienen algunas estaciones detrabajo), y el procesador Intel 386 [4].

Otro de los compiladores en que hemos basa-do nuestro trabajo es el compilador gcc, el cualforma parte de los proyectos de software abier-to GNU (GNU Not UNIX). Gcc tiene una op-cion que permite generar codigo para nuestroprocesador de senales DSP MC56F8323, tema

del presente proyecto de investigacion. Nosotrosaprovechamos parte de la filosofıa gcc en el de-sarrollo de nuestro compilador kcc.

3. Desarrollo de KCC

Nuestro compilador kcc esta estructuradoen cuatro bloques principales: un analizadorsintactico, un analizador lexico, un analizadorsemantico, y un generador de codigo.

De acuerdo con dicha estructura, el analizadorsintactico es un programa que lee caracter porcaracter que tiene una lınea de caracteres den-tro de un archivo, o bien, los caracteres que seescriben en la consola. Estos caracteres son sep-arados para formar tokens. Un token es una se-cuencia caracteres que constituyen las plabrasreservadas que forman el lenguaje (if , then, else,main, {, etc.) En la Figura (1) se muestra unaprueba de los primeros programaas que hicimospara separar los tokens que constituyen un pro-grama fuente de C.

Figura 1: Prueba de seaparacion de tokens de unprograma en C

Por otra parte, el analizador lexico consiste deun conjunto de funciones las cuales verifican queuna secuencia de tokens se encuentren bien or-denadas de acuerdo con la definicion original deel lenguaje. Ahora bien, el analizador semanticoconsiste tambien en un conjunto de funciones las

2

Page 3: KLDSP: Compilador de C Para Procesamiento de Programando ... · kcc2:c, kcc3:c, y kcc4:c. Para compilar los cuatro archivos de nuestro compilador se hizo lo siguiente: C:\>gcc -o

cuales verifican que una secuencia de tokens ten-gan un sentido correcto de acuerdo con la solu-cion de un problema. Por ultimo, el generador decodigo, como su nombre lo indica, produce unasecuencia de instrucciones de bajo nivel (lenguajeensamblador) que corresponden a una secuenciade instrucciones de alto nivel (nuestro lenguajeC) que resuelven un problema determinado.

4. Pruebas y resultados

Nuestro compilador kcc lo hemos dividido encuatro archivos que contienen codigo fuente delos cuatro bloques logicos principales: kcc1.c,kcc2.c, kcc3.c, y kcc4.c.

Para compilar los cuatro archivos de nuestrocompilador se hizo lo siguiente:

C:\>gcc -o kcc.exe kcc1.c kcc2.c kcc3.c kcc4.c

Donde gcc es un compilador C++ (MinGW paraWin32, gnu para Linux) abierto y disponible enla Red, con el cual compilamos nuestro sistemakcc. La anterior secuencia de lınea de comandosejecutara el compilador gcc, el cual pruducira unprograma ejecutable llamado kcc.exe. Este ulti-mo es nuestro compilador ejecutable, objeto dela discucion de este trabajo. A continuacion semuestran algunos resultados de la ejecucion denuestro compilador kcc.

Figura 2: Prueba de arranque del compilador kcc

Observese en la Figura (2) una salida de datoscuando se ejecuta kcc. Se ve como produce unasalida de instrucciones en ensamblador de acuer-do con lo que se esta escribiendo en ese momentode una manera interactiva. Esto es ası cuando seescribe

C:\>kcc<return>

Figura 3: Codigo fuente (recuadro inferior dere-cho) y su compilacion (recuadros a la izquierda)

Por otra parte, en la Figura (3), en el recuadroinferior derecho, se muestra un codigo fuente sen-cillo de un programa en C. Despues de compilarlose puede ver, en esta misma figura, el resultado dela compilacion, la cual consiste de una secuenciade instrucciones en lenguaje ensamblador parael procesador de senales MC56F8323. Este codi-go sera posteriormente ensamblado con el fin deproducir el codigo binario que sera colocado enla memoria flash del DSP.

Con respecto a las funciones de biblioteca, es-tas fueron compiladas con nuestro compiladorkcc, puesto que estas mismas las hemos escritoen el lenguaje que hemos descrito en el pre-sente proyecto. Son funciones que tienen quever con la entrada y salida del DSP como sonel procesamiento de cadenas, algunas funcionesde conversion de codigo, funciones de calculo

3

Page 4: KLDSP: Compilador de C Para Procesamiento de Programando ... · kcc2:c, kcc3:c, y kcc4:c. Para compilar los cuatro archivos de nuestro compilador se hizo lo siguiente: C:\>gcc -o

matematico como sin(x), cos(x), y algunas otrasque tienen que ver con el detalle de hardware co-mo son las interrupciones y el timer.

5. Conclusiones

Hoy en dıa la programacion de microcontro-ladores, microprocesadores, procesadores RISC,y procesadores especializados como son los proce-sadores de senales digitales, se programan con unlenguaje de alto nivel para evitar lo mas posiblela obsolecencia de hardware. Es decir, el codi-go que se ha escrito para un tipo de procesadorsera reutilizado, ahorrando ası una gran canti-dad de tiempo invertido en la programacion. Eneste proyecto hemos desarrollado un compiladorque llamamos kcc, el cual nos permite progra-mar nuestros dispositivos digitales, escribiendouna vez las funciones mas relevantes. La venta-ja que se presenta es que nos ahorra una grancantidad de tiempo en el desarrollo de nuestrosaparatos electronicos. Otra de las ventajas es quepodemos modificar el codigo fuente de nuestrocompilador con el fin de adaptarlo a los nuevosdispositivos digitales que vendran en el futuro.

Agradecimientos

Agradecemos el apoyo que nos han propor-cionado las autoridades del Instituto PolitecnicoNacional,la Comision de Operacion y Fomento deActividades Academicas, la Seccion de Estudiosde Posgrado e Investigacion. De la misma for-ma agradecemos a todos nuestros alumnos quehan escrito muchas de las funciones primitivaslas cuales sirvieron para completar nuestros ob-jetivos.

Referencias

[1] Aho Alfred V, Ravi Sethi, Jeffrey D. Ull-man, Compilers: Principles, Technicues, and

Tools, Addison-Wesley, 1986. Version en Es-panol 1990, 820 pgs. Es un clasico para eldiseno de compiladores.

[2] Appel Andrew W., Modern Compiler Imple-mantation in C, Cambridge University Press,1998. 544 pgs. Describe el diseno del compi-lador Tiger, un dielecto de Algol.

[3] Fisher Charles N., Richard J. LeBlancJr., Crafting a Compiler With C, Ben-jamin/Cummings, 1991. 812 pgs. Presenta al-goritmos practicos de un compilador en pseu-docodigo.

[4] Fraser Christopher, David Handson, A Retar-getable C Compiler: Design and Implemen-tation, Benjamin/Cummings, 1991. 564 pgs.Discuten el diseno del compilador lcc de loslaboratorios AT&T Bell, y la universidad dePrinceton, el cual genera codigo para MIPSR3000 e Intel 386.

[5] Gries David, Compiler Construcction forDigital Computers, Wiley International Edi-tion, 1971. 493 pgs. Es un clasico para eldiseno de compiladores.

[6] Gray Peter, “Porting Small-C”, Dr. Dobb’sJournal, March 2004, pp: 78-81.

[7] Gray Peter, “Robots & Small-C”, Dr. Dobb’sJournal, October 2004, pp: 57-60.

[8] Hendrix James E., The Small-C Handbook,Prentice Hall, 1984. 256 pgs. Describe muchasde las caracterısticas del diseno de Small-C,y contien su listado completo.

[9] Hendrix James E., A Small-C Compiler:Language, Usage, Thery, and Design, M&TBooks, 1988. 598 pgs. Es el clasico paraaprender el diseno de compiladores de Cpara microprocesadores, microcontroladoresDSPs, entre otros.

4

Page 5: KLDSP: Compilador de C Para Procesamiento de Programando ... · kcc2:c, kcc3:c, y kcc4:c. Para compilar los cuatro archivos de nuestro compilador se hizo lo siguiente: C:\>gcc -o

[10] Hollub Allen I., Compiler Design in C,Prentice-Hall, 1990. 924 pgs. Utiliza Yacc yLeX para Llamas occs.

[11] Legarreta-Garciadiego Luis, Compiladores,Fundacion Arturo Rosenblueth, 1980. Unode los primeros apuntes en espanol sobre eldiseno de compiladores en Mexico.

[12] Llorca Sanchis F. J., C. Galan Pascual,Compiladores: Teorıa y Construccion, Paran-info 1988, segunda edicion, Madrid, 624 pgs.Uno de los primeros libros para el diseno decompiladores cuando estuvo de moda Pascal

[13] Schildt Herbert, C. Manual de Referencia,Osborne McGraw-Hill, 2001, 709 pgs. En elcapıtulo 29 describe un pequeno interprete deC.

Acerca de los Autores

Dr. Maximino Pena Guerrero: Doctor en Cien-cias en Ingenierıa electtrica (CINVESTAV 2005);Maestro en Ciencias en Ingenierıa Electrica(CINVESTAV-IPN 1987); Ingeniero en Comuni-caciones y Electronica (ESIME-IPN 1983); Sis-tema Nacional de Investigadores (1987-1990);Profesor investigador del Instituto PolitecnicoNacional desde 1981.

Ing. Jose de Jesus Negrete Redondo; Ingenieroen Comunicaciones y Electronica; profesor inves-

tigador del Instituto Politecnico Nacional desde1972.

Dr. Pablo Roberto Lizana Paulin; Doctor enCiencias de la Educacion; Ingeniero en Comuni-caciones y electronica; profesor investigador delInstituto Politecnico Nacional desde 1972.

5