INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA. Unidad Zacatenco TESIS QUE PARA OBTENER EL TÍTULO DE:

Tamaño: px
Comenzar la demostración a partir de la página:

Download "INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA. Unidad Zacatenco TESIS QUE PARA OBTENER EL TÍTULO DE:"

Transcripción

1 INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA Unidad Zacatenco Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre TESIS QUE PARA OBTENER EL TÍTULO DE: INGENIERO EN COMUNICACIONES Y ELECTRÓNICA ASESORES: P R E S E N T A: Humberto Aparicio Osorio M. en C. Roberto Galicia Galicia México D.F. 2012

2 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre 2

3 Agradecimientos A todos los que de una u otra forma demeritan el prestigio del politécnico, por su mediocridad, falta de ética y moral, ya que ellos nos dan la difícil pero enaltecedora tarea, de regresar a la institución a sus tiempos de gloria. A los grandes pensadores de la historia, que con sus valientes desafíos al orden prestablecido, han demostrado que el conocimiento, la ciencia y la tecnología, pueden y deben estar al alcance de todos. A aquellos con sueños de democracia y libertad, que constantemente luchan por ideales que parecieran inalcanzables, pero día con día se ven reflejados en la realidad. A todas esas grandes personas, que abandonaron el maravilloso camino del aprendizaje, por culpa de una sociedad desigual, de las cuales aprendí grandes lecciones de vida. A él, a ella y a todos ellos que han estado junto a mi en el transcurrir del tiempo, que me ayudaron a descubrir mis pasiones, superar mis miedos y a dejar de soñar, para poder comenzar a construir. 3

4 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Tabla De Contenidos Objetivo General... 8 Objetivos Específicos... 8 Introducción... 9 Justificación Antecedentes Estado del arte Capítulo 1.-Nociones Teóricas Especificación de un lenguaje de programación Componentes lexicógrafos Sintaxis Convenciones gramaticales Recomendaciones de implementación Estandarización Los traductores Ensambladores Compiladores Intérpretes Etapas de un traductor Análisis léxico Análisis sintáctico Análisis semántico Optimización Generación de código Optimización de código objetivo Capítulo 2.-Descripción del trabajo Tipo de Proyecto Arquitectura Actores en los casos de uso Interfaz gráfica de usuario Módulo de proyectos Módulo de edición Módulo de mensajes Ensamblador Sitio Web Entorno de implementación Lenguaje de programación Biblioteca gráfica Base de datos Especificación a implementar Componentes léxicos Sintaxis Generación de código Capítulo 3.-Desarrollo Analizador léxico

5 Diseño del algoritmo Principios de implementación El archivo de instrucciones Analizador sintáctico Estructuras involucradas La clase instrucción Análisis sintáctico descendente recursivo Principios de implementación Generador de código Algoritmo de generación Principios de implementación Capítulo 4.-Pruebas Análisis léxico Análisis sintáctico Generación de código Resultados Pasos para crear un proyecto Comparativa de tamaño Comparativa de costos y limitaciones Conclusiones Trabajos futuros Bibliografía A. Requerimientos de la aplicación B. Manual de usuario de la aplicación C. Código del analizador léxico D. Código de la clase Instruction E. Código del analizador sintáctico F. Código del generador de código

6 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Índice de figuras Figura 2.1: Arquitectura de la aplicación...42 Figura 2.2: Composición de la interfaz gráfica...44 Figura 2.3: Casos de uso módulo de proyectos...46 Figura 2.4: Caso de uso módulo de edición...48 Figura 2.5: Casos de uso módulo de mensajes...49 Figura 2.6: Composición del ensamblador...51 Figura 2.7: Casos de uso ensamblador...53 Figura 2.8: Casos de uso sitio web...54 Figura 3.1: Autómata finito determinista para el analizador léxico...67 Figura 3.2: Tokens entregados por el autómata finito determinista...68 Figura 3.3: Algoritmo para diferenciar entre un token registro y etiqueta...69 Figura 3.4: Algoritmo para la validación de instrucciones...70 Figura 3.5: Algoritmo para el análisis léxico...71 Figura 3.6: Diagrama de clases para el analizador léxico...73 Figura 3.7: Contenido del archivo de instrucción Instruction.is para los microcontroladores MSP Figura 3.8: Ejemplo de sentencias recursivas en C/C Figura 3.9: Estructura general del lenguaje ensamblador para los microcontroladores MSP Figura 3.10: Tipos de renglones...82 Figura 3.11: Tipos de instrucciones...83 Figura 3.12: Modos de direccionamiento para operandos destino...84 Figura 3.13: Modos de direccionamiento complementarios para operandos fuente Figura 3.14: Diagrama de UML para la clase Instruction...93 Figura 3.15: Algoritmo para implementar la gramática Programa Figura 3.16: Algoritmo para implementar la gramática Renglón Figura 3.17: Algoritmo para implementar la gramática Con_Etiqueta Figura 3.18: Algoritmo para implementar la gramática Instrucción Figura 3.19: Algoritmo para la función Format_ Figura 3.20: Algoritmo para la función Format_ Figura 3.21: Algoritmo para la función Format_ Figura 3.22: Algoritmo para la gramática Modo_ Figura 3.23: Algoritmo para la gramática Modo_ Figura 3.24: Algoritmo para la gramática RegMd Figura 3.25: Algoritmo para la gramática IndxMd Figura 3.26: Algoritmo para la gramática SymMd Figura 3.27: Algoritmo para la gramática AbsMd Figura 3.28: Algoritmo para la gramática IndMd Figura 3.29: Algoritmo para la gramática ImdMd Figura 3.30: Diagrama UML para la clase Parser Figura 3.31: Algoritmo para la generación de código en diversos formatos Figura 3.32: Diagrama UML para la clase Encode Figura 4.1: Características de los equipos

7 Objetivo General Figura 4.2: Algoritmo para probar el analizador léxico Figura 4.3: Algoritmo para la prueba de análisis sintáctico Figura 4.4: Algoritmo para la prueba del generador de código Figura 4.5: Resultados del análisis léxico Figura 4.6: Resultados del análisis sintáctico Figura 4.7: Resultados de la generación de código Figura 4.8: Comparativa del tamaño de almacenamiento Figura 4.9: Análisis de los precios y limitaciones de diversos entornos Figura B.1: Pantalla de inicio de la aplicación Figura B.2: Icono para la creación de un nuevo proyecto Figura B.3: Dialogo para la creación de un proyecto nuevo Figura B.4: Área de proyectos, con el proyecto recién creado y sus archivos asociados

8 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Objetivo General Desarrollar un traductor del lenguaje ensamblador a código de máquina, para microcontroladores MSP430 de Texas Instrumens. Objetivos Específicos Analizar el proceso de traducción del lenguaje ensamblador a código de máquina. Implementar las gramáticas preestablecidas para obtener un traductor, así como las utilidades necesarias. Implementar una interfaz gráfica de usuario la cual sea amigable, así como fácil de utilizar y de modificar. 8

9 Introducción Introducción En este trabajo, se presenta el diseño e implementación de un programa, capaz de traducir código ensamblador de los microcontroladores MSP430 a código de máquina, el cual mediante herramientas externas, puede ser grabado a la memoria de los dispositivos. En el capítulo 1, se establecen las nociones teóricas necesarias para comprender el proceso de traducción entre lenguajes de programación, tanto de alto como de bajo nivel. La descripción del trabajo se encuentra en el capítulo 2, en el se detallan todos los elementos que conformaran la aplicación, así como la interacción entre ellos. También se enuncian las herramientas de software libre utilizadas en el desarrollo de la aplicación. El desarrollo se encuentra en el capítulo 3, el cual establece los algoritmos, estructuras de datos y paradigmas utilizados para realizar la traducción. El capítulo 4 contiene una serie de pruebas para cada etapa de traducción implementada y de manera adicional contiene una serie de comparaciones realizadas con otras herramientas, dejando para el capitulo 5 las conclusiones, así como los trabajos futuros. 9

10 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Justificación Se puede encontrar en Internet muchas herramientas de libre uso, como Mozilla Firefox, Subversion, Apache HTTP Server, MySQL, PHP, Linux Kernel, OpenOffice, PuTTY, GIMP, GNU Compiler Collection, Python, LaTeX y muchos más, las cuales ciertamente han cambiado el rumbo de la historia. Algunos de sus principales representantes, como Richard Stallman, Rasmus Leodorf, Linus Toolvards, Donald Knuth; han dotado a la humanidad de libertad, para poder elegir entre pagar software privativo o disfrutar de las enormes ventajas del software libre. Es así como se decide desarrollar una herramienta de código abierto, en la cual los usuarios no encuentren limitaciones económicas, para poder utilizarla, donde no existan versiones de prueba, versiones reducidas y aun más importante, que el usuario no tenga que infringir las leyes para poder tener acceso a dicha herramienta, debido a su alto costo. Las herramientas que existen en el mercado para el desarrollo de sistemas, basados en la arquitectura de Texas Instruments MSP430, son de cierta forma reducidas, ya que básicamente son tres las herramientas más difundidas por los diseñadores. 10

11 Antecedentes Antecedentes Desde que John Von Neumann propuso un modelo para la fabricación de computadoras [9], la división entre el hardware y software se ha hecho cada vez más evidente. Esto debido a que Von Neumann, se dio cuenta de la gran dificultad que implicaba crear o alambrar una máquina diferente para resolver un problema. A partir de ello, Von Neumann desarrollo una computadora un tanto genérica, la cual podía tomar instrucciones almacenadas en la memoria y ejecutarlas en forma secuencial, a dicho conjunto de instrucciones almacenadas en memoria, se le conoce como programa y a la acción de elegir las instrucciones adecuadas para resolver un problema, se le conoce como programar. Cuando los primeros computadores con arquitectura Von Neumann fueron concebidos, eran programados directamente con unos y ceros, ya que así estaba conformado el conjunto de instrucciones (conocido como código de máquina) y solo de esta forma podían ser reconocidas por la lógica de la computadora. Los inconvenientes de programar de esta forma, eran que cada computadora tenía un código de máquina diferente, lo que hacía que un programa escrito para una computadora, no pudiese ser ejecutado en otra máquina diferente. Otro inconveniente era la legibilidad, ya que era muy difícil que cualquier persona pudiese entender un programa de este tipo, ya 11

12 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre que para hacerlo, era necesario de conocer la función de cada conjunto de unos y ceros, cosa que solo un experto con amplia experiencia podía hacer. En este punto de la historia, aun existían grandes necesidades que cubrir, las computadoras se encontraban apenas en desarrollo. Cuando la complejidad de los sistemas de cómputo fue aumentando, la necesidad de hacer más eficiente el proceso de programación, hizo que se desarrollara un lenguaje conocido como ensamblador, el cual utilizaba mnemotecnias, para que cada instrucción formada por unos y ceros, fuesen representados con palabras, como MOV, JMP y ADD, las cuales hacían que los programadores se familiarizaran con un lenguaje cotidiano[6][8][9]. Esto hizo en esa época, que los programas se desarrollaran más rápido y que además, fueran más fáciles de entender, lo cual facilitaba en cierta forma el mantenimiento de los programas, pero aun así, se contaba con el inconveniente de no poder ejecutar un programa hecho, para una computadora específica en otra diferente. Debido a esto, se tenía que reescribir todo el programa y adaptarlo a las posibilidades de la arquitectura, las cuales en ocasiones eran muy diferentes. Además, se dificultaba la posibilidad de encontrar errores de lógica, en los programas. Los lenguajes de bajo nivel se siguen utilizando, ya que algunas aplicaciones necesitan ser ejecutadas en el menor tiempo posible, o bien se requiere que el código generado por estas sea muy 12

13 Antecedentes pequeño, lo cual se logra programando algunos módulos del sistema computacional en lenguaje ensamblador. De igual manera, algunas aplicaciones con gran dependencia del hardware, hace necesario el uso del lenguaje ensamblador como en el caso de los controladores de algún dispositivo para un sistema operativo. Además de ello, en la electrónica de consumo son muy utilizados los microcontroladores, en este tipo de dispositivos, la memoria es algo reducida, por lo que los programas escritos para estos dispositivos, deben de ser pequeños y eficientes. Debido a la evolución de los lenguajes de programación, así como los principios y técnicas para su implementación, ha dado lugar a lenguajes, los cuales cuentan con un mayor grado de abstracción, lo cual permite que un programador no se preocupe por rasgos como registros, locaciones de memoria, etc. Esto hace que algunos lenguajes considerados históricamente de alto nivel como C, sean considerados por algunos autores, como lenguajes de bajo nivel, ya que su clara capacidad de trabajar con direcciones de memoria, así como datos a nivel de bits, lo acercan demasiado al hardware. La ley de Moore, predice el incremento del número de transistores contenidos en un circuito integrado, nos permite suponer que la complejidad de las computadoras, irá constantemente en aumento, lo cual aumenta la dificultad para programar. Es por ello que el lenguaje ensamblador, fue 13

14 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre desplazado poco a poco por los lenguajes de alto nivel, como C/C++, ADA, COBOL, FORTRAN, C#, etc. Este tipo de lenguajes, permiten que la programación sea más como un dialogo con la computadora, ya que se utilizan palabras como if, do, while, int, float, struct, las cuales tienen semejanza con el lenguaje natural, lo que permite además un alto grado de abstracción. Las características de los lenguajes de alto nivel en su gran mayoría son la portabilidad 1, la facilidad de darle mantenimiento a los programas, el rápido desarrollo de programas y la mejora de la legibilidad entre otros. Poco a poco, los lenguajes de alto nivel van adquiriendo una mayor importancia en las áreas donde el lenguaje ensamblador es más utilizado, esto debido a que las técnicas de construcción de compiladores han ido evolucionado, esto permite crear programas más veloces y pequeños. No obstante, el lenguaje ensamblador permite a los estudiantes de sistemas computacionales, entender de una forma clara, como es que éstos funcionan de manera más detallada. Estado del arte Las herramientas desarrolladas para crear programas en esta arquitectura, son de cierta forma reducidas, lo cual puede ser 1 Entiéndase portabilidad como la capacidad de ejecutar un programa en cualquier máquina. 14

15 Estado del arte consecuencia de su corto tiempo en el mercado. Además de ser reducidas en cuanto a número, también son reducidas en cuanto a las plataformas en las que se ejecutan; que hasta el 2001, estas herramientas se podían ejecutar exclusivamente en sistemas operativos de Microsoft. Fue hasta que el proyecto MSPGCC dio a los desarrolladores, la capacidad de crear programas para MSP430 en otros sistemas operativos, como BSD y Linux. En esta sección se mencionan las herramientas existentes para esta arquitectura. MSPGCC MSPGCC, es una adaptación del famoso compilador del movimiento GNU, a la arquitectura de microcontroladores de bajo consumo MSP430, el cual soporta la especificación del lenguaje de programación C ANSI C89, con diferentes grados de optimización, además cuenta con un ensamblador, depurador, enlazador y cargador, por lo cual es una herramienta, m{as que completa. Por ser una herramienta de software libre, es completamente gratuita, además de que se puede obtener y modificar el código fuente a nuestra conveniencia. Un punto débil es el relacionado con la usabilidad, ya que cuenta con una interfaz de línea de comandos, a esto se le añade la gran dificultad para su instalación en diversos sistemas operativos. Para remediar algunos de sus fallos, se ha aprovechado la flexibilidad de su licencia para crear herramientas más amigables, las cuales no 15

16 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre dejan de tener como núcleo a MSPGCC. Por ejemplo, Eclipse 2 se puede adaptar para poder trabajar con este compilador, con lo cual brinda una interfaz gráfica de usuario solida y estable. Otra herramienta versátil que aprovecha las posibilidades de este compilador es Inventor Town 3, la cual permite la creación de programas de forma On-Line, ya que ésta se realiza mediante una página Web, al compilar un programa, podemos descargar desde esta pagina un archivo Intel HEX, el cuál podremos grabar en un dispositivo MSP430, para lo cual es necesario tener instalado MSPGCC. Además, esto añade la ventaja de tener nuestros proyectos guardados en la nube de Internet. IAR Embedded Workbench Esta es una herramienta, la cual es ofrecida de manera gratuita al adquirir algunos productos de Texas Instruments, para la arquitectura MSP430, como el ex430-f2013, esta herramienta es fácil de instalar y utilizar. Esta podría ser considerada como la herramienta más adecuada, para los que incursionan en el desarrollo para MSP430. Cuenta con dos compiladores, uno de ellos con la especificación ANSI C89 y otro con la especificación Embedded C++, también 2 Eclipse es un entorno de desarrollo integrado, escrito en el lenguaje de programación java

17 Estado del arte incluye un ensamblador, depurador, enlazador y cargador los cuales permiten un desarrollo muy completo. Este software es provisto por IAR Systems de manera comercial, por lo cual su precio es elevado, además de que la manera de adquirirlo es de cierta manera confusa. Existe una versión gratuita sin limitaciones de usabilidad, pero si de tiempo, ya que esta sólo puede ser utilizada por 30 días. Hay además una versión sin limitaciones de tiempo, en la cual los compiladores no pueden generar más de 4 KB de código de máquina, lo cual es muy reducido para proyectos complejos, como los que son elaborados por estudiantes de ingeniería. Otra gran limitación, es que este programa solo puede ser ejecutado en sistemas operativos de Microsoft. Tal vez para una empresa, la cual se dedique al desarrollo de cualquier tipo de sistemas que utilicen MSP430, sea una opción rentable, pero para estudiantes de ingeniería, las desventajas de este software pueden impedir el aprendizaje de esta arquitectura tan moderna. Code Composer Studio Code Composer Studio es distribuido por Texas Instruments, es un entorno basado en el IDE Eclipse, contiene además un compilador para C++. Una de las más grandes ventajas, es que cuenta con una herramienta para la configuración gráfica de 17

18 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre puertos denominada GRACE, soporta varias familias de microcontroladores de Texas Instruments, además de ello, esta herramienta hasta hace poco sólo se podía instalar en sistemas operativos de Microsoft, pero ahora que sufrió cambios drásticos, es posible instalarla tanto en Linux como en Windows. La limitante es que en su versión de paga, su costo ronda en los 790 dólares, lo cual supera por mucho las capacidades económicas de muchos estudiantes de ingeniería. En su versión gratuita cuenta con las limitaciones de tiempo, ya que solo se puede utilizar por 30 días, o bien, limitaciones en cuanto a la cantidad de código generado por los compiladores, la cual no supera los 8 KB. 18

19 Capítulo 1.-Nociones Teóricas Capítulo 1.- Nociones Teóricas En el año de 1956 Noam Chomsky, un profesor de lingüística, describió y clasifico los tipos de gramáticas existentes dentro de los lenguajes formales, las cuales se dividen en gramáticas regulares o de nivel 3, gramáticas libres de contexto o de nivel 2, gramáticas dependientes de contexto o de nivel 1 y gramáticas completamente libres de contexto o de nivel 0 [8]. A esta clasificación, se le conoce como la jerarquía de Chomsky. En su forma más general, una gramática es útil para describir de una forma finita, un lenguaje infinito. Para ello, se hace uso de la recursividad. Gracias a ésta clasificación, y a la teoría que la acompaña, fue posible formalizar la construcción de compiladores, ya que en la práctica han demostrado ser mas útiles las gramáticas regulares y gramáticas libres de contexto para la implementación de traductores, y en menor medida las gramáticas libres de contexto. Además de ello, la división de gramáticas, ha sido útil, no solo para crear implementaciones eficientes, si no que también han servido, para formalizar la descripción de los lenguajes de programación, esto debido a que proporcionan una forma útil, precisa, y de cierta forma estándar para la especificación de lenguajes de programación [5]. Una gramática se encuentra definida por cuatro elementos; N, S, 19

20 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre I, P, donde: N es un conjunto finito y no vació de elementos denominados no terminales, ninguno de éstos elementos se encuentra en T. T es un conjunto finito y no vació de elementos denominado no terminales, en donde ninguno de estos elementos ésta contenido en N. S es un elemento de N especial denominado axioma o símbolo inicial. P es un subconjunto finito formado por una o más elementos de N o T, las cuales son denominadas reglas de producción 4. De estos elementos, solo el conjunto P será utilizado para la descripción de una gramática, ya que en éste conjunto se encuentran de manera explicita, todos los demás conjuntos. Además de ello, las características de éste conjunto son las que sirven para su clasificación. Existen varias operaciones las cuales pueden ser implementadas entre gramáticas, o bien como parte de ellas, sin embargo, para nuestro caso solo son necesarias algunas cuantas, es decir la de 4 Una producción dentro de una gramática, indica que un símbolo debe de ser sustituido por otro u otros símbolos. 20

21 Capítulo 1.-Nociones Teóricas selección, concatenación y repetición Especificación de un lenguaje de programación La especificación de un lenguaje de programación, define las características más esenciales que debe de cumplir el código fuente, para poder ser considerado, un programa perteneciente a dicho lenguaje de programación [10]. Esta especificación, se obtiene como resultado del diseño de un lenguaje de programación, y establece las pautas a seguir, para crear una implementación de dicho lenguaje de programación, es decir un intérprete o compilador. Para crear una especificación de un lenguaje de programación nuevo, se tienen que tomar diversos factores en cuenta, tales como el objetivo de dicho lenguaje de programación, así como el paradigma que este implementará, además de las consideraciones técnicas para la implementación de dicho lenguaje.lo más común, es que las especificaciones de un lenguaje de programación, se modifiquen con el transcurso del tiempo, ya que incluso en el proceso de implementación, pueden surgir errores de diversos tipos, también durante la creación de programas, pueden surgir necesidades, las cuales no fueron tomadas en cuenta al diseñar el lenguaje. 21

22 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Una especificación, ésta formada principalmente por: Componentes lexicógrafos Sintaxis Convenciones gramaticales Recomendaciones de implementación Componentes lexicógrafos Los componentes lexicográficos son los elementos básicos que forman un lenguaje de programación, la mayor parte de ellos son palabras reservadas o bien signos de puntuación [8]. Para definirlos se utilizan las gramáticas regulares, y para implementarlos, se hace uso de las máquinas de estados finitos también conocidas como autómatas finitos. Existen dos tipos de gramáticas regulares, de acuerdo a sus reglas de producción, las lineales por la derecha y las lineales por la izquierda. Las reglas de producción para las gramáticas lineales por la derecha son de la forma: A a B b 5 5 La barra vertical significa que solo se seleccionara una opción. 22

23 Capítulo 1.-Nociones Teóricas Las reglas de producción para las gramáticas lineales por la izquierda son de la forma: A B a b Donde: A, B pertenecen al conjunto N de no terminales y a,b pertenecen al conjunto T de terminales y pueden ser la cadena vaciá Sintaxis La sintaxis es la estructura que deben de seguir una serie de tokens para que éstos tengan significado en un enunciado o sentencia [9]. Para definir la estructura a seguir, se hace uso de las gramáticas libres de contexto [5]. Éstas suelen implementarse por una serie de métodos recursivos o bien por métodos no recursivos auxiliados de una estructura de datos, con el objetivo de emular la recursividad. Son de la forma: A b Donde: A pertenece a N y b pertenece ya sea a N, a T o bien a ambos, es decir que sea una regla de producción. Las gramáticas regulares son un subconjunto de las gramáticas libres de contexto, lo cual significa que cualquier implementación que exista para una gramática libre de contexto, puede ser valida 23

24 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre para una gramática regular, lo cual en la construcción de compiladores, resulta ineficiente y se evita en la medida de lo posible [9]. En las gramáticas libres de contexto, se puede notar de manera implícita la recursividad, es decir que una gramática de éste tipo se contenga a si misma Convenciones gramaticales Las convenciones gramaticales, son una serie de reglas las cuales definen si la estructura de un enunciado o sentencia tiene un significado correcto dentro del lenguaje de programación [1]. En algunos casos se hace uso de las gramáticas dependientes de contexto, lo cual es muy común en lenguajes fuertemente tipados o estáticos 6. Una gramática dependiente de contexto, es de la forma: axb ayb Donde X pertenece a N, a,b pertenecen, ya sea a N, a T o a ambos, así como Y, a diferencia de que Y no puede ser el conjunto vació. De esta forma podemos requerir una gramática para la definición de una variable y utilizarla solo si ya se ha definido previamente. 6 Son aquellos para los cuales de debe de declara una variable antes de que ésta sea utilizada o referenciada. 24

25 Capítulo 1.-Nociones Teóricas La función que realiza éste tipo de gramáticas, puede ser remplazada en el momento de la implementación de las gramáticas libres de contexto, por lo cual éste tipo de gramáticas no son imprescindibles para la construcción de traductores Recomendaciones de implementación Las recomendaciones de implementación, están estrechamente relacionadas con el entorno de ejecución, las cuales varían en gran medida, además de que no existe una manera formal de definirías, aunque se pueden crear estándares para obligar a los que implementen un lenguaje de programación a seguir las mismas recomendaciones. Un ejemplo de recomendaciones para la implementación, son las librerías estándar, el formato que tendrán los datos en la memoria, la forma de almacenar un programa, las técnicas o arquitectura para construir el traductor, etc. La única manera de formalizar las recomendaciones de implementación, es mediante la estandarización de las mismas Estandarización La estandarización contiene la especificación del lenguaje, así como algunas librerías estándar, las cuales todo ensamblador, compilador o intérprete debe de tener para considerarse estándar 25

26 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre [10]. Además de ello, como en el caso de los lenguajes que implementan una máquina virtual, contienen la definición de dicha máquina virtual, de igual manera, cuando se define un intérprete. Las asociaciones más importantes que aceptan o publican dichos estándares, son varias, unas de las más importantes son: IEEE, ISO, ANSII. No sólo estas asociaciones son capaces de emitir estándares, si no que los propios desarrolladores, o distribuidores de los lenguajes de programación, pueden imponer sus propios estándares, como en el caso del lenguaje M, o bien Python, los cuales publican, modifican y distribuyen de manera oficial, tanto sus librerías estándar, como sus intérpretes. La estandarización de un lenguaje, puede tener varios riesgos, uno de ellos es la anulación de características, ampliamente implementadas en los programas de los usuarios, lo cual podría llevar a perder usuarios de dicho lenguaje. Otro riesgo, es el que se corre al elegir por consenso los estándares, ya que cada participante del comité, puede recomendar las especificaciones que más se acerquen a su implementación, y así minimizar los esfuerzos por seguir actualizado. Sin embargo, las ventajas de la estandarización de un lenguaje de programación, son muchas, la más importante de ellas es que, al escribir un programa bajo estándares, este podrá ser ejecutado en cualquier plataforma para la cual exista un compilador, 26

27 Capítulo 1.-Nociones Teóricas ensamblador o intérprete Los traductores Un traductor, en el área de la informática, se refiere a aquel programa computacional encargado de leer un programa escrito en un lenguaje formal, para así traducirlo en acciones (interpretarlo) o traducirlo a otro lenguaje formal (compilarlo) [7]. Tanto los lenguajes de bajo nivel como los lenguajes de alto nivel, requieren de éste proceso ya que los lenguajes de programación, son solo una abstracción la cual nos permite controlar a las máquinas por medio de instrucciones parecidas a las de nuestro lenguaje natural. Cuando surgieron los lenguajes de alto nivel, surgieron también los primeros compiladores, al inicio éstos eran muy ineficientes, complejos y de gran tamaño, además de que por lo regular se tardaba mucho en construir compiladores, ya que éstos eran escritos directamente en lenguaje ensamblador. Algo que consolidó la teoría de los compiladores, fue el estudio del lenguaje natural realizado por Noam Chomsky, del cual no solo surgió una clasificación de los tipos de gramáticas existentes, si no que fue un precedente para mejorar las implementaciones y dotar de una metodología al proceso de la construcción de traductores. 27

28 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre En los años sesenta, existían solamente algunas aplicaciones, en las cuales los lenguajes de programación eran utilizados, la más obvia de ellas es la de la ciencia, ya que muchos científicos utilizaron en aquella época lenguajes como FORTRAN, para solucionar sus problemas. La inteligencia artificial, también fue una de las aplicaciones que dieron origen a lenguajes de programación, en ese tiempo fue LISP, el cual hacía un uso eficiente de los recursos, para trabajar con estructuras de datos como listas, colas, etc. Hay muchas aplicaciones en las que los lenguajes de programación, resaltan por su gran utilidad y otras donde no. Es tarea de un buen programador o ingeniero de software, el elegir un lenguaje de programación adecuado al problema por resolver Ensambladores Los ensambladores, fueron los primeros traductores que se impusieron, en la recién descubierta área de la computación, su constitución es relativamente más sencilla que la de un traductor, para un lenguaje de alto nivel [6]. Debido a que un lenguaje ensamblador, es mucho más sencillo que un lenguaje de alto nivel, también el diseño e implementación de un ensamblador, es más sencillo que el de un compilador para 28

29 Capítulo 1.-Nociones Teóricas un lenguaje de alto nivel. Todos los ensambladores, cuentan básicamente con la misma sintaxis, la cual puede expresarse de la siguiente manera: [Etiqueta] Mnemónico [Operando [Operando...]] [Comentarios]. Otra característica fundamental de los ensambladores, es que son completamente dependientes, de la arquitectura para la cual fueron diseñados. La principal diferencia entre un ensamblador y un compilador, es el tipo de lenguajes que traducen, ya que en un lenguaje ensamblador, en su forma mas básica, las gramáticas recursivas no están presentes y aunque pueden estar presentes, su uso es muy reducido. Por lo que se puede decir que un ensamblador, es un compilador en su forma mas básica. La importancia de los ensambladores, radica en que otro tipo de traductores suele utilizarlos como etapa final de traducción. Además, en fines académicos, este tipo de lenguajes, ayuda a entender de manera mucho más clara, el funcionamiento de los computadores modernos Compiladores Los compiladores, se caracterizan por generar siempre un 29

30 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre archivo, como resultado de la traducción. El término compilador se relaciona principalmente, pero no exclusivamente, con los lenguajes de alto nivel [1]. La tarea de realizar una compilación o compendio de diferentes archivos, es el enlazador o linker. Por lo que el término compilador no es del todo correcto, ya que el enlazador, suele formar parte de un compilador comercial. El concepto de máquina virtual, ha inspirado compiladores más genéricos y portables, así como los programas que se generan, ya que un compilador, al ejecutarse en plataformas diferentes para las que fue diseñado, requiere, en la mayoría de los casos de ciertos ajustes, debido al grado de dependencia de la máquina objetivo. Utilizando el concepto de máquina virtual, se pueden crear programas con un alto grado de portabilidad, un ejemplo de ello es la máquina virtual de Java. Además, será mas fácil adaptar dicha máquina virtual a la arquitectura anfitrión, que adaptar un compilador, o bien crear uno nuevo por completo. La gran ventaja de un lenguaje compilado, es la velocidad de ejecución, ya que cuando genera código de máquina real, no se depende de otro componente de software para ser ejecutado, a menos que se utilice un sistema operativo. Por lo cual se suele tomar en cuenta este tipo de lenguajes para tareas complejas, que 30

31 Capítulo 1.-Nociones Teóricas requieran de un procesamiento de grandes volúmenes de información, o bien en entornos cuyos recursos son limitados Intérpretes Un intérprete, se encarga de analizar el código fuente, y ejecutarlo al momento en que éste es analizado, por lo que no genera ningún archivo como resultado de su procesamiento. Este tipo de traductores, surge gracias al aumento de las capacidades en un sistema de cómputo, ya que cuando éstos surgieron, fue cuestionada su velocidad. En la actualidad, los lenguajes interpretados, son de gran importancia para el Internet, ya que la mayoría de las aplicaciones, están escritas mediante lenguajes interpretados, como PHP, HTML, XHTML, SQL, PERL y otros más. El programa que se encarga de ejecutarlos, se conoce como intérprete, éste, la mayor de las veces, suele estar programado en otro lenguaje de programación, en la actualidad muchos intérpretes, están escritos en C/C++. Dicho intérprete, es muy parecido a una máquina virtual, la diferencia, es que la máquina virtual, ejecuta código de máquina virtual, y el intérprete ejecuta código fuente. Las diferencias en cuanto a implementación y eficiencia, varían de acuerdo al diseño de los mismos. 31

32 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Un intérprete, es más fácil de escribir que un compilador, además, es más fácil de transportar a otras plataformas, ya que si utiliza un lenguaje estándar como base, la tarea de migrar el intérprete a otra plataforma, será mucho más sencilla. Una de las desventajas de un intérprete, es la velocidad de ejecución de sus programas, ya que para que un programa interpretado pueda ejecutarse, necesita de dicho intérprete y posiblemente de un sistema operativo, por lo que la velocidad de ejecución de un programa interpretado, es considerablemente mayor a la de un programa compilado en código de máquina. Debido a que los sistemas de cómputo actuales, son capaces de realizar millones de instrucciones por segundo, la diferencia, para un usuario que ejecuta un programa compilado y uno interpretado, suele ser imperceptible. Por lo que dichos lenguajes son utilizados en aplicaciones, que requieran ejecutarse en diversas plataformas sin mayor esfuerzo Etapas de un traductor El proceso de traducción suele ser arduo y extenso, por lo cual el proceso suele dividirse en etapas bien definidas, el diseño por etapas permite en gran manera la reutilización de gran parte del traductor [2]. 32

33 Capítulo 1.-Nociones Teóricas En nuestro caso la modularidad del traductor, permitirá que éste pueda ser utilizado en gran cantidad de arquitecturas, con pequeñas modificaciones. Un ejemplo de esto es Small-C, un subconjunto del lenguaje de programación C, para el cual basta modificar la última etapa, para que este pueda generar código de máquina de arquitecturas diferentes. De forma general, se puede dividir al proceso de la traducción en dos grandes etapas: análisis y síntesis. La etapa de análisis se encarga principalmente, de verificar que el código fuente creado por el programador, siga las reglas de definición del lenguaje, esta etapa se compone por el análisis léxico, el análisis sintáctico y el análisis semántico. Esta etapa es independiente de la máquina objetivo y es la que suele reutilizarse para abarcar otras arquitecturas. La etapa de la síntesis, se encarga principalmente de la generación de código ejecutable, para la máquina objetivo, esta compuesta por el generador de código y una o varias etapas de optimización, y aunque en ambas etapas la optimización se encuentra implícita, aquí suele ser más extensa. Esta etapa, debe de reescribirse en cada arquitectura, para la cual el compilador dará soporte. En el caso de lenguajes de programación interpretados, esta etapa se encarga de ejecutar cada una de las sentencias 33

34 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre contenidas por el código fuente, ademas de realizar tareas de optimización para ejecutar el código de manera eficiente. Cabe mencionar que la evolución de los lenguajes formales, así como de sus implentaciones, han dado lugar a que algunas de estas etapas no existan, o bien que algunas se repitan, e incluso que etapas nuevas se añadan al proceso de traducción Análisis léxico El análisis léxico, se encarga de recibir un flujo de carácteres, para clasificarlos en tokens o componentes lexicograficos, los cuales serán entregados a las etapas posteriores. En la práctica, los tokens son implementados mediante estructuras de datos, las cuales contienen por lo menos dos propiedades básicas, el tipo de token y el lexema, es decir el contenido del token. El análisis léxico, es una de las etapas más utilizadas por un traductor, es por ello, que la eficiencia del analizador léxico repercutira de manera directa con el desempeño total del traductor, es por ello que las técnicas para la implementación de analizadores léxicos se han refinado para optimizar el proceso. Para ello, se hace uso de los autómatas finitos, ya que proporcionan una forma fácil y rápida de crear analizadores léxicos, 34

35 Capítulo 1.-Nociones Teóricas e incluso crear analizadores léxicos genéricos por medio de matrices, los cuales pueden cambiar por completo el lenguaje reconocido por el analizador con muy pocas modificaciones Análisis sintáctico El análisis sintáctico se encarga de crear estructuras de datos, que por lo regular son árboles, los cuales representan la estructura de una sentencia. Tanto las ramas y nodos de dicho árbol, están constituidos por los TOKENS de la etapa anterior, esta estructura de datos es conocida como árbol sintáctico. Además del árbol sintáctico, esta etapa construye una tabla de símbolos, la cual contiene todos los identificadores definidos en el código fuente, así como una tabla de literales, la cual contiene los valores de las constantes definidas en el código fuente. Estas estructuras pueden provocar ambigüedad, lo que quiere decir que se tengan dos árboles sintácticos diferentes para una sentencia, lo que por lo regular significa que únicamente una es correcta. El problema de la ambigüedad, es uno de los más antiguos en el área de los traductores, así como el diseño de los lenguajes de programación. Para resolver este problema existen varias alternativas, una de ellas es establecer orden de precedencia, como lo es para el caso de los operadores matemáticos, de suma, resta, multiplicación y 35

36 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre división, además de los paréntesis para alterar dicho orden de precedencia. Otra alternativa, es mediante la implementación del análisis léxico, que es muy recurrido para solucionar la ambigüedad en estructuras de control de flujo. La etapa de análisis semántico, hace uso de estas estructuras de datos para hacer su trabajo. Son muchas las maneras de producir dichos arboles sintácticos, de las cuales se desprenden ventajas y desventajas, las cuales serán analizadas en su momento Análisis semántico El análisis semántico, se encarga de recorrer el árbol sintáctico de diferentes maneras, e implementar reglas gramaticales, como ejemplo ésta la definición de una variable antes de ser utilizada, en este caso la sentencia de definición de una variable, debería aparecer antes del uso de dicha variable, en caso contrario se arrojaría un mensaje de error. Esta etapa se implementa, mediante diferentes tipos de búsqueda y recorridos en el árbol sintáctico, añadiendo a las hojas y nodos de los arboles, una serie de anotaciones, las cuales pueden detener el proceso de generación de código, o bien servir de base para una optimización más eficaz. Una de las tareas más importantes del analizador semántico, es 36

37 Capítulo 1.-Nociones Teóricas la de verificar los rangos de las variables, de la comprobación de tipos, de la no reutilización de los símbolos, etc Optimización Esta etapa es de vital importancia, ya que parte del objetivo de un compilador es generar programas eficientes. Como podemos recordar, la historia de los compiladores se remonta a aquella época, donde los computadores contaban con grandes limitaciones de memoria, a tal grado que si un compilador no era capaz de proporcionar código eficiente, entonces no valía la pena ser utilizado. Debido a esto, los compiladores actuales cuentan con varias etapas de optimización, que dan como resultado código pequeño y eficiente, además de ello, la mayoría de los compiladores ofrecen la opción de compilar de manera rápida, a cambio de aumentar el tamaño del programa generado, esto es posible tras evitar alguna o todas las etapas de optimización. Gracias a que las técnicas de optimización han sido mejoradas, es posible crear compiladores de lenguajes de alto nivel, para arquitecturas con recursos reducidos, es por ello que cada vez es más común, encontrar sistemas basados en microcontroladores, los cuales son programados con lenguajes de alto nivel. Para los lenguajes interpretados, la etapa de optimización, se 37

38 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre encarga de eliminar comentarios, espacios innecesarios, e incluso representar los programas en algún tipo de codificación, el cual permite que la ejecución de los programas sea óptima Generación de código En la etapa de generación de código, se puede generar código de máquina de forma directa, ésta es la opción más recurrida, ya que en la mayor parte de las situaciones, el programa se ejecuta, sin necesidad de un ente intermedio entre la máquina y el programa recién traducido. También se cuenta con la alternativa de generar código intermedio, uno de los más utilizados es el lenguaje ensamblador. Con esta alternativa, es necesario un proceso adicional denominado ensamblado, del cual se obtiene el código de máquina. La utilización de un lenguaje intermedio, ha sido ampliamente difundida, de diversas maneras, un ejemplo de ello es el lenguaje de programación Java, el cual tras el proceso de traducción, resulta un código intermedio para una máquina virtual. Otro ejemplo, son los lenguajes soportados por la plataforma.net de Microsoft, los cuales, después del proceso de traducción, generan un código intermedio diferente al ensamblador, el cual después será nuevamente compilado, por el Just In Time Compiler del.net Framework. 38

39 Capítulo 1.-Nociones Teóricas Los lenguajes interpretados carecen de esta etapa, ya que no generan código de ningún tipo, si no que a cambio ejecutan las sentencias contenidas por el código fuente Optimización de código objetivo Esta etapa trata de optimizar el código objetivo generado, esto para lograr reducir el tamaño mismo, y además para mejorar los tiempos de ejecución, la mayoría de las veces la optimización en esta etapa produce mejores resultados que en etapas anteriores. Los traductores modernos, cuentan por lo regular con la optimización implícita de su código, pero en la mayoría de los casos, se puede someter al código a etapas extras de optimización, lo cual dependerá exclusivamente del diseño del traductor. 39

40 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Capítulo 2.- Descripción del trabajo En esta sección, se definirán las reglas a seguir mediante el proceso de construcción del software, en las que nos basaremos principalmente, no siendo necesariamente las únicas. La necesidad de plasmar estas reglas es fundamental, para evitar desviarnos en el camino, o bien trabajar de manera innecesaria, además de ello, brindar una metodología sólida la cual seguir Tipo de Proyecto Debido a los objetivos del presente trabajo, se pretende la re escritura de un software de diseño electrónico, basado en microcontroladores MSP430, además de ello se pretende en lo futuro, permitir extender las arquitecturas soportadas, de manera sencilla y transparente, para lo cual el software debe de brindar una estructura sólida para dicho objetivo. Como se ha mencionado en el estado del arte, este trabajo no es el primero en su tipo, por lo cual este proyecto se clasifica de la siguiente manera [14]. Proyecto de re escritura de legado Proyecto de creación de software re utilizable 40

41 Capítulo 2.-Descripción del trabajo Arquitectura Este proyecto de software contará con dos principales componentes, uno de ellos es la interfaz gráfica de usuario, la cual deberá proporcionar una manera sencilla de interactuar con el segundo componente, que es el del ensamblador [3][14]. Un componente adicional es el del sitio Web de documentación, el cual contendrá principalmente, una descripción detallada de cada componente del software, cuyo objetivo es mejorar y facilitar el desarrollo de componentes, que complementen el desarrollo de esta aplicación. Se ha definido de esta manera, con el objetivo de poder modificar cualquiera de las dos componentes, de una manera sencilla y poco costosa en cuanto a tiempo y esfuerzo, ya que los modelos basados en capas, han demostrado requerir de un fácil mantenimiento. También, se tiene la ventaja de reescribir cualquiera de estos dos componentes, sin necesidad de alterar al otro de forma significativa. En la 2.1, se puede observar la composición de ésta aplicación en sus tres grandes bloques. 41

42 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre A p l i c a c i ó n I n t e r f a z g r á f i c a D o c u m e n t a c i o n W e b E n s a m b l a d o r Figura 2.1: Arquitectura de la aplicación Actores en los casos de uso Dentro de ésta sección, se hará uso de los diagramas de casos de uso, especificados por el estándar UML. Es necesario establecer los actores que serán mencionados en cada diagrama, para que éstos estén completos, los respectivos casos de uso se explican en su sección correspondiente [14]. Usuario.- es la persona o programa externo, el cual hace uso de la interfaz gráfica de usuario, o bien del ensamblador mediante la interfaz de linea de comandos. Base de datos.- se encarga de almacenar la información correspondiente a los dispositivos soportados por el sistema. GUI.- se compone por los módulos de proyecto, edición y 42

43 Capítulo 2.-Descripción del trabajo mensajes de la interfaz de usuario. Desarrolladores.- es la persona o grupo de personas que dan soporte a la aplicación. Sistema de archivos.- es el componente del sistema operativo el cual se encarga de almacenar toda la información de nuestra aplicación. Ensamblador.- es el componente de ésta aplicación, el cual se encarga de traducir programas escritos en lenguaje ensamblador a código de máquina para la arquitectura MSP430 de Texas Instruments. Ya definidos los actores, continuaremos con la descripción detallada de cada elemento en la arquitectura de la aplicación Interfaz gráfica de usuario La interfaz gráfica de usuario, contará con varios módulos, los cuales pueden no implementar ninguna funcionalidad, ya que dichos módulos, serán utilizados a medida que se le de continuidad al proyecto, en sus etapas posteriores, propuestas en los trabajos a futuro. Cada módulo deberá de proveer los métodos necesarios para comunicarse con los módulos de la interfaz gráfica, así como con 43

44 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre los otros componentes de la aplicación. Los módulos que han sido implementados se muestran en la 2.2. I n t e r f a z g r á f ic a M ó d u lo d e p r o y e c t o s M ó d u lo d e e d ic ió n M ó d u lo d e m e n s a j e s Figura 2.2: Composición de la interfaz gráfica Módulo de proyectos Las funciones del módulo de proyectos, son la de administrar los elementos que conforman el proyecto, así como crear nuevos proyectos o bien guardar el proyecto actual. Los casos de uso se muestran en la 2.3 y son los siguientes: Abrir proyecto existente. Se encargara de cargar todos los 44

45 Capítulo 2.-Descripción del trabajo datos involucrados con un proyecto creado por ésta misma aplicación. Crear proyecto nuevo. Tendrá la función de crear la estructura de un proyecto, además de generar las configuraciones correspondientes para el ensamblador. Guardar proyecto. Se encarga de guardar todas las configuraciones realizadas al proyecto, así como sus elementos dentro del sistema de archivos. Modificar proyecto. Se encargara de realizar las modificaciones de más alto nivel dentro de un proyecto, es decir, la estructura y ubicación de sus elementos, número y nombre de sus elementos, etc. 45

46 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre A b r i r p r o y e c t o e x i s t e n t e B a s e d e d a t o s C r e a r p r o y e c t o n u e v o U s u a r i o G u a r d a r p r o y e c t o S i s t e m a d e a r c h i v o s A g r e g a r a r c h i v o / c a r p e t a M o d i f i c a r p r o y e c t o B o r r a r a r c h i v o / c a r p e t a A c t u a l i z a r p r o y e c t o Figura 2.3: Casos de uso módulo de proyectos Actualizar proyecto. Su función es la de recargar toda la información del proyecto modificada en tiempo de ejecución. Agregar archivos/carpetas. Depende del caso de uso modificar proyecto, su función es la de crear archivos o carpetas en el sistema de archivos del sistema operativo. Borrar archivo/carpeta. Depende del caso de uso modificar proyecto, se encarga de eliminar elementos del proyecto, ya sean solo archivos, o bien carpetas completas Módulo de edición El módulo de edición es uno de los más importantes, ya que el 46

47 Capítulo 2.-Descripción del trabajo usuario pasará más tiempo en éste que en cualquier otro. Su función principal es la de proporcionar un área de edición, desde la cual se pueda visualizar tanto los programas, como la documentación correspondiente. Los casos de uso se muestran en la 2.4 y se describen a continuación. Cargar programa. Se encarga de leer un programa perteneciente al proyecto y visualizarlo dentro del área de edición, junto con su documentación asociada. Compilar programa. Cumple la función de ejecutar las funciones adecuadas del ensamblador para poder traducir el código hallado dentro del área de edición. Mostrar documentación. Se encarga de obtener la documentación en un programa y mostrarla dentro del área de edición. Guardar actual. Se encarga de guardar los cambios realizados sobre el código fuente del programa. 47

48 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre C a r g a r p r o g r a m a C o m p i l a r p r o g r a m a E n s a m b l a d o r U s u a r i o M o s t r a r d o c u m e n t a c i o n G u a r d a r a c t u a l S i s t e m a d e a r c h i v o s Figura 2.4: Caso de uso módulo de edición Módulo de mensajes El módulo de mensajes, proporcionará al usuario todo tipo de mensajes relacionados con los módulos anteriores, como errores de compilación, errores al intentar manejar un archivo, errores de la propia interfaz, estados de las actualizaciones. En la 2.5, se pueden ver los casos de uso relacionados a este módulo y a continuación, se describe cada uno de ellos. Desplegar mensajes. Se encarga de visualizar los mensajes en el área correspondiente a éste módulo, además de informar de donde proviene, la fecha y hora de generación. 48

49 Capítulo 2.-Descripción del trabajo Limpiar mensajes. Su función es la de despejar los mensajes generados del área de visualización. Guardar sesión. Se encarga de guardar en un archivo, todos los mensajes generados y visualizados en esta área. D e s p l e g a r m e n s a j e s G U I L i m p i a r m e n s a j e s Figura 2.5: Casos de uso módulo de mensajes A continuación, se enuncian algunos módulos que serán implementados sin funcionalidad alguna, con el objetivo de que tengan seguimiento en etapas posteriores, en cuyo caso los que implementen, decidirán la funcionalidad de cada módulo, basado en las recomendaciones expresadas para cada uno. Depuración.- Ejecuta paso a paso el programa. Mapa de memoria.- Muestra localidades de memoria con su contenido. 49

50 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Simulación.- Emula los dispositivos. Configuración gráfica.- Realiza código para la configuración de periféricos de manera gráfica. Conversiones.- Realiza conversiones entre sistemas numéricos. Símbolos y literales.- Muestra los símbolos y literales definidos en el código fuente. Descarga.- Transfiere el código de máquina al dispositivo Ensamblador La estructura de nuestro traductor, al igual que la de la interfaz gráfica de usuario, debe de ser ampliamente modular, ya que esto permitirá realizar modificaciones de sectores enteros de código, sin que la funcionalidad se pierda. De las etapas de un traductor, se implementarán las de análisis léxico, análisis sintáctico y la de generación de código, esto debido a que estas tres etapas implementarán de manera indirecta el análisis semántico. 50

51 Capítulo 2.-Descripción del trabajo Con solo tres etapas en nuestro traductor, aseguramos que se podrán declarar símbolos y ser utilizados en cualquier parte del programa, debido a que se implementan dos pasadas, una para la del análisis sintáctico y la otra para el generador de código. Además, con únicamente dos pasadas se reduce el tiempo de ejecución, que con un número mayor. E n s a m b l a d o r. A n a l i z a d o r l é x i c o G e n e r a d o r d e c ó d i g o A n a l i z a d o r s i n t á c t i c o M o d u l o d e h e r r a m i e n t a s Figura 2.6: Composición del ensamblador El módulo de herramientas, contiene los métodos necesarios para realizar conversiones entre sistemas de numeración, además de un intérprete de expresiones matemáticas, el cual regresa el valor de la expresión. Esta estructura es lo suficientemente flexible, lo que permitirá extender el lenguaje del ensamblador, mediante el uso de las 51

52 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre instrucciones del preprocesador, y dado a que nosotros definiremos por completo dicho lenguaje de extensión, da la facilidad de aplicar las mismas instrucciones, para cualquier otro lenguaje ensamblador. En la 2.6 se puede ver la constitución del ensamblador, el modelo de casos de uso para el ensamblador se encuentra en la 2.7, el cual se encuentra compuesto por: Compilar programa. Se encarga de traducir un programa a código de máquina, en caso de tener errores, se encarga de informar al usuario y no generar código de máquina. Análisis léxico. Se encarga únicamente de analizar los componentes léxicos del programa. Análisis sintáctico. Solamente realiza el análisis sintáctico del programa proporcionado, es decir, solo construye el árbol sintáctico. Además de proveer los métodos necesarios para interactuar con la interfaz de usuario, es necesario proveer de una serie de comandos, para que el ensamblador pueda ser ejecutado desde la interfaz de línea de comandos, ya que muchos usuarios de nivel avanzado prefieren la velocidad de ejecución, que una interfaz gráfica. 52

53 Capítulo 2.-Descripción del trabajo C o m p i l a r p r o g r a m a U s u a r i o A n a l i s i s l é x i c o A n a l i s i s s i n t á c t i c o G U I Figura 2.7: Casos de uso ensamblador Sitio Web El sitio Web contendrá principalmente, información referente a la estructura de la herramienta, esto para facilitar el desarrollo, estudio, crítica y mejoramiento de la aplicación entera. El contenido del sitio, será obtenido directamente del código fuente que conformará la aplicación, haciendo uso de herramientas para la generación automática de documentación. En la 2.8 se pueden observar los casos de uso para el sitio Web. Consultar, proponer. Consiste en que el usuario visualice la información, correspondiente a la constitución de la aplicación, así como su uso y manipulación. También permite 53

54 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre al usuario comunicar sus inquietudes, sugerencias y aportaciones. Generar documentación actual. Si la aplicación es sometida a cambios drásticos, será necesario actualizar la documentación, manteniendo además precedentes de las versiones anteriores. U s u a r i o C o n s u l t a r, p r o p o n e r D e s a r r o l l a d o r e s G e n e r a r d o c u m e n t a c i ó n a c t u a l Figura 2.8: Casos de uso sitio web Entorno de implementación Una de las principales desventajas de las herramientas mencionadas anteriormente, es la de su uso exclusivo en sistemas operativos de Microsoft, por lo que al elegir un entorno de implementación exclusivo de este sistema operativo, caeríamos en las mismas deficiencias, por lo que se propone adoptar los siguientes elementos, para lograr un programa multiplataforma. 54

55 Capítulo 2.-Descripción del trabajo Otra de ellas es el costo, por lo cual en nuestra aplicación, buscaremos herramientas gratuitas para la implementación, de manera que su uso no agregue ningún tipo de costo adicional al producto final. También se necesita la libertad de modificación, distribución y ejecución del software, por lo cual se eligieron herramientas con alguna de las licencias, publicadas por la Free Software Foundation Lenguaje de programación Como lenguaje de programación se ha adoptado Python, debido a la gran cantidad de módulos existentes, los cuales pueden ser ejecutados e instalados de una forma fácil, en sistemas operativos Windows, Linux, Mac, entre otros [4]. Python es un lenguaje de programación multiparadigma, que nos da la posibilidad de crear programas orientados a objetos, y a pesar de ser un lenguaje interpretado, se obtienen muy buenos tiempos de ejecución comparables con Java, por ejemplo. Es de distribución gratuita, bajo una licencia de software libre, flexible, la cual nos permite, tanto crear aplicaciones comerciales, como gratuitas y de libre distribución sin ningún problema. Cabe mencionar, que el porcentaje de programadores que 55

56 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre utilizan este lenguaje de programación va en aumento, a tal grado que cuenta aproximadamente con el mismo porcentaje de programadores que C#, el cual cuenta con grandes deficiencias, para ejecutarse en otras plataformas diferentes a las de Microsoft. El paradigma utilizado para la creación del traductor, sera el orientado a objetos, ya que es con el que más se tiene experiencia y que ha demostrado su efectividad en múltiples ocasiones en toda la industria [13] Biblioteca gráfica Para la creación de la interfaz gráfica de usuario, elegimos wxwidgets, por su amplia cantidad de controles, y la facilidad de ejecutarse en diferentes plataformas, con muy pocas consideraciones en el momento de la implementación, esto debido a que desde sus inicios, los wxwidgets han tenido el objetivo de ser multiplataforma [11]. Existe una gran cantidad de documentación a lo largo de la Web, la cual es de mucha ayuda en el momento de implementar soluciones de todo tipo. El conjunto de métodos, funciones, clases y objetos, nos permiten crear interfaces gráficas de usuario de forma rápida y sencilla. Esta librería es, al igual que el lenguaje de programación elegido, 56

57 Capítulo 2.-Descripción del trabajo de distribución gratuita y brinda las mismas libertades de modificación, distribución y comercialización, necesarias para nuestra aplicación Base de datos Para la gestión de la base de datos de prueba se utilizara SQLite, ya que es compatible con el lenguaje de programación seleccionado. Este manejador de bases de datos cuenta con varias ventajas, una de ellas es que no cuenta con instrucciones de administración, lo cual reduce su tamaño, no es necesario contar con un servidor de bases de datos para que éste funcione, la base de datos se almacena en un archivo que puede ser distribuido con la aplicación. Estas características lo hacen ideal para poder incorporarlo, en aplicaciones que necesiten la funcionalidad básica de una base de datos, ya que será necesario almacenar las características de los dispositivos, en dicha base de datos Especificación a implementar En esta sección, será definida la especificación del lenguaje ensamblador de manera formal, ya que en la documentación oficial del fabricante, no se pudo hallar dicho documento, y es un objetivo particular del presente trabajo. 57

58 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre La especificación contiene los componentes léxicos, las gramáticas y algunas convenciones semánticas, las cuales son más que suficientes para ejecutar la implementación del ensamblador, y han sido obtenidas mediante el análisis del lenguaje ensamblador, de los microcontroladores MSP430 de Texas Instruments. Además de ser indispensable para lograr el objetivo general, esta especificación puede ser utilizada por terceros, para crear sus propias implementaciones Componentes léxicos Dentro del lenguaje ensamblador para esta arquitectura, existen componentes léxicos, los cuales serán descritos por medio de gramáticas regulares, utilizando la notación Backus Naur. Los componentes léxicos en nuestro caso, se agrupan principalmente en identificadores, números y símbolos. Dentro de los identificadores, se encuentran las etiquetas, las instrucciones, los registros, y algunas palabras reservadas. Los símbolos, son un conjunto el cual contiene a los caracteres tanto de fin de línea, como de fin de archivo, los símbolos de direccionamiento, los elementos para el control de análisis. 58

59 Capítulo 2.-Descripción del trabajo Básicos Los componentes léxicos básicos, serán empleados por definiciones formales de otros componentes léxicos, por lo cual es importante describirlos, es importante mencionar, que los componentes léxicos básicos no serán generados por el analizador léxico. Un dígito, ésta formado únicamente por un símbolo contenido en el alfabeto, del conjunto de los números reales dentro del sistema de numeración decimal, lo cual se expresa en la siguiente regla gramatical. Dígito [0-9] Una letra comprende cualquier elemento, comprendido dentro del alfabeto del lenguaje español, ya sea en mayúscula o en minúscula expresado con la regla gramatical: Letra [a-za-z] Etiquetas Las etiquetas serán utilizadas para identificar una localidad de memoria, y hacer referencias posteriores dentro de un mismo programa. En la mayoría de los lenguajes de programación, esta definición de etiqueta, es equivalente con la de un identificador. Las etiquetas pueden ser definidas de dos maneras diferentes, 59

60 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre de acuerdo a las siguientes reglas gramaticales, donde se hace uso de los componentes léxicos básicos. Etiqueta Letra (Letra Dígito)* Etiqueta_opc Etiqueta : Fin de línea Cada sentencia, en su forma más básica del lenguaje ensamblador, ésta limitada a una línea de código fuente, por lo que el componente léxico de fin de línea, es necesario para poder limitar a cada sentencia. El componente léxico de fin de línea, se expresa mediante la siguiente regla gramatical: EOL '\n' Registros De acuerdo a las gramáticas libres de contexto, para el lenguaje ensamblador de los microcontroladores MSP430, surgió la necesidad de especificar a los registros como componentes léxicos, ya que así, se reducía en gran medida la definición de la sintaxis, y por consecuencia directa, su implementación. Los registros, se expresan por medio de la siguiente regla gramatical: Registro R Dígito Dígito* Números hexadecimales 60

61 Capítulo 2.-Descripción del trabajo Los números hexadecimales, son de vital importancia para el manejo de datos dentro de cualquier lenguaje ensamblador, para ello utilizaremos la notación clásica para dígitos hexadecimales, donde la cantidad es precedida por el carácter cero. Dicha notación ha demostrado dentro de nuestra aplicación, aumentar el tiempo de análisis léxico de manera substancial. La regla gramatical para describirlos es la siguiente: NUMH 0x Dígito Dígito * Símbolos de direccionamiento El fabricante de microcontroladores MSP430, dentro de su documentación, especifica una serie de símbolos, los cuales definen cada uno de los modos de direccionamiento utilizados, para esta arquitectura. Cada símbolo de direccionamiento, es generado mediante sustituciones sencillas, lo cual se puede ver reflejado en las siguientes reglas gramaticales: Mas + Gato # Ampersand & Paréntesis_Izq ( Paréntesis_Der ) Control de análisis Para el funcionamiento correcto del analizador léxico, así como 61

62 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre de etapas posteriores, es necesario de la especificación de componentes léxicos adicionales, tales como el de fin de archivo y el de error. El componente de fin de archivo, será generado cuando en el flujo de datos de entrada haya llegado a su fin, este componente es utilizado para terminar el proceso de traducción, su regla gramatical es la siguiente: EOF Fin_de_archivo 7 El componente de error, cederá la complejidad del control de errores a la etapa de análisis léxico, para ello, cualquier conjunto que no pertenezca a esta definición, será clasificado como un componente léxico de error. Instrucciones Dentro de los microcontroladores MSP430, existen dos grandes tipos de instrucciones, las implementadas en silicio y las emuladas. El objetivo de las instrucciones emuladas, es reducir el tamaño del programa resultante, mediante el uso de un módulo denominado CGR 8. Dentro de este trabajo únicamente se implementarán las instrucciones no emuladas, las cuales se pueden ver en la En el lenguaje de implementación, el fin de archivo se representa mediante la secuencia de caracteres vacíos. 8 Constant Generator Register, Registro generador de constantes, el cual esta conformado por parte del registro 3 y el registro 4 de la CPU 62

63 Capítulo 2.-Descripción del trabajo Instrucciones MOV ADD ADDC RRC RRA JEQ o JZ JNE o JNZ SUB SUBC CMP PUSH SWPB JC JNC DADD BIT BIC CALL RETI JGE BIS XOR AND STX JL JMP Tabla 2.1: Instrucciones implementadas en silicio Las instrucciones además, se pueden clasificar en instrucciones de 8 bits e instrucciones de 16 bits, si a los elementos de la 2.1 se les considera dentro del conjunto Instrucciones, entonces las reglas gramaticales que definen cada una de estas clasificaciones, es el siguiente: Mnemónico_8 Instrucciones.B Mnemónico_16 Instrucciones Instrucciones.W Sintaxis La sintaxis del lenguaje ensamblador para microcontroladores MSP430, será definida por medio de una serie de gramáticas, las cuales harán uso de los componentes léxicos, a continuación se muestran las gramáticas. Programa Sentencias Sentencias Sentencias Renglón Renglón Renglón Con_Etiqueta Sin_Etiqueta Con_Etiqueta Etiqueta [Instrucción] Sin_Etiqueta Instrucción Instrucción (Mnemónico_8 Mnemónico_16) [Modo_0 [, Modo_1]] Modo_1 RegMd IndxMd SymMd AbsMd Modo_0 Modo_1 IndMd IndIncMd ImdtMd RegMd Registro IndxMd NUMH Paréntesis_Izq Registro Paréntesis_Der SymMd Etiqueta NUMH 63

64 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre AbsMd Ampersand Etiqueta NUMH IndMd Arroba Registro IndIncMd Arroba Registro Mas ImdtMd Gato NUMH Generación de código En la etapa de generación de código, se requiere de obtener datos que sean fácilmente modificables para poder ser representados en varios formatos existentes en la industria. El formato para representar código de máquina ejecutable para los microcontroladores MSP430, es denominado TI-TXT, el cual es una especificación de la misma empresa Texas Instruments, la mayoría de sus herramientas admiten dicho formato. Por ello, es una prioridad generar código de máquina en este formato, el cual es muy sencillo en comparación a otros y se describirá a continuación. El programa esta compuesto por una serie de secciones, las cuales inician con seguidas de la dirección de inicio, después la dirección, en la linea siguiente, se van a colocar los datos en bloques de 16 bytes, en donde cada byte, esta separado por un espacio, la ultima linea de la sección, puede no tener 16 bytes de longitud, puede haber un sin número de secciones, pero al final de todas ellas, se debe de situar el carácter de fin de archivo, el cual para este tipo de archivos se representa por q. 64

65 Capítulo 2.-Descripción del trabajo Se debe de proponer un empaquetamiento de los datos, de tal manera que sea factible la generación de otro tipo de formatos como el de Intel. 65

66 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Capítulo 3.- Desarrollo En este capítulo, se presentarán las bases necesarias para lograr la implementación del proyecto, las cuales están compuestas principalmente de diagramas de flujo y diagramas de clases Analizador léxico El analizador léxico, se implementará, mediante un autómata finito determinista, también conocido como máquina de estados finitos, el cual se encargará de procesar un flujo de caracteres proveniente del código fuente, para clasificar y separar dichos caracteres en las unidades mínimas, que se pueden hallar en un lenguaje de programación, es decir, Tokens Diseño del algoritmo La construcción del analizador léxico, esta basado en las gramáticas definidas previamente. El analizador léxico, por simplicidad, tendrá la capacidad de entregar a su salida, tres tipos de componentes léxicos, es decir, los símbolos, los números y los identificadores. Con los símbolos y números, no existe problema alguno, ya que éstos únicamente pueden tener un solo lexema o significado. En cambio, los identificadores pueden tener varios significados, de los 66

67 Capítulo 3.-Desarrollo cuales, solo uno es el correcto, es decir, un identificador, puede ser una palabra reservada, una instrucción, un registro o bien una etiqueta. Para ello es necesario implementar algoritmos que a partir de un identificador, sean capaces de decidir qué clase de identificador es, con esto, tendremos un analizador léxico simple, el cual cubre las necesidades del lenguaje. Con base en ello, la máquina de estados finitos utilizada para el análisis léxico, se muestra en la 3.1. Figura 3.1: Autómata finito determinista para el analizador léxico 67

68 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre El autómata finito mostrado en la 3.1, es capaz de entregar los Tokens mostrados en la 3.2, los cuales aún son insuficientes de acuerdo a las necesidades, es decir, aun faltan los Tokens de registro. Categoría Numéricos Símbolos Identificadores Token NUMH Mas Arroba Gato Ampersand Paréntesis_Izq Paréntesis_Der EOL EOF Etiqueta Mnemónico_8 Mnemónico_16 Figura 3.2: Tokens entregados por el autómata finito determinista Los tokens de registro, son un subconjunto de las etiquetas, es decir, un registro, es una etiqueta, según la definición de ambos, ya que para que un registro sea considerado de esa forma, debe de comenzar con la letra R, seguido de uno o dos dígitos para indicar el número de registro. Para diferenciar entre un registro y una etiqueta, se debe de implementar un algoritmo que excluya el conjunto generado por la gramática de registros, del conjunto generado por la gramática etiqueta. 68

69 Capítulo 3.-Desarrollo En la 3.3, se puede apreciar el algoritmo empleado para diferenciar un registro, de una etiqueta. El algoritmo se basa en la gramática de un registro, la cual indica que un registro debe comenzar con la letra R y estar seguido de uno o más dígitos. El analizador léxico, se encarga de limitar la cantidad de dígitos a 2, ya que los MSP430 sólo cuentan con 16 registros, los cuales pueden ser representados mediante dos dígitos a lo mucho. Etapas posteriores de la traducción, se encargarán de validar que el número de registro no exceda el número 15. I n i c i o R e c ib ir T o k e n y s u le x e m a E l le x e m a c o m ie n z a c o n R? S i L o s d o s d i g i t o s s i g u i e n t e s s o n n u m e r o s? N o S i A s i g n a r e l T o k e n d e R e g i s t r o N o F i n Figura 3.3: Algoritmo para diferenciar entre un token registro y etiqueta En el caso de las instrucciones, ocurre algo similar, ya que los mnemónicos sin prefijo alguno, pertenecen al superconjunto de las etiquetas. En cambio, con cualquiera de los dos sufijos no se puede 69

70 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre saber con certeza si es un mnemónico válido. La solución a este conflicto es separar las instrucciones válidas del conjunto etiqueta, mediante un algoritmo de búsqueda y comparación mostrado en la 3.4. I n i c i o R e c i b i r T o k e n y s u l e x e m a E l l e x e m a t i e n e s u f i j o s? S i R e t i r a r l o s s u f i j o s N o E l l e x e m a e s u n a i n s t r u c c i o n? N o F i n Figura 3.4: Algoritmo para la validación de instrucciones El algoritmo funciona mediante la comparación del lexema sin sufijos, dentro de una estructura de datos, la cual contiene todas las instrucciones no emuladas disponibles para los MSP430. S i A s i g n a r e l T o k e n d e I n s t r u c c i o n El algoritmo general para la obtención de tokens, a partir de una secuencia de caracteres, se puede observar en la 3.5. La obtención 70

71 Capítulo 3.-Desarrollo del conjunto de instrucciones, se realiza mediante una función que se encarga de leer un archivo con un formato predeterminado, el cual contiene toda la información correspondiente a las instrucciones del MSP430. O I n i c i o b t e n e r e l c o n j u n t o d e i n s t r u c c i o n e s A b r i r a r c h i v o e n m o d o d e l e c t u r a I n i c i a r e l e s t a d o d e l a u t ó m a t a f i n i t o L e e r u n c a r á c t e r d e l a e n t r a d a I n t r o d u c i r e l c a r á c t e r a l a u t ó m a t a f i n i t o N o E l e s t a d o d e a u t ó m a t a f i n i t o e s F i n? S i E l t o k e n e s u n a i n s t r u c c i ó n? S i C o m p r o b a r s i e l l e x e m a e n u n a i n s t r u c c i ó n v a l i d a E l t o k e n e s u n a e t i q u e t a? S i C o m p r o b a r s i e l l e x e m a e s u n r e g i s t r o N o N o F i n Figura 3.5: Algoritmo para el análisis léxico 71

72 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre El ciclo principal, que es el que se encarga de leer cada carácter del código fuente y enviarlo al autómata finito, del cual obtendrá un estado, hasta que el estado sea el de finalización, el algoritmo continuará leyendo y enviando caracteres del código fuente, al autómata finito. Cuando el estado del autómata finito es fin, entonces se procede con las comprobaciones necesarias para excluir ciertos elementos, de conjuntos más generales, es decir, separar tanto los tokens de registro, como los de instrucción, del conjunto generado por la gramática etiqueta Principios de implementación Habiendo generado una base solida para la estructura del analizador léxico, en la 3.6 se muestra el diagrama de clases, el cual reflejará los métodos y propiedades con los cuales dispondrá la clase del analizador léxico, para poder interactuar con las demás clases del sistema. La clase Scanner, utilizada para abstraer el proceso de análisis léxico, cuenta con varias propiedades, necesarias para realizar el análisis, propiedades en las cuales se almacenaran varios datos de relevancia, tales como una referencia al código fuente, el estado del autómata finito, el carácter actual en la entrada, la línea actual de entrada, el número de errores encontrados, el número de líneas, el 72

73 Capítulo 3.-Desarrollo número de caracteres analizados, el conjunto de palabras reservadas, el conjunto de instrucciones, así como el tipo de token y el lexema asociado al mismo. S c a n n e r - s t a t e : in t = 0 - s a v e : B o o l = T r u e - c : S t r = ' ' - s o u r c e : F il e = N o n e - n o _ c h a r s : I n t = 0 - n o _ e r r o r s : I n t = 0 - n o _ lin e s : I n t = 0 - r e s e r v e d _ w o r d s : D ic t = N o n e + lin e : S t r = ' ' + p o s it io n : I n t = 0 + in s t r u c t io n _ s e t : D ic t = { } + t o k e n : I n t = 0 + t o k e n _ s t r in g : S t r = ' ' < < C o n s t r u c t o r > > + in it ( p la t f o r m : S t r ) - S e t R e s e r v e d W o r d s ( ) - G e t I n s t r u c t io n S e t ( p la t f o r m : S t r ) - R e a d C h a r ( ) : S t r - R e t u r n C h a r ( c h a r : S t r ) - S t a r t ( ) - I d ( ) - N u m _ c ( ) - I s R e g is t e r ( t o k S t r in g : S t r ) - I s I n s t r u c t io n ( t o k S t r i n g : S t r ) - I s R e g is t e r ( t o k S t r in g : S t r ) - W h o I s ( t o k S t r in g : S t r ) + S e t S o u r c e F ile ( s o u r c e : S t r ) + U n S e t S o u r c e F i le ( ) + N o L i n e s ( ) : I n t + G e t N o L in e s ( ) : I n t + I n c E r r o r s ( ) + H a s E r r o r s ( ) : B o o l + S c a n ( s o u r c e : S t r ) + G e t T o k e n ( ) + P r in t R e s u l t ( ) Figura 3.6: Diagrama de clases para el analizador léxico Existen algunas propiedades, las cuales deben ser heredadas a otras clases, por lo que la visibilidad de las mismas debe permitir 73

74 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre que esto ocurra. En el lenguaje de programación utilizado, las variables requieren ser públicas para asegurar que sean heredadas, por lo que en la 3.6 podemos ver que las variables para almacenar la línea actual, así como la posición, el conjunto de instrucciones, el token actual y el lexema del mismo, son declaradas de manera pública. Existen un conjunto de funciones de la clase Scanner, el cual se encarga de realizar tareas básicas para la manipulación del código fuente, otro para la manipulación de estadísticas y otro para la realización del análisis. A continuación, se lista cada una de ellas y una breve descripción del objetivo que cumple. Funciones para la manipulación del código fuente: SetSourceFile: Su función es la de abrir un archivo en modo de lectura y almacenar una referencia al mismo. UnSetSourceFile: Elimina la referencia al archivo para que éste pueda estar disponible para otras aplicaciones. ReadChar: Se encarga de leer un carácter del buffer de entrada del código fuente, e incrementa la cuenta de caracteres, así como la cuenta de líneas, si el carácter leído es el fin de archivo. 74

75 Capítulo 3.-Desarrollo ReturnChar: Regresa el buffer de entrada en una posición, y decrementa el contador de caracteres, así como el contador de líneas si es el caso. Funciones para la manipulación de estadísticas: GetNoLines: Regresa una cantidad, la cual refleja el número de líneas analizadas del código fuente. IncErrors: Aumenta en uno, la cuenta de errores encontrados en el código fuente. HasErrors: Comprueba la existencia de errores dentro del código fuente analizado. PrinResult: Imprime las estadísticas generadas por el analizador léxico, tales como el número de caracteres, líneas y tokens encontrados en el código fuente. Funciones para la realización del análisis: SetReservedWords: Almacena dentro de una lista, todas las palabras reservadas ajenas a las instrucciones. GetInstructionSet: Obtiene el conjunto de instrucciones desde un archivo de texto plano, el cual contiene todas las instrucciones de la arquitectura, así como sus características 75

76 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre más elementales. Start: Representa el estado de Inicio dentro del autómata finito. Id: Representa el estado de Identificador dentro del autómata finito. Num_C: Representa el estado NUM_C del autómata finito. IsRegister: Realiza la diferenciación entre un token de etiqueta y uno de registro. IsInstruction: Busca dentro del conjunto de instrucciones, para diferenciar entre un token de etiqueta y uno de instrucción. IsReserved: Se encarga de averiguar si el token actual es una palabra reservada. WhoIs: Hace uso de las funciones IsRegister e IsInstruction para simplificar el código. Scan: Realiza el análisis léxico sobre todo el código fuente. GetToken: Obtiene únicamente el siguiente token del código fuente y actualiza todas las variables involucradas. 76

77 Capítulo 3.-Desarrollo El archivo de instrucciones Dentro de la clase Scanner, existe una función llamada GetInstructionSet, la cual se encarga de leer de un archivo de texto plano, todo el conjunto de instrucciones. Cada instrucción tiene un conjunto de características, las cuales son esenciales para el análisis léxico y sintáctico, por lo que al ser almacenadas dentro de un archivo de texto diferente, da una gran flexibilidad a la aplicación. Se ha desarrollado una manera de definir todas las características, necesarias para realizar el análisis sintáctico en dicho archivo de texto, la cual se explica en seguida. El archivo de instrucciones puede contener comentarios, la descripción de una instrucción y un renglón de finalización. Comentarios: Deben iniciar con un # y a continuación pueden tener cualquier información, sólo pueden abarcar una línea y puede haber tantos como sean necesarios. Descripción de instrucción: Abarca únicamente una línea y cuenta con cinco campos seguidos por una coma, el primer campo es el mnemónico de la instrucción, el segundo es el tipo de instrucción, el tercero es el código de operación del mnemónico, el cuarto indica el modo o modos posibles de la 77

78 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre instrucción, y el quinto representa el tipo de operando para el caso de instrucciones con un solo operando. Renglón de finalización: Indica que el archivo de instrucciones ha llegado a su fin, abarca únicamente una línea con la cadena de caracteres --->END.. El objetivo del archivo de instrucciones, es la de facilitar la creación de analizadores léxicos para arquitecturas diferentes, ya que las modificaciones necesarias para lograrlo, serán menores si es que no existiera un archivo de instrucciones, así como un mecanismo para leerlo. Por ello pueden existir muchos archivos de instrucciones, por lo cual se propone, almacenarlos en una carpeta llamada igual que la arquitectura a la que representan, en nuestro caso MSP430/Instruction.is. Para los microcontroladores MSP430, el archivo de instrucciones se puede visualizar en la

79 Capítulo 3.-Desarrollo # Instructions for two operands; Mnemonic Operand_Srs, Operand_Dst MOV, 1, 0100, B,, ADD, 1, 0101, B,, ADDC, 1, 0110, B,, SUBC, 1, 0111, B,, SUB, 1, 1000, B,, CMP, 1, 1001, B,, DADD, 1, 1010, B,, BIT, 1, 1011, B,, BIC, 1, 1100, B,, BIS, 1, 1101, B,, XOR, 1, 1110, B,, AND, 1, 1111, B,, # Instruction for one operand; Mnemonic Operand_Src_Dst RRC, 2, , B, dst, RRA, 2, , B, dst, PUSH, 2, , B, src, SWPB, 2, , W, dst, CALL, 2, , W, dst, RETI, 2, , W,, SXT, 2, , W, dst, # Jump instructions; Mnemonic Label JEQ, 3, ,,, JNE, 3, ,,, JC, 3, ,,, JNC, 3, ,,, JN, 3, ,,, JGE, 3, ,,, JL, 3, ,,, JMP, 3, ,,, --->END. Figura 3.7: Contenido del archivo de instrucción Instruction.is para los microcontroladores MSP Analizador sintáctico Dado que el objetivo de un analizador sintáctico es la de construir un árbol sintáctico abstracto, la mayor de las ocasiones, es necesario crear estructuras de datos para llevar a cabo dicho 79

80 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre objetivo, en algunos casos, la complejidad del lenguaje de programación a traducir, hace que los árboles sintácticos abstractos sean complejos, el cual no es nuestro caso. La estructura de los lenguajes ensambladores es sencilla, ya que en ellos no se cuenta con las sentencias recursivas, como en el caso de lenguajes de alto nivel, en la 3.8, se puede ver un ejemplo de sentencias recursivas, ya en él se pueden hallar tanto sentencias for anidadas, como sentencias if-else anidadas. int v1 = 10; int v2 = 20; for(int b = 0; b<100; b++) for(int c=100; b>0; c++) { if (v1!= 10) cout<< v1 es diferente de 10: <<v1; if(v2 == 20) cout<< v2 es igual a 20: <<v2; else cout<< v2 no es igual a 20: <<v2; else cout<< v1 no es diferente de 10: <<v1; v1++; v2++; } Figura 3.8: Ejemplo de sentencias recursivas en C/C++ Sin sentencias recursivas, escribir un analizador sintáctico, puede ser una tarea fácil para un autómata finito, pero si ese fuese el caso, el autómata sería algo complejo. 80

81 Capítulo 3.-Desarrollo Estructuras involucradas Antes de establecer un método de implementación para el analizador sintáctico, es necesario conocer la morfología de los datos obtenidos, potencialmente por el analizador sintáctico. La estructura general del árbol sintáctico abstracto, estará compuesto por una serie de renglones como se puede apreciar en la 3.9, dicha estructura se obtiene de desarrollar las dos primeras gramáticas para la sintaxis. P r o g r a m a P r o g r a m a S e n t e n c i a s S e n t e n c i a s R e n g ló n R e n g l ó n S e n t e n c i a s R e n g l ó n R e n g l ó n S e n t e n c i a s R e n g l ó n R e n g l ó n S e n t e n c i a s R e n g l ó n... R e n g l ó n... a ) Á r b o l d e a n á l i s i s g r a m a t i c a l Figura 3.9: Estructura general del lenguaje ensamblador para los microcontroladores MSP430 b ) Á r b o l d e a n á l i s i s s i n t á c t i c o 81

82 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Cada renglón, en el lenguaje ensamblador puede tener una etiqueta enseguida de una instrucción, o bien puede tener únicamente una instrucción o etiqueta. Para diferenciar estos casos, se propusieron dos gramáticas, una llamada Con_Etiqueta y otra llamada Sin_Etiqueta. En la 3.10 se puede ver el árbol de análisis gramatical generado por dichas gramáticas, con las cuales, se abarcan todos los casos de lo que podría contener un renglón, en el lenguaje ensamblador de los microcontroladores MSP430. R e n g l ó n R e n g l ó n R e n g l ó n C o n _ E t i q u e t a C o n _ E t i q u e t a S i n _ E t i q u e t a E t i q u e t a E t i q u e t a I n s t r u c c i ó n I n s t r u c c i ó n a ) R e n g l ó n c o n e t i q u e t a ú n i c a m e n t e b ) R e n g l ó n c o n e t i q u e t a e i n s t r u c c i ó n Figura 3.10: Tipos de renglones Aún falta especificar la gramática instrucción, la cual como su nombre lo indica, representa toda la información que puede estar contenida dentro de una instrucción del lenguaje ensamblador, para esta arquitectura y que es la información necesaria para traducir la instrucción en código de máquina. c ) R e n g l ó n c o n i n s t r u c c i ó n ú n i c a m e n t e Dentro del conjunto de instrucciones de los microcontroladores 82

83 Capítulo 3.-Desarrollo MSP430, se pueden distinguir tres tipos, de doble operando, de operando sencillo y de salto. Dicha clasificación surge de la forma en que las instrucciones se codifican en memoria. Esta clasificación, debe estar presente en nuestras gramáticas, para lograr diferenciarlas de manera oportuna, ya que cada categoría sigue el mismo proceso para ser convertida a código de máquina, si es que se cuenta con la información adecuada. Dado que las instrucciones de un operando, pueden ser confundidas por las de salto, éstas se diferencian únicamente por el mnemónico, por lo que se hace uso del archivo de instrucciones para excluirlas del conjunto de operando sencillo. I n s t r u c c i ó n I n s t r u c c ió n I n s t r u c c i ó n M n e m o n i c o M n e m o n i c o M o d o _ 0 M n e m o n i c o M o d o _ 0 M o d o _ 1 a ) I n s t r u c c i ó n s i n o p e r a n d o s b ) I n s t r u c c i ó n c o n o p e r a n d o s e n c i l l o c ) I n s t r u c c i ó n d e d o b l e o p e r a n d o Figura 3.11: Tipos de instrucciones Además existen instrucciones, las cuales a pesar de ser de operando sencillo, no necesitan un operando para funcionar, es decir RET y RETI, por lo que también se toman en cuenta las instrucciones sin operando. En la 3.11, se pueden ver los diferentes arboles de análisis gramatical, los cuales pueden ser generados con la especificación propuesta. 83

84 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Las gramáticas Modo_0 y Modo_1, se utilizan únicamente para agrupar los modos de direccionamiento para los operandos fuente y destino, ya que no son los mismos, es decir, un operando destino tiene únicamente cuatro modos de direccionamiento, un operando fuente, cuenta con siete modos de direccionamiento, por lo cual es necesario diferenciarlos, lo cual se hace con ayuda del archivo de instrucciones. R e g M d I n d x M d R e g i s t r o R e g M d P a r é n t e s i s _ I z q R e g i s t r o P a r é n t e s i s _ D e r a ) M o d o r e g i s t r o b ) M o d o i n d e x a d o S y m M d S y m M d A b s M d A b s M d E t i q u e t a N U M H A m p e r s a n d E t i q u e t a A m p e r s a n d N U M H c ) V a r i a n t e s d e l m o d o s i m b ó l i c o d ) V a r i a n t e s d e m o d o a b s o l u t o Figura 3.12: Modos de direccionamiento para operandos destino Dentro de la gramática Modo_1, se encuentran el modo de direccionamiento por registro, indexado, simbólico y absoluto, los cuales simbolizan un operando de destino. Los arboles de análisis gramatical para cada gramática correspondiente al Modo_1, se puede ver en la

85 Capítulo 3.-Desarrollo En la gramática Modo_0, se incluye como primera opción al conjunto de modos de direccionamiento definido por Modo_0, y representa a los modos válidos para operandos fuente. En la 3.13, se encuentran los arboles de análisis gramatical, para los modos de direccionamiento restantes en la gramática Modo_0. I n d M d I n d I n c M d A r r o b a R e g i s t r o A r r o b a R e g i s t r o M a s a ) M o d o i n d i r e c t o b ) M o d o i n d i r e c t o c o n a u t o i n c r e m e n t o I m d t M d G a t o N U M H c ) M o d o i n m e d i a t o Figura 3.13: Modos de direccionamiento complementarios para operandos fuente Implementar todas las estructuras antes mostradas, resultaría en un aumento en la complejidad, el cual se vería reflejado tanto en el total de líneas de código fuente, en el tamaño total de la aplicación, así como en la velocidad de ejecución, los cuales son aspectos importantes en la experiencia de usuario. 85

86 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre La solución propuesta, es implementar una estructura de datos genérica, la cual contenga campos para almacenar la información de todos los casos antes señalados, además de almacenar el tipo de árbol de análisis gramatical correspondiente, para así proporcionar métodos de salida, los cuales provean a la etapa de generación de código, de la información necesaria para la traducción a código de máquina La clase instrucción Para abstraer a las instrucciones en general, se creara una clase denominada Instruction. De acuerdo a nuestro paradigma de programación, una instrucción es un elemento el cual tiene propiedades, tales como operandos, modos de direccionamiento de los mismos, mnemónico y etiqueta, además cuenta con métodos o comportamientos, tales como entregar los datos empaquetados a la etapa de generación de código. El diagrama de clases UML se puede ver en la 3.14, como se ha previsto, la mayor parte de los métodos de la clase Instruction, son para acceder a las propiedades privadas, ya que de otra manera no pueden ser accesibles por otras clases o funciones. La clase tiene como propiedades, todos los elementos necesarios para representar cualquier árbol de análisis gramatical, ya que puede contar con una etiqueta o no, cuenta con un campo para el 86

87 Capítulo 3.-Desarrollo mnemónico, y tres listas, las cuales son útiles para almacenar la información de los operandos fuente y destino, es decir, el registro involucrado, el modo de direccionamiento y los datos involucrados en la instrucción. - n o _ l i n e : I n t - s o u r c e : S t r - a d d r e s s : I n t = 0 - la b e l : S t r = 'N o n e ' - m n e m o n i c : S t r = ' ' - f o r m a t : S t r = ' 0 ' - o p e r a n d s : L i s t = [ ] - r e g i s t e r s : L i s t = [ ] - m o d e s : L i s t = [ ] - c a n b y t e : B o o l = T r u e I n s t r u c t i o n + S e t A d d r e s s ( a d d r e s : S t r ) + S e t N a m e ( n a m e : S t r ) + A d d I n f o I n s t ( m n e m o n ic : S t r, b y t e _ w o r d : S t r, i n f o : L i s t ) + S e t F o r m a t ( f o r m a t _ : S t r ) + A d d O p e r a n d ( o p e r a n d : S t r ) + A d d R e g i s t e r ( r e g i s t e r : S t r ) + A d d M o d e ( m o d e ) + A d d C o n s t a n t ( c o n s t a n t ) + G e t N o L i n e ( ) : I n t + G e t A d d r e s s ( ) : I n t + G e t S o u r c e ( ) : S t r + G e t O p C o d e ( s y m t a b l e : D i c t ) : L i s t + G e t O p C o d e 1 ( s y m t a b l e : D i c t ) : S t r + G e t O p C o d e 2 ( s y m t a b l e : D i c t ) : S t r + G e t O p C o d e 3 ( s y m t a b l e : D i c t ) : S t r + G e t O R G C o d e ( s y m t a b l e : D i c t ) : S t r + G e t W R I T E C o d e ( s y m t a b l e : D i c t ) : S t r + C o d e _ R M ( p o s : I n t, s y m t a b l e : D i c t ) : S t r + C o d e _ I M ( p o s : I n t, s y m t a b l e : D i c t ) : S t r + C o d e _ S M ( p o s : I n t, s y m t a b l e : D ic t ) : S t r + C o d e _ A M ( p o s : I n t, s y m t a b l e : D i c t ) : S t r + C o d e _ I 0 M D ( p o s : I n t, s y m t a b l e : D ic t ) : S t r + C o d e _ I 1 M D ( p o s : I n t, s y m t a b l e : D ic t ) : S t r + C o d e _ I M M ( p o s : I n t, s y m t a b l e : D i c t ) : S t r + s t r ( ) : S t r Figura 3.14: Diagrama de UML para la clase Instruction 87

88 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Existen funciones para la consulta y modificación de propiedades de la clase, así como funciones para la obtención de código para etapas posteriores, como la generación de código o bien de archivos de listado. Funciones para consulta y modificación: SetAddress: Asigna la dirección en la cual se encuentra la instrucción, es necesaria para el cálculo de direcciones efectivas. SetName: Se encarga de asignar el valor alfanumérico de la etiqueta, si es que la instrucción tiene una, de lo contrario se asigna la etiqueta 'None'. AddInfoInst: Asigna toda la información obtenida del archivo de instrucciones, a los campos correspondientes dentro de la clase. SetFormat: Es utilizado para las palabras reservadas, las cuales también son representadas mediante esta clase. AddOperand: Agrega un operando en la lista. AddRegister: Agrega el registro a utilizar para el operando. AddMode: Agrega el modo de direccionamiento para el 88

89 Capítulo 3.-Desarrollo operando. AddConstant: Es empleado por las palabras reservadas, para agregar datos que serán escritos en la Flash directamente. Funciones para la obtención de código: GetNoLine: Regresa el número de linea del renglón donde se halla la instrucción representada. GetAddres: Obtiene la dirección en la cual la instrucción será grabada. GetSource: Obtiene la línea de código fuente correspondiente a la instrucción representada, útil para la generación de listado. GetOpCode: Hace uso de la variable format para llamar a GetOpCode1, GetOpCode2 o GetOpCode3, según sea el caso y entregar una lista la cual contiene el código de máquina asociado a la instrucción, así como la variable format. Además, se hace uso de las funciones para la codificación de cada modo de direccionamiento, para obtener el código correspondiente a cada operando. Con la clase Instruction, logramos simplificar el problema del 89

90 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre análisis sintáctico, así como la estructura del árbol de análisis gramatical, ya que después de un análisis sintáctico exitoso, tendremos un arreglo de instancias de la clase Instruction Análisis sintáctico descendente recursivo Teniendo disponible una estructura de datos sólida y útil, para representar cada uno de los arboles sintácticos abstractos, es momento de elegir una técnica a implementar para el análisis sintáctico. Buscando sencillez en la implementación del ensamblador, se creará un analizador sintáctico basado en el análisis descendente recursivo, ya que no involucra acceso a tablas, lo cual sugiere un efecto negativo en el tiempo de ejecución. Tampoco necesita de herramientas adicionales para la creación del mismo. Los analizadores sintácticos recursivos descendentes, tratan de construir el árbol de análisis sintáctico abstracto desde arriba hacia abajo, haciendo uso de llamadas a funciones, donde dichas funciones representan a la mayoría de gramáticas, halladas en la especificación del lenguaje. Dependiendo de la naturaleza de la gramática implementada, las llamadas a las funciones pueden ser de manera recursiva. Este tipo de análisis hace uso de un método para concordar el 90

91 Capítulo 3.-Desarrollo token esperado, con el siguiente token en el código fuente, si son iguales, el análisis continúa sin mayor problema, de lo contrario, se emite un mensaje al usuario informando del error encontrado. En los diagramas de flujo de esta sección se denominará concordar a dicho método. Después de este error, el análisis continúa para asegurar la mayor cantidad de errores encontrados, aunque muchas veces, los errores encontrados posteriormente, suelen no ser errores. Las gramáticas que se implementarán en funciones son las de Programa, Renglón, Con_Etiqueta, Instrucción, Modo_0, Modo_1, RegMd, IndxMd, SymMd, AbsMd, IndMd, IndIncMd, ImdtMd. De manera adicional, se incluyen tres funciones, Format_1, Format_2 y Format_3, para diferenciar que formato tomará la instrucción de acuerdo a su mnemónico, la existencia de estas funciones es por motivos prácticos, ya que teóricamente no es necesario añadir ningún tipo de gramática a las establecidas, para generar árboles sintácticos abstractos correctos. Dichas funciones sustituyen ciertas funciones del análisis semántico, ya que nuestro traductor no cuenta con ésta etapa, su función se sustituye a lo largo de todo el analizador sintáctico. Gramática Programa 91

92 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Es la única gramática recursiva, por lo que sera implementada mediante un ciclo de repetición condicionada, es decir, un ciclo while, el cual se detendrá cuando el token actual sea el de fin de archivo. I n i c i o O b t e n e r t o k e n E l t o k e n e s f i n d e a r c h i v o? N o L l a m a r g r a m á t i c a r e n g l ó n E l t o k e n e s d i f e r e n t e d e l f i n d e a r c h i v o? S i S i L l a m a r g r a m á t i c a r e n g l ó n N o Figura 3.15: Algoritmo para implementar la gramática Programa En la 3.15, se visualiza el algoritmo para representar la gramática Programa, después de implementar el algoritmo, las variables de la F i n 92

93 Capítulo 3.-Desarrollo clase se han modificado, independientemente si hay o no errores en el código fuente, por lo que se pueden imprimir a pantalla los resultados del análisis. También es evidente un proceso dentro de la 3.15, llamado antes y después del ciclo, el que llama a la gramática renglón, la cual se encarga de desarrollar el recorrido del árbol de análisis gramatical, y llenar los campos de la instancia de la clase Instruction, para después agregarla al árbol sintáctico abstracto. Gramática Renglón La gramática renglón se encargará de crear una instancia de la clase Instruction, y llamar a otras funciones, las cuales complementarán el contenido de dicha instancia, al finalizar de analizar el renglón, el objeto de la clase Instruction, será agregado al árbol sintáctico abstracto. En esta gramática, se verifica si el renglón tiene o no una etiqueta, si la tiene, entonces se llama a la gramática Con_Etiqueta, si no la tiene, entonces se llama directamente a la gramática instrucción, si no es ninguno de los dos casos, entonces se genera un error y se continúa con el análisis del siguiente renglón. El algoritmo empleado para la implementación de la gramática en una función, se puede ver en la

94 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre I n i c i o I n s t a n c i a r a l a c l a s e I n s t r u c t i o n T o k e n e s e t i q u e t a? N o S i L l a m a r g r a m á t i c a C o n _ E t i q u e t a N o T o k e n e s m n e m ó n ic o? G e n e r a r e r r o r S i L l a m a r g r a m á t i c a i n s t r u c c i ó n Figura 3.16: Algoritmo para implementar la gramática Renglón Gramática Con_Etiqueta A g r e g a r i n s t a n c i a d e I n s t r u c t i o n a l á r b o l s i n t á c t i c o a b s t r a c t o F i n La gramática Con_Etiqueta, se encarga de colocar la etiqueta dentro de una tabla, la cual almacena la cadena alfanumérica y el valor de la etiqueta, además de ello, llama al método SetName de la instancia a la clase Instruction. Después, se ejecuta el código 94

95 Capítulo 3.-Desarrollo correspondiente a la gramática Instrucción. El algoritmo correspondiente a las acciones realizadas por la gramática Con_Etiqueta, se muestra en la I n i c i o L l a m a r S e t N a m e e n i n s t a n c i a I n s t r u c t i o n C o l o c a r l a e t i q u e t a e n l a t a b l a d e s i m b o l o s D N o e s p l e g a r e r r o r T o k e n e s M n e m o n ic o? S i L l a m a r a l a g r a m á t i c a I n s t r u c c i ó n Gramática Instrucción F i n Figura 3.17: Algoritmo para implementar la gramática Con_Etiqueta Esta función se encarga de asignar a la instancia de la clase Instruction, toda la información correspondiente al mnemónico, mediante el método AddInfoInst. De acuerdo a la información obtenida del archivo de instrucciones, se seleccionara el formato de 95

96 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre la instrucción, para así poder llamar a la función correcta, según el formato de la instrucción. El algoritmo se puede ver en la I n i c i o O b t e n e r i n f o r m a c i ó n d e l m n e m ó n i c o A g r e g a r i n f o r m a c i ó n m e d i a n t e e l m é t o d o A d d I n f o I n s t E l f o r m a t o d e l a i n s t r u c c i ó n e s 1? N o S i L l a m a r a F o r m a t_ 1 E l f o r m a t o d e l a i n s t r u c c i ó n e s 2? N o S i L l a m a r a F o r m a t_ 2 N o D e s p l e g a r e r r o r E l f o r m a t o d e l a i n s t r u c c i ó n e s 3? S i L l a m a r a F o r m a t_ 3 Función Fotmat_1 F i n Figura 3.18: Algoritmo para implementar la gramática Instrucción 96

97 Capítulo 3.-Desarrollo La función Format_1 es la que se encarga de procesar las instrucciones de dos operandos, mediante la llamada a las gramáticas Modo_0 y Modo_1, en ese orden. El algoritmo se encuentra en la I n i c i o C o n c o r d a r m n e m ó n ic o L l a m a r m é t o d o S e t A d d r e s d e l a i n s t a n c i a I n s t r u c t i o n Función Format_2 L l a m a r g r a m á t i c a M o d o _ 0 L l a m a r g r a m á t i c a M o d o _ 1 F i n Figura 3.19: Algoritmo para la función Format_1 Las instrucciones de formato dos, son aquellas que sólo tienen un operando, por lo cual, la función Format_2, se encargará de llamar a la función correspondiente según el mnemónico, es decir, a Modo_0 o Modo_1 según corresponda. La decisión será tomada en base al archivo de instrucción, donde se especifica qué tipo de operando se recibirá. 97

98 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre I n i c i o C o n c o r d a r m n e m ó n ic o L l a m a r m é t o d o S e t A d d r e s d e l a i n s t a n c i a I n s t r u c t i o n E l o p e r a n d o e s f u e n t e? N o S i L l a m a r g r a m á t i c a M o d o _ 0 L l a m a r g r a m á t i c a M o d o _ 1 Función Format_3 F i n Figura 3.20: Algoritmo para la función Format_2 Las instrucciones de formato 3, son las instrucciones de salto, por lo que a diferencia de instrucciones de otro formato, no se requiere que se llame a Modo_0 o Modo_1, ya que el operando de las instrucciones de salto es solamente una etiqueta. Así, el algoritmo se puede ver en la

99 Capítulo 3.-Desarrollo I n i c i o C o n c o r d a r m n e m ó n ic o L l a m a r m é t o d o S e t A d d r e s d e l a i n s t a n c i a I n s t r u c t i o n Gramática Modo_1 L l a m a r m é t o d o A d d O p e r a n d d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r e t i q u e t a F i n Figura 3.21: Algoritmo para la función Format_3 La gramática Modo_1, se encargará únicamente de obtener un operando destino, es decir, con los modos de direccionamiento de registro, indexado, simbólico o absoluto y en base a ello, ejecutar la gramática indicada para la obtención del operando. El algoritmo se encuentra en la

100 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre I n i c i o E l t o k e n e s R e g i s t r o? N o S i L l a m a r a l a g r a m á t i c a R e g M d N o E l t o k e n e s N U M H? S i L l a m a r a l a g r a m á t i c a I n d x M d E l t o k e n e s E t i q u e t a? N o S i L l a m a r a l a g r a m á t i c a S y m M d N o E l t o k e n e s A m p e r s a n d? D e s p l e g a r e r r o r S i L l a m a r a l a g r a m á t i c a A b s M d F i n Figura 3.22: Algoritmo para la gramática Modo_1 100

101 Capítulo 3.-Desarrollo Gramática Modo_0 La gramática Modo_0, se encarga de averiguar si el modo de direccionamiento, es uno de los siete existentes, o bien, si el operando es fuente, para lo cual, se hacen las comprobaciones de la 3.22 y si no se halla en una de esas categorías, en lugar de desplegar un error, se hacen las comprobaciones de la I n i c i o E l t o k e n e s A r r o b a? N o S i L l a m a r a l a g r a m á t i c a I n d M d N o E l t o k e n e s G a t o? D e s p l e g a r e r r o r S i L l a m a r a l a g r a m á t i c a I m d t M d Gramática RegMd F i n Figura 3.23: Algoritmo para la gramática Modo_0 La gramática RegMd 3.24, se encarga de recolectar la 101

102 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre información correspondiente al modo de direccionamiento por registro, es decir, el número de registro, además de ello, se encarga de llenar los campos que hacen falta en la instancia de la clase Instruction, mediante los métodos AddRegister, AddMode, AddOperand. I n i c i o L l a m a r e l m é t o d o A d d R e g i s t e r d e l a i n s t a n c i a I n s t r u c t i o n L l a m a r e l m é t o d o A d d M o d e d e l a i n s t a n c i a I n s t r u c t i o n L l a m a r e l m é t o d o A d d O p e r a n d d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r r e g i s t r o Gramática IndxMd F i n Figura 3.24: Algoritmo para la gramática RegMd La gramática IndxMd se encarga de obtener el registro, así como el número indice del modo de direccionamiento indexado, después de ello incorpora los datos a la instancia de la clase Instruction. El 102

103 Capítulo 3.-Desarrollo algoritmo se puede ver en la I n i c i o L l a m a r e l m é t o d o A d d O p e r a n d d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r N U M H C o n c o r d a r P a r é n t e s i s _ I z q L l a m a r e l m é t o d o A d d R e g i s t e r d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r R e g i s t r o C o n c o r d a r P a r é n t e s i s _ D e r L l a m a r e l m é t o d o A d d M o d e d e l a i n s t a n c i a I n s t r u c t i o n Gramática SymMd F i n Figura 3.25: Algoritmo para la gramática IndxMd La gramática SymMd, es la encargada de agregar la etiqueta necesaria en el modo de direccionamiento simbólico. El algoritmo 103

104 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre se encuentra en la I n i c i o L l a m a r e l m é t o d o A d d O p e r a n d d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r E t i q u e t a L l a m a r e l m é t o d o A d d R e g i s t e r d e l a i n s t a n c i a I n s t r u c t i o n L l a m a r e l m é t o d o A d d M o d e d e l a i n s t a n c i a I n s t r u c t i o n Gramática AbsMd F i n Figura 3.26: Algoritmo para la gramática SymMd La gramática AbsMd se encarga de agregar la etiqueta o número hexadecimal, en la instancia de la clase Instruction, el algoritmo se encuentra en la

105 Capítulo 3.-Desarrollo I n i c i o C o n c o r d a r A m p e r s a n d L l a m a r e l m é t o d o A d d O p e r a n d d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r E t i q u e t a y N U M H L l a m a r e l m é t o d o A d d R e g i s t e r d e l a i n s t a n c i a I n s t r u c t i o n L l a m a r e l m é t o d o A d d M o d e d e l a i n s t a n c i a I n s t r u c t i o n Gramática IndMd F i n Figura 3.27: Algoritmo para la gramática AbsMd La gramática IndMd incluye a la gramática IndMdMas, ya que su diferencia radica únicamente en un carácter, por lo que bien pueden ser tratadas por la misma función. El algoritmo de puede ver en la

106 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre C I n i c i o o n c o r d a r A r r o b a L l a m a r e l m é t o d o A d d R e g i s t e r d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r R e g i s t e r C N o o n c o r d a r M a s E l t o k e n e s d i f e r e n t e d e M a s? S i L l a m a r a l m é t o d o A d d M o d e d e l a i n s t a n c i a I n s t r u c t i o n L l a m a r a l m é t o d o A d d O p e r a n d d e l a i n s t a n c i a I n s t r u c t i o n F i n Figura 3.28: Algoritmo para la gramática IndMd Gramática ImdtMd La gramática ImdtMd se encarga de almacenar las constantes, ya que esa es la función del modo de direccionamiento inmediato, 106

107 Capítulo 3.-Desarrollo cuyo algoritmo se puede ver en la I n i c i o C o n c o r d a r G a t o L l a m a r e l m é t o d o A d d O p e r a n d d e l a i n s t a n c i a I n s t r u c t i o n L l a m a r a l m é t o d o A d d R e g i s t e r d e l a i n s t a n c i a I n s t r u c t i o n C o n c o r d a r N U M H L l a m a r a l m é t o d o A d d M o d e d e l a i n s t a n c i a I n s t r u c t i o n F i n Figura 3.29: Algoritmo para la gramática ImdMd Principios de implementación Ya han sido cubiertos los aspectos de diseño del algoritmo, por lo que la implementación del analizador sintáctico, se realizará por medio de una clase llamada Parser, la cual heredará de la clase Scanner, para obtener todos los métodos y propiedades públicos 107

108 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre necesarios en el análisis léxico. La clase Parser, proporciona los métodos para obtener el árbol de análisis sintáctico abstracto, e incluso, proporciona una manera de presentar los datos obtenidos durante el análisis, los cuales son útiles para la depuración del mismo, así como para fines estadísticos. El diagrama UML de la clase Parser se puede ver en la 3.30, en seguida se proporciona una descripción de cada función dentro de la clase. GetTree: Se encarga de realizar el análisis sintáctico del código fuente enviado como argumento, después de realizar el análisis, se imprimen algunos datos de interés. Error: Informa al usuario de algún error generado durante el análisis sintáctico. NextLine: Cuando ocurre un error en alguna parte del código, la acción a seguir es informar al usuario, terminar de analizar el renglón actual y continuar con el siguiente, para lo cual se hace uso de esta función. SetLabel: Coloca la etiqueta enviada como parámetro en la propiedad que representa la tabla de etiquetas. 108

109 Capítulo 3.-Desarrollo S c a n n e r P a r s e r + l a b e ls : D ic t = { } - P C : I n t = 0 - g e n e r a t e _ c h i ld : B o o l = T r u e + t r e e : L i s t = [ ] + G e t T r e e ( s o u r c e f i le : S t r ) - L i n e ( ) - W i t h L a b e l( i n s t : I n s t r u c t i o n ) - B y t e I n s t r u c t io n ( i n s t : I n s t r u c t i o n ) - W o r d I n s t r u c t io n ( i n s t : I n s t r u c t i o n ) - F o r m a t _ 1 ( in s t : I n s t r u c t io n ) - F o r m a t _ 2 ( in s t : I n s t r u c t io n ) - F o r m a t _ 3 ( in s t : I n s t r u c t io n ) - G e t S r c O p ( in s t : I n s t r u c t io n ) - G e t D s t O p ( in s t : I n s t r u c t i o n ) - R M d ( i n s t : I n s t r u c t i o n ) - I M d ( i n s t : I n s t r u c t i o n ) - S M d ( in s t : I n s t r u c t io n ) - A M d ( i n s t : I n s t r u c t i o n ) - I r M d ( i n s t : I n s t r u c t i o n ) - I m M d ( i n s t : I n s t r u c t i o n ) - E r r o r ( m e s s a g e : S t r ) - N e x t L in e ( ) - S e t L a b e l ( la b e l : S t r ) - R e g is t e r _ N o ( r e g s t r : S t r ) : I n t - M a t c h ( t o k e n : I n t ) - M a t c h O p t io n ( t o k e n : L i s t ) Figura 3.30: Diagrama UML para la clase Parser 109

110 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Register_No: A partir de una cadena correspondiente a un token Registro, devuelve el número de registro asociado. Match: Es la encargada de averiguar si el token enviado como parámetro, es igual al siguiente token del código fuente, si lo es, entonces obtiene el siguiente token, de lo contrario, genera un token de error, lo cual hace que se informe al usuario de manera inmediata. MatchOption: Cumple la misma función que Match, a diferencia de que esta función recibe un conjunto de tokens y comprueba, si alguno es igual al siguiente token en el código fuente. Las demás funciones ya han sido descritas, ya que son las que conforman el analizador sintáctico descendente recursivo Generador de código El generador de código es una parte fundamental del proyecto, ya que su salida nos permitirá posteriormente, programar los resultados obtenidos de la traducción en un dispositivo físico. Siguiendo el paradigma de programación utilizado, se creó una clase para que se encargara del proceso de generación de código, dicha clase es denominada Encode y hereda de la clase Parser. 110

111 Capítulo 3.-Desarrollo Algoritmo de generación El algoritmo para la generación de código de máquina es sencillo, ya que hace uso de los datos generados en la etapa de análisis sintáctico, la cual se encarga de entregar los datos de una manera ordenada. El algoritmo se puede ver en la I n i c i o O b t e n e r á r b o l s i n t á c t i c o a b s t r a c t o I n i c i a r c o n t a d o r i e n c e r o E l c o n t a d o r e s m e n o r a l n u m e r o d e e l e m e n t o s e n e l á r b o l s i n t á c t i c o a b s t r a c t o? S i L l a m a r a l m é t o d o G e t O p c o d e d e l a i n s t r u c c i ó n i N o F o r m a t e a r e l c ó d i g o o b t e n i d o d e a c u e r d o a l a s n e c e s i d a d e s d e l f o r m a t o I n c r e m e n t a r e l c o n t a d o r i F i n Figura 3.31: Algoritmo para la generación de código en diversos formatos Dado algoritmo es genérico, ya que una característica del generador de código, es que puede generar diversos formatos de 111

112 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre código, para lo cual son pequeñas las modificaciones que se tienen que realizar Principios de implementación Code Composer Studio, herramienta provista por Texas Instruments, genera una gran cantidad de formatos utilizados para la programación de ROM's, que van desde su formato TI-TXT, hasta el Motorola Exorciser, pasando por el clásico Intel MCS-86. Nuestra herramienta tiene la capacidad de generar código en tres formatos: TI-TXT, ASCII-Hex e Intel MCS-86, pero se dejarán disponibles los métodos necesarios para implementar al menos otros tres formatos; Extended Tektronix, Motorola Exorciser y TI- Tagged. Además de los métodos para la generación de código, existen dos para la generación de listado, de los cuales únicamente uno esta implementado, así se da la oportunidad para que el usuario pueda generar sus listados personalizados, de acuerdo a sus exigencias y necesidades. En la 3.32 se encuentra el diagrama UML de la clase Encode. 112

113 Capítulo 3.-Desarrollo P a r s e r E n c o d e - n o _ b y t e s : I n t = 0 + C o d e ( o u t f il e : S t r, c o d e _ t y p e : I n t, lis t _ t y p e : I n t ) - C o d e A S C I I _ H e x ( ) : S t r - C o d e T e k t r o n i x ( ) - C o d e I n t e l _ M C S 8 6 ( ) : S t r - C o d e M o t o r o l a _ S ( ) - C o d e T I _ T a g g e d ( ) - C o d e T I _ T X T ( ) : S t r - L is t M A S M ( ) : S t r - L is t C u s t o m ( ) : S t r - P r in t R e s u lt ( ) Figura 3.32: Diagrama UML para la clase Encode 113

114 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Capítulo 4.- Pruebas Cada prueba en ésta sección fue realizada en un equipo cuyas características se pueden ver en la 4.1, el cual es muy común dentro de la E.S.I.M.E. Unidad Zacatenco. Equipo Procesador RAM 1 2 x 3GHz 2GB Figura 4.1: Características de los equipos Las pruebas deben ser llevadas a cabo con la menor cantidad de aplicaciones ejecutándose, para que únicamente se estén ejecutando los procesos del sistema operativo, además de la aplicación a probar. De manera adicional, se realizará una comparativa con el entorno de desarrollo IAR Embedded Workbench versiones 4 y 6, para las etapas de análisis sintáctico y generación de código únicamente. Para todas las etapas de traducción implementadas, se analizó un conjunto de 40 archivos diferentes en al menos 100 ocasiones. Los archivos contienen código ensamblador para MSP430, cuya cantidad de líneas de código va desde las 100 hasta las 2000 líneas de código. 114

115 Capítulo 4.-Pruebas Análisis léxico La prueba de análisis sintáctico se encargará de medir el tiempo requerido, para analizar todos y cada uno de los archivos de prueba en varias plataformas. En este caso los tiempos obtenidos no se compararan con el entorno IAR Embedded Workbench, ya que no hay manera de realizar únicamente el análisis léxico con dicha herramienta. Es importante que los archivos de prueba contengan tokens de todos los tipos existentes, ya que así se asegurará el correcto funcionamiento del analizador léxico. La prueba del análisis léxico se llevara a cabo mediante el método Scan de la clase Scanner, el cual analiza de manera secuencial cada uno de los caracteres que se encuentran dentro del archivo de código fuente, entregando una secuencia de tokens. El algoritmo para realizar la prueba de análisis léxico se puede ver en la 4.2, el cual consiste en crear una instancia de la clase Scanner y posteriormente, para cada programa se inicia un temporizador, ejecutar el análisis léxico del código fuente, detener el temporizador una vez concluido el análisis y enviar la lectura del temporizador a un archivo de texto. 115

116 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre I n i c i o C r e a r i n s t a n c i a d e l a c l a s e S c a n n e r E s e l ú l t i m o p r o g r a m a? N o I n i c i a r t e m p o r i z a d o r E j e c u t a r m é t o d o S c a n d e l a i n s t a n c i a S c a n n e r p a r a e l p r o g r a m a a c t u a l T e r m i n a r t e m p o r i z a d o r S i P r o c e s a r l e c t u r a d e l t e m p o r i z a d o r S i g u i e n t e p r o g r a m a F i n Figura 4.2: Algoritmo para probar el analizador léxico Análisis sintáctico La prueba de análisis sintáctico se realizó de manera similar a la de análisis léxico, ya que se realizó la medición para la misma 116

117 Capítulo 4.-Pruebas variable, es decir, se mide el tiempo necesario para ejecutar el análisis sintáctico del conjunto de programas de prueba. En este caso, los archivos de prueba deben de contener todos los tipos de instrucciones con los modos de direccionamiento adecuados, con el fin de asegurar el correcto funcionamiento del analizador sintáctico. Los tiempos obtenidos serán comparados con los de IAR Embedded Workbench, para lograr esto, es necesario inducir un error al final de cada archivo de prueba, para que la generación de código sea detenida, con lo cual obtendremos un análisis exclusivamente sintáctico. El algoritmo empleado para la prueba del análisis sintáctico se puede ver en la 4.3, el cual se encarga de crear una instancia de la clase Parser y para cada programa en el conjunto de prueba iniciar un temporizador, ejecutar la función GetTree de la instancia, finalizar el temporizador y escribir el resultado del temporizador en un archivo de texto. 117

118 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre I n i c i o C r e a r i n s t a n c i a d e la c la s e P a r s e r E s e l ú l t i m o p r o g r a m a? N I n i c i a r t e m o p o r i z a d o r E j e c u t a r m é t o d o G e t T r e e d e l a i n s t a n c i a P a r s e r p a r a e l p r o g r a m a a c t u a l T e r m i n a r t e m p o r i z a d o r S i P r o c e s a r l e c t u r a d e l t e m p o r i z a d o r S i g u i e n t e p r o g r a m a F i n Figura 4.3: Algoritmo para la prueba de análisis sintáctico 118

119 Capítulo 4.-Pruebas Generación de código La prueba de generación de código se realizara con el fin de obtener dos archivos, uno de ellos es el que contiene el código de máquina en formato TI-TXT, otro de ellos es el archivo de listado en formato MASM 9. Al igual que para el análisis léxico y sintáctico, en la generación de código se medirá el tiempo necesario para obtener los archivos mencionados anteriormente. Los tiempos obtenidos por el generador de código serán comparados con los tiempos de ejecución de IAR Embedded Workbench, para el cual se generaran los mismos dos archivos de salida, es decir, el que contiene el código de máquina y el archivo de listado. El algoritmo para realizar la prueba de generación de código se puede ver en la 4.4, el cual primero crea una instancia a la clase Encode y para cada programa dentro del conjunto de pruebas, inicia un temporizador, ejecuta los métodos GetTree y Code, posteriormente finaliza el temporizador y la lectura del mismo es enviada a un archivo de texto. 9 MASM es un formato de listado generado en principio por el ensamblador de Microsoft. 119

120 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre I n i c i o C r e a r i n s t a n c i a d e l a c l a s e E n c o d e E s e l ú l t i m o p r o g r a m a? N I n i c i a r t e m o p o r i z a d o r E j e c u t a r m é t o d o G e t T r e e d e l a i n s t a n c i a E n c o d e p a r a e l p r o g r a m a a c t u a l E j e c u t a r e l m é t o d o C o d e d e l a i n s t a n c i a E n c o d e p a r a e l p r o g r a m a a c t u a l S i T e r m i n a r t e m p o r i z a d o r P r o c e s a r l e c t u r a d e l t e m p o r i z a d o r S i g u i e n t e p r o g r a m a F i n Figura 4.4: Algoritmo para la prueba del generador de código 120

121 Capítulo 4.-Pruebas Resultados Para la prueba de análisis léxico descrita en la sección 4.1, los resultados se pueden ver en la 4.5, en donde solo se realizaron las comparativas del desempeño en dos sistemas operativos, para el mismo equipo. Se puede ver que los tiempos de análisis léxico son menores en entornos Linux. Tiempo (segundos) Número de líneas Windows Figura 4.5: Resultados del análisis léxico Linux Los resultados obtenidos para la prueba propuesta en la sección 4.2, se pueden observar en la 4.6, donde el tiempo de análisis sintáctico es menor incluso por debajo de IAR Embedded Workbench versiones 4 y 6 por lo menos hasta las 800 líneas de 121

122 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre código. De manera adicional, se puede observar que el tiempo de análisis sintáctico del prototipo desarrollado en diferentes plataformas, es menor para el sistema operativo Linux Tiempo (segundos) Número de líneas Windows Linux IAR v4 IAR v6 Figura 4.6: Resultados del análisis sintáctico Para la etapa de generación de código, los resultados obtenidos para las pruebas propuestas en la sección 4.3, se pueden ver en la 4.7, que los tiempos de generación de código son inferiores incluso que los tiempos obtenidos con IAR Embedded Workbench, por lo menos en archivos entre 100 y 700 líneas de código. 122

123 Capítulo 4.-Pruebas Tiempo (segundos) Número de líneas Windows Linux IAR v4 IAR v6 Figura 4.7: Resultados de la generación de código Pasos para crear un proyecto Cuando un usuario se encuentra con la necesidad de conocer un nuevo entorno de desarrollo integrado, la mayor cantidad de veces busca iniciar lo mas pronto posible y olvidarse por completo de las particularidades del entorno. La dificultad para iniciar un proyecto de cada entorno, puede hacer que los usuarios desistan de su uso, ya que entre más complejas sean las configuraciones necesarias, más pierde tiempo el usuario en la configuración de un entorno, que en la producción de resultados. 123

124 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Es por ello que en esta sección se realiza una comparativa entre los pasos y el tiempo necesario para iniciar un proyecto y realizar las configuraciones adecuadas para obtener resultados. Los entornos analizados son IAR Embedded Workbench y Code Composer Studio y el desarrollado en el presente trabajo. No se analiza MSPGCC debido a que no existe un entorno de desarrollo el cual necesite ser configurado. En el caso de IAR Embedded Workbench, los pasos a seguir son: 1. Seleccionar menú Project Create New Project 2. En el dialogo, seleccionar el tipo de plantillas de proyecto y aceptar 3. Seleccionar la ubicación del proyecto 4. Seleccionar menú Project Options 5. Seleccionar dispositivo 6. Seleccionar la manera de depurar 7. Establecer otro tipo de opciones En el entorno de desarrollo Code Composer Studio, se deben de seguir los siguientes pasos: 124

125 Capítulo 4.-Pruebas 1. Menú Project New CCS Project 2. Llenar todos los campos en el dialogo, tales como el nombre, ubicación y tipo del proyecto, así como las características del dispositivo. 3. Enlazar los archivos obtenidos Para el prototipo desarrollado en el presente trabajo, solo se requiere de dos pasos: 1. Oprimir Botón Proyecto Nuevo 2. Llenar los campos solicitados en el dialogo tales como las características del dispositivo, nombre y ubicación del proyecto Herramienta Numero de pasos Tiempo aproximado IAR Embedded Workbench 7 90 seg Code Composer Studio seg Prototipo desarrollado 2 30 seg Comparativa de tamaño El tamaño de una aplicación es de vital importancia para su distribución, ya que una aplicación de gran tamaño requiere de dispositivos más sofisticados o de mayor costo y en caso de la distribución por Internet, un mayor tamaño implica un aumento en el tiempo de descarga. 125

126 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Un ingeniero requiere de diversas aplicaciones computacionales para desempeñar su trabajo, en este caso aplicaciones de gran tamaño provocaran un incremento en la necesidad de capacidad de almacenamiento en el equipo de computo en cuestión o bien que el número de aplicaciones instaladas se vea reducido. Por lo que el tamaño de la aplicación es importante para la difusión y uso de los programas. Por ello, se busca comparar el tamaño de diversas herramientas para el desarrollo de proyectos en microcontroladores MSP430. Herramienta Tamaño del Instalador Tamaño ya instalado IAR Embedded Workbench 131 MB 567 MB Code Composer Studio 1.14 GB 3.66 GB MSPGCC 35.6 MB 120 MB Prototipo desarrollado 472 KB 472 KB Figura 4.8: Comparativa del tamaño de almacenamiento Comparativa de costos y limitaciones El precio y limitaciones de las herramientas, son uno de los factores mas importantes a analizar, debido a que la mayoría de estudiantes de ingeniería del Instituto Politécnico Nacional necesitan realizar una considerable inversión inicial para poder aprender alguna arquitectura en especifico. En el caso de los MSP430, el precio es relativamente bajo y la mayoría de las herramientas de software son gratuitas. 126

127 Capítulo 4.-Pruebas El inconveniente de la mayoría de las versiones gratuitas del software para desarrollar proyectos con microcontroladores MSP430, es que cuentan con limitaciones de diversos tipos, tales como el tiempo de utilización, la cantidad de código generado y que no se puede lucrar con las aplicaciones obtenidas. En la 4.9 se puede ver una comparativa de los precios de dichas herramientas, así como sus principales limitaciones. La gran mayoría de aplicaciones se distribuyen de manera gratuita, lo cual ayuda a los estudiantes a aprender los principios de los microcontroladores MSP430, pero para usuarios mas exigentes, las versiones de prueba resultan insuficientes y las versiones de paga, pueden resultar extremadamente caras. A diferencia de MSPGCC, la aplicación aquí propuesta, tiene un uso más amigable para usuarios no muy experimentados, ya que dicha herramienta no cuenta con interfaz gráfica alguna. El desarrollo de proyectos en el lenguaje ensamblador se dificulta con MSPGCC ya que se carece de documentación y además de que su principal objetivo es traducir del lenguaje de programación C/C++ a código de máquina y no de ensamblador a código de máquina. 127

128 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Herramienta Precio 10 Limitaciones Evaluation edition IAR Embedded Workbench IAR Embedded Workbench KickStart Code Composer Studio v5.2.0 Code Composer Studio v5.2.0 Code Composer Studio v5 $0.00 $ Sin soporte para las reglas MISRA - Limitado a 30 días - Soporte técnico limitado - Sin aplicaciones comerciales - Generación de código limitado a 4KB para MSP430 y 8KB para MSP430X - Sin soporte para reglas MISRA - Soporte técnico limitado - Sin aplicaciones comerciales Interfaz grafica $ Sin aplicaciones comerciales si $0.00 $ $ Generación de código limitado a 16KB - Sin aplicaciones comerciales Ninguna MSPGCC $0.00 Ninguna no Prototipo desarrollado $0.00 Ninguna si Figura 4.9: Análisis de los precios y limitaciones de diversos entornos si si si si 10 Todos los precios se encuentran en dólares 128

129 Conclusiones Conclusiones Se ha estudiado el lenguaje ensamblador de los microcontroladores MSP430, así como el proceso de traducción de los lenguajes de programación, obteniendo como resultado una serie de gramáticas útiles para la implementación de traductores para esta arquitectura. El ensamblador desarrollado, cuenta con la capacidad de generar código de máquina para los microcontroladores MSP430, a partir de su lenguaje ensamblador, el cual en ciertas condiciones, supera el tiempo de traducción de IAR Embedded Workbenck a pesar de ser creado mediante un lenguaje de programación interpretado. La interfaz gráfica de usuario se programó de manera completamente manual, es decir sin el uso de ninguna herramienta RAD 11, lo cual ha permitido una mejor asimilación de la programación orientada a eventos, ya que al escribir las aproximadamente 2000 líneas de código de la aplicación, se ha adquirido una gran experiencia en este tema. La simplicidad de la interfaz gráfica, permite al usuario experimentar un fácil y rápido aprendizaje del entorno, ya que este no se tiene que preocupar por aprender gran cantidad de comandos, configuraciones, descarga de complementos, etc. 11 Rapid Aplication Development, se refiere a las herramientas que mediante un entorno gráfico de arrastrar y soltar permite desarrollar aplicaciones empresariales de manera fácil y rápida, un ejemplo es el diseñador de Windows Forms de Visual Studio 129

130 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre En conjunto, se ha logrado desarrollar una aplicación solida, la cual gracias a su modularidad y documentación, permite una fácil modificación y ampliación de sus capacidades. Su pequeño tamaño, permite una fácil y rápida distribución vía Internet, así como una ejecución eficiente. La aplicación es portable de una plataforma a otra de manera muy sencilla y completamente gratuita, libre de ser modificada sin problema alguno y sin limitaciones de ningún tipo. Dado que las herramientas utilizadas para el desarrollo son de código abierto, con licencias de la Free Software Foundation. Los proyectos desarrollados con esta herramienta puedan ser comercializados sin ninguna restricción. Todas estas características hacen que la aplicación sea ideal para el ámbito académico, tanto para el estudio de su arquitectura y las técnicas de traducción, para el aprendizaje del lenguaje ensamblador de los microcontroladores MSP430 y su arquitectura, así como para la creación de proyectos de todo tipo. 130

131 Trabajos futuros Trabajos futuros Este trabajo de tesis, fue concebido como parte de un proyecto aun más grande y ambicioso, por lo que se plantean los siguientes trabajos a futuro: Extensión del traductor a otras arquitecturas en el mercado de los microcontroladores, así como su integración con la interfaz de usuario, o bien el mejoramiento de la misma. Diseño de un lenguaje intermedio, implementado en macro instrucciones, el cual sea obtenido del análisis de las arquitecturas más importantes en el mercado, y las semejanzas de sus lenguajes ensamblador. Implementación de un compilador tanto de la especificación Embedded C++, así como para ANSI C89, el cual genere instrucciones para el lenguaje intermedio. Diseño y construcción de un grabador de microcontroladores, capaz de transferir el código de máquina, generado por esta herramienta, el cual sea compatible, con la mayoría de los protocolos utilizados por los microcontroladores comerciales. Creación de diversos simuladores y depuradores para las arquitecturas soportadas. 131

132 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Implementación de los mecanismos necesarios para aplicar la programación concurrente en el ensamblador y así superar los tiempos de ejecución de las herramientas comerciales [12][13]. Complementar la base de datos de prueba para abarcar todos los dispositivos soportados por el ensamblador. 132

133 Bibliografía Bibliografía [1] Aho V. A., Sethi R. y Ullman D. J. (1990). Compiladores Principios Técnicas y Herramientas. USA. Pearson. [2] Bernard T., Stephanie S. y Thomas T. (1995). Compiladores Conceptos Fundamentales. USA. Addison-Wesley Iberoamericana. [3] Braude J. E. (2003). Ingeniería de Software, Una perspectiva orientada a objetos. Boston University. Alfaomega. [4] Ceder L. V. (2010). The Quick Python Book. USA. Manning. [5] Garcia P., Pérez T., Ruiz J., Segarra E., Sempere M. J. y Praga de V. (2001). Teoría de Autómatas y Lenguajes Formales. Universidad Politécnica de Valencia. Alfaomega. [6] Fuster C. y Juan P. A. (1991). Lenguajes Ensambladores, España. Mc. Graw Hill. [7] Lemone A. K. (1991). Fundamentos de Compiladores. USA. CECSA. [8] Louden C. K. (2004a). Construcción de Compiladores. San Jose University. Thomson. [9] Louden C. K. (2004b). Lenguajes de programación. San Jose 133

134 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre University. Thomson. [10] Pratt W. T. y Zelkowitz V. M. (1998). Lenguajes de Programación Diseño e Implementación. USA. Prentice Hall. [11] Rappin N. y Dunn R. (2006). wxpython In Action. USA. Manning. [12] Tanenbaum S. A. (1993). Sistemas Operativos Modernos. Amsterdam Países Bajos. Prentice Hall. [13] Tucker A. y Noonan R(2003). Lenguajes de Programación Principios y Paradigmas. España. Mc Graw Hill. [14] Weitzenfeld A. (2008). Ingeniería de Software Orientada a Objetos con UML, Java e Internet. México. Cenage Learning. 134

135 A. Requerimientos de la aplicación A. Requerimientos de la aplicación Para que la aplicación funcione de manera correcta, es necesario tener cierta cantidad de espacio de almacenamiento libre dentro del disco duro, así como algunos programas extras. Los requerimientos son los siguientes: El interprete de python, el cual se puede descargar de la siguiente dirección de Internet: Biblioteca gráfica wxpython, la cual se puede obtener en la dirección de Internet: Tener al menos 15MB en el disco duro, de manera independiente a la instalación de las aplicaciones anteriores. 135

136 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre B. Manual de usuario de la aplicación Crear un proyecto Paso 1.- Iniciar la aplicación mediante el siguiente comando: C:>python MainFrame.py Al ejecutar el comando, se vera la pantalla de inicio de la aplicación 1. Figura B.1: Pantalla de inicio de la aplicación 136

137 B. Manual de usuario de la aplicación Paso 2.- Hacer clic sobre el icono Crear Nuevo Proyecto 2 para que aparezca el dialogo para la creación de un nuevo proyecto. Figura B.2: Icono para la creación de un nuevo proyecto Paso 3.- Llenar todos los campos requeridos dentro del dialogo que se puede ver en la 3, tales como el fabricante, la familia, serie y la matricula del dispositivo. Llenar también la ubicación donde serán situados los archivos del proyecto. Si todos los datos son los deseados, presionar el botón Ok. 137

138 Implementación de un traductor de instrucciones para microcontroladores MSP430, usando software libre Figura B.3: Dialogo para la creación de un proyecto nuevo Después de presionar el botón Ok, se crearan los archivos y carpetas dentro del sistema de archivos que conforman nuestro proyecto. La estructura del proyecto se puede visualizar en el área de proyectos dentro del entorno

139 B. Manual de usuario de la aplicación Figura B.4: Área de proyectos, con el proyecto recién creado y sus archivos asociados 139

Elementos requeridos para crearlos (ejemplo: el compilador)

Elementos requeridos para crearlos (ejemplo: el compilador) Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción

Más detalles

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Entre los más conocidos editores con interfaz de desarrollo tenemos: Herramientas de programación Para poder programar en ensamblador se precisa de algunas herramientas básicas, como un editor para introducir el código, un ensamblador para traducir el código a lenguaje

Más detalles

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz Compiladores y Lenguajes de Programación Maria de Guadalupe Cota Ortiz Organizaciones que rigen las normas para estandarización de Lenguajes de Programación IEEE (Instituto de Ingenieros Eléctricos y Electrónicos)

Más detalles

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto

Más detalles

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar CAPITULO 4 Requerimientos, Análisis y Diseño El presente capítulo explica los pasos que se realizaron antes de implementar el sistema. Para esto, primero se explicarán los requerimientos que fueron solicitados

Más detalles

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios "Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios Miguel Alfonso Flores Sánchez 1, Fernando Sandoya Sanchez 2 Resumen En el presente artículo se

Más detalles

CONCLUISIONES Y RECOMENDACIONES

CONCLUISIONES Y RECOMENDACIONES CONCLUISIONES Y RECOMENDACIONES CONTENIDO 7.1 Verificación de Hipótesis 7.2 Conclusiones 7.3 Recomendaciones Mónica Cecilia Gallegos Varela - 145 - VERIFICACIÓN DE HIPÓTESIS La hipótesis planteada al inicio

Más detalles

Capitulo III. Diseño del Sistema.

Capitulo III. Diseño del Sistema. Capitulo III. Diseño del Sistema. Para el desarrollo del sistema en la presente tesis se utilizo el paradigma orientado a objetos utilizando el lenguaje Java en su versión 1.2. Por medio de este lenguaje

Más detalles

Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente

Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente En este capítulo definimos los requisitos del modelo para un sistema centrado en la mejora de la calidad del código fuente.

Más detalles

Capitulo I. Introducción

Capitulo I. Introducción Capitulo I. Introducción 1.1 Descripción del trabajo El ser humano, como todos sabemos tiene la necesidad de comunicarse, de ser escuchado y sobretodo interactuar con los demás seres vivos que lo rodean.

Más detalles

INTRANET DE UNA EMPRESA RESUMEN DEL PROYECTO. PALABRAS CLAVE: Aplicación cliente-servidor, Intranet, Área reservada, Red INTRODUCCIÓN

INTRANET DE UNA EMPRESA RESUMEN DEL PROYECTO. PALABRAS CLAVE: Aplicación cliente-servidor, Intranet, Área reservada, Red INTRODUCCIÓN INTRANET DE UNA EMPRESA Autor: Burgos González, Sergio. Director: Zaforas de Cabo, Juan. Entidad colaboradora: Colegio de Ingenieros del ICAI. RESUMEN DEL PROYECTO El proyecto consiste en el desarrollo

Más detalles

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA Programa: Algoritmo (secuencia no ambigua, finita y ordenada de instrucciones para la resolución de un determinado problema) traducido

Más detalles

CAPÍTULO 1 Instrumentación Virtual

CAPÍTULO 1 Instrumentación Virtual CAPÍTULO 1 Instrumentación Virtual 1.1 Qué es Instrumentación Virtual? En las últimas décadas se han incrementado de manera considerable las aplicaciones que corren a través de redes debido al surgimiento

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

Procesadores de lenguaje Tema 1: Introducción a los compiladores

Procesadores de lenguaje Tema 1: Introducción a los compiladores Procesadores de lenguaje Tema 1 Introducción a los compiladores Salvador Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá Resumen del tema Traductores Estructura

Más detalles

Guía de uso del Cloud Datacenter de acens

Guía de uso del Cloud Datacenter de acens guíasdeuso Guía de uso del Cloud Datacenter de Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Un Data Center o centro de datos físico es un espacio utilizado para alojar

Más detalles

Gestión de la Configuración

Gestión de la Configuración Gestión de la ÍNDICE DESCRIPCIÓN Y OBJETIVOS... 1 ESTUDIO DE VIABILIDAD DEL SISTEMA... 2 ACTIVIDAD EVS-GC 1: DEFINICIÓN DE LOS REQUISITOS DE GESTIÓN DE CONFIGURACIÓN... 2 Tarea EVS-GC 1.1: Definición de

Más detalles

App para realizar consultas al Sistema de Información Estadística de Castilla y León

App para realizar consultas al Sistema de Información Estadística de Castilla y León App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda

Más detalles

Capítulo 5. Cliente-Servidor.

Capítulo 5. Cliente-Servidor. Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor

Más detalles

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 2 Conceptos básicos de programación. Fundamentos de Informática Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis

Más detalles

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas: SISTEMAS DISTRIBUIDOS DE REDES 1. SISTEMAS DISTRIBUIDOS Introducción y generalidades La computación desde sus inicios ha sufrido muchos cambios, desde los grandes equipos que permitían realizar tareas

Más detalles

TEMA 1: INTRODUCCIÓN

TEMA 1: INTRODUCCIÓN 1 DISEÑO Y DESARROLLO DE COMPILADORES TEMA 1: INTRODUCCIÓN Qué es un Compilador? Un compilador no es más que un traductor, es decir, un programa que nos permite pasar información de un lenguaje a otro.

Más detalles

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado Capítulo VI Estudio de Caso de Aplicación del Integrador de Información Desarrollado 6.1 Organización elegida La Organización elegida para el caso de aplicación, es la empresa CTM Tours del grupo Costamar,

Más detalles

IV. Implantación del sistema.

IV. Implantación del sistema. IV. Implantación del sistema. Para hablar sobre el proceso de desarrollo del sistema de Recuperación de Información Visual propuesto, empezaremos hablando del hardware utilizado, las herramientas de software

Más detalles

Base de datos en Excel

Base de datos en Excel Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de

Más detalles

Estructuras de Control - Diagrama de Flujo

Estructuras de Control - Diagrama de Flujo RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS Ingeniería en Computación Ingeniería en Informática UNIVERSIDAD NACIONAL DE SAN LUIS DEPARTAMENTO DE INFORMÁTICA AÑO 2015 Índice 1. Programación estructurada 2 1.1.

Más detalles

CAPITULO I El Problema

CAPITULO I El Problema CAPITULO I El Problema 1. CAPITULO I EL PROBLEMA. 1.1. PLANTEAMIENTO DEL PROBLEMA. Desde su nacimiento la Facultad de Administración, Finanzas e Informática dispone del departamento de la biblioteca, con

Más detalles

Proyecto MONO. Juantomás García. 1. Introducción. GNOME Hispano juantomas@lared.es

Proyecto MONO. Juantomás García. 1. Introducción. GNOME Hispano juantomas@lared.es Juantomás García GNOME Hispano juantomas@lared.es Qué es el proyecto MONO?. Estado actual del proyecto. Por qué es interesante para el software libre disponer de la tecnología relacionado con el proyecto

Más detalles

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN Tabla de Contenidos LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN... 1 Tabla de Contenidos... 1 General... 2 Uso de los Lineamientos Estándares...

Más detalles

Presentación y Planificación del Proyecto: Administración de Calzado

Presentación y Planificación del Proyecto: Administración de Calzado 1 Presentación y Planificación del Proyecto: Administración de Calzado Integrantes Manuel Cubillos manuel.cubillosv@usach.cl Juan Díaz juan.diazc@usach.cl Felipe Llancaleo felipe.llancaleo@usach.cl Alberto

Más detalles

CAPÍTULO 3 VISUAL BASIC

CAPÍTULO 3 VISUAL BASIC CAPÍTULO 3 VISUAL BASIC 3.1 Visual Basic Microsoft Visual Basic es la actual y mejor representación del viejo lenguaje BASIC, le proporciona un sistema completo para el desarrollo de aplicaciones para

Más detalles

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y Capítulo VI Conclusiones En este capítulo abordaremos la comparación de las características principales y de las ventajas cada tecnología Web nos ofrece para el desarrollo de ciertas aplicaciones. También

Más detalles

Cómo elegir tu SOFTWARE DE GESTIÓN?

Cómo elegir tu SOFTWARE DE GESTIÓN? Cómo elegir tu SOFTWARE DE GESTIÓN? 00 Introducción Tu empresa está en expansión y has decidido integrar todas las áreas de tu negocio para seguir creciendo. Has iniciado la búsqueda de un software de

Más detalles

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD 1 Java es un lenguaje de programación de Sun Microsystems originalmente llamado "Oak. James Gosling Bill Joy 2 Oak nació para programar pequeños dispositivos electrodomésticos, como los asistentes personales

Más detalles

Capítulo 6. Desarrollo del Software

Capítulo 6. Desarrollo del Software Capítulo 6. Desarrollo del Software Introducción El objetivo principal de la presente tesis como su título lo describe, es la animación de las tramas de comunicación principales de WCDMA. Para lograr dicho

Más detalles

CAPITULO IV CONCLUSIONES Y RECOMENDACIONES

CAPITULO IV CONCLUSIONES Y RECOMENDACIONES CAPITULO IV CONCLUSIONES Y RECOMENDACIONES VERIFICACIÓN DE OBJETIVOS El objetivo general del proyecto ha sido cumplido satisfactoriamente en la Unidad de Sistemas de PETROECUADOR, realizando el análisis

Más detalles

HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS

HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS Las primeras computadoras eran enormes máquinas que se ejecutaban desde una consola. El programador, quien además operaba el sistema de computación, debía

Más detalles

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. UNIVERSIDAD DE CARABOBO FACULTAD DE CIENCIA Y TECNOLOGÍA DIRECCION DE EXTENSION COORDINACION DE PASANTIAS Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. Pasante:

Más detalles

Informática 4º ESO Tema 1: Sistemas Informáticos. Sistemas Operativos (Parte 2)

Informática 4º ESO Tema 1: Sistemas Informáticos. Sistemas Operativos (Parte 2) 1. Qué es un sistema operativo?...2 2. Funciones de los sistemas operativos...2 3. Windows...2 3.1. La interfaz gráfica...2 3.2. La administración y los usuarios...3 3.3. El sistema de archivos...3 3.4.

Más detalles

Introducción En los años 60 s y 70 s cuando se comenzaron a utilizar recursos de tecnología de información, no existía la computación personal, sino que en grandes centros de cómputo se realizaban todas

Más detalles

Arquitectura de Aplicaciones

Arquitectura de Aplicaciones 1 Capítulo 13: Arquitectura de aplicaciones. - Sommerville Contenidos del capítulo 13.1 Sistemas de procesamiento de datos 13.2 Sistemas de procesamiento de transacciones 13.3 Sistemas de procesamiento

Más detalles

Unidad 1. Fundamentos en Gestión de Riesgos

Unidad 1. Fundamentos en Gestión de Riesgos 1.1 Gestión de Proyectos Unidad 1. Fundamentos en Gestión de Riesgos La gestión de proyectos es una disciplina con la cual se integran los procesos propios de la gerencia o administración de proyectos.

Más detalles

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama.

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama. Diagrama de Flujo La presentación gráfica de un sistema es una forma ampliamente utilizada como herramienta de análisis, ya que permite identificar aspectos relevantes de una manera rápida y simple. El

Más detalles

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.

Más detalles

Capítulo I. Definición del problema y objetivos de la tesis. En la actualidad Internet se ha convertido en una herramienta necesaria para todas

Capítulo I. Definición del problema y objetivos de la tesis. En la actualidad Internet se ha convertido en una herramienta necesaria para todas Capítulo I Definición del problema y objetivos de la tesis 1.1 Introducción En la actualidad Internet se ha convertido en una herramienta necesaria para todas las personas ya que nos permite realizar diferentes

Más detalles

Interoperabilidad de Fieldbus

Interoperabilidad de Fieldbus 2002 Emerson Process Management. Todos los derechos reservados. Vea este y otros cursos en línea en www.plantwebuniversity.com. Fieldbus 201 Interoperabilidad de Fieldbus Generalidades Qué es interoperabilidad?

Más detalles

Metodologías de diseño de hardware

Metodologías de diseño de hardware Capítulo 2 Metodologías de diseño de hardware Las metodologías de diseño de hardware denominadas Top-Down, basadas en la utilización de lenguajes de descripción de hardware, han posibilitado la reducción

Más detalles

Capítulo 6: Conclusiones

Capítulo 6: Conclusiones Capítulo 6: Conclusiones 6.1 Conclusiones generales Sobre el presente trabajo se obtuvieron varias conclusiones sobre la administración del ancho de banda en una red inalámbrica, basadas en la investigación

Más detalles

Introducción a las redes de computadores

Introducción a las redes de computadores Introducción a las redes de computadores Contenido Descripción general 1 Beneficios de las redes 2 Papel de los equipos en una red 3 Tipos de redes 5 Sistemas operativos de red 7 Introducción a las redes

Más detalles

Capítulo 1 Documentos HTML5

Capítulo 1 Documentos HTML5 Capítulo 1 Documentos HTML5 1.1 Componentes básicos HTML5 provee básicamente tres características: estructura, estilo y funcionalidad. Nunca fue declarado oficialmente pero, incluso cuando algunas APIs

Más detalles

Prototipo de un sistema. interactivo de soporte y ayuda a los compradores de un centro. comercial de equipamiento del hogar

Prototipo de un sistema. interactivo de soporte y ayuda a los compradores de un centro. comercial de equipamiento del hogar Prototipo de un sistema interactivo de soporte y ayuda a los compradores de un centro comercial de equipamiento del hogar Chema Lizano Lacasa. Miguel Ancho Morlans. IPO1-5 INDICE 1.- Descripción general....3

Más detalles

CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO

CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO En la actualidad la mayoría de las grandes empresas cuentan con un sin número de servicios que ofrecen a sus trabajadores y clientes. Muchos de estos servicios

Más detalles

DE VIDA PARA EL DESARROLLO DE SISTEMAS

DE VIDA PARA EL DESARROLLO DE SISTEMAS MÉTODO DEL CICLO DE VIDA PARA EL DESARROLLO DE SISTEMAS 1. METODO DEL CICLO DE VIDA PARA EL DESARROLLO DE SISTEMAS CICLO DE VIDA CLÁSICO DEL DESARROLLO DE SISTEMAS. El desarrollo de Sistemas, un proceso

Más detalles

CAPITULO I. Introducción. En la actualidad, las empresas están tomando un papel activo en cuanto al uso de sistemas y

CAPITULO I. Introducción. En la actualidad, las empresas están tomando un papel activo en cuanto al uso de sistemas y CAPITULO I Introducción 1.1 Introducción En la actualidad, las empresas están tomando un papel activo en cuanto al uso de sistemas y redes computacionales. La tecnología ha ido evolucionando constantemente

Más detalles

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de cualquier modelo en el software Algor. La preparación de un modelo,

Más detalles

INTRODUCCIÓN: Una Visión Global del Proceso de Creación de Empresas

INTRODUCCIÓN: Una Visión Global del Proceso de Creación de Empresas INTRODUCCIÓN: Una Visión Global del Proceso de Creación de Empresas 1 INTRODUCCIÓN. Una visión global del proceso de creación de empresas Cuando se analiza desde una perspectiva integral el proceso de

Más detalles

Figura 4.1 Clasificación de los lenguajes de bases de datos

Figura 4.1 Clasificación de los lenguajes de bases de datos 1 Colección de Tesis Digitales Universidad de las Américas Puebla Romero Martínez, Modesto Este capítulo describen los distintos lenguajes para bases de datos, la forma en que se puede escribir un lenguaje

Más detalles

CAPÍTULO I. Sistemas de Control Distribuido (SCD).

CAPÍTULO I. Sistemas de Control Distribuido (SCD). 1.1 Sistemas de Control. Un sistema es un ente cuya función es la de recibir acciones externas llamadas variables de entrada que a su vez provocan una o varias reacciones como respuesta llamadas variables

Más detalles

CORPORACIÓN MEXICANA DE INVESTIGACIÓN EN MATERIALES, S.A. DE CV

CORPORACIÓN MEXICANA DE INVESTIGACIÓN EN MATERIALES, S.A. DE CV Página 1 de 6 1. OBJETIVO El presente documento tiene la finalidad de citar los beneficios de la migración de la herramienta de análisis de riesgo, mantenimiento e inspección que en lo sucesivo se denominará

Más detalles

SISTEMA DE PAPELES DE TRABAJO PARA AUDITORÍA SPT AUDIT

SISTEMA DE PAPELES DE TRABAJO PARA AUDITORÍA SPT AUDIT SISTEMA DE PAPELES DE TRABAJO PARA AUDITORÍA SPT AUDIT INTRODUCCIÓN La documentación de auditoría ó papeles de trabajo son el respaldo que tiene el auditor para registrar los procedimientos aplicados,

Más detalles

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor

Más detalles

comunidades de práctica

comunidades de práctica 1. Introducción CoSpace es una plataforma web diseñada para proporcionar un espacio virtual de interacción y colaboración entre formadores en comunidades virtuales. Se originó como resultado de las necesidades

Más detalles

Capítulo 9. Archivos de sintaxis

Capítulo 9. Archivos de sintaxis Capítulo 9 Archivos de sintaxis El SPSS permite generar y editar archivos de texto con sintaxis SPSS, es decir, archivos de texto con instrucciones de programación en un lenguaje propio del SPSS. Esta

Más detalles

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación. Unidad II Metodología de Solución de Problemas 2.1 Descripción del problema (enunciado). Este aspecto nos indica describir de manera objetiva la realidad del problema que se esta investigando. En la descripción

Más detalles

Ministerio de Educación. Base de datos en la Enseñanza. Open Office. Módulo 5: Report Builder

Ministerio de Educación. Base de datos en la Enseñanza. Open Office. Módulo 5: Report Builder Ministerio de Educación Base de datos en la Enseñanza. Open Office Módulo 5: Report Builder Instituto de Tecnologías Educativas 2011 Informes con Oracle Report Builder En su configuración original, OpenOffice

Más detalles

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los

Más detalles

GENERACIÓN DE CÓDIGO

GENERACIÓN DE CÓDIGO GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información

Más detalles

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web.

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web. Modulo I. Introducción a la Programación Web. 1.1 Servidor Web. Antes de analizar lo que es un servidor Web y llevara a cabo su instalación, es muy importante identificar diferentes elementos involucrados

Más detalles

Estándares para el Uso de Herramientas de Desarrollo y Plataformas de Aplicaciones Web

Estándares para el Uso de Herramientas de Desarrollo y Plataformas de Aplicaciones Web Secretaría de Planificación Estratégica Oficina de Informática Estándares para el Uso de Herramientas de Desarrollo y Plataformas de Aplicaciones Web VERSIÓN 4 Julio 2009 Índice 1. Generalidades... 3 1.1

Más detalles

Grado en Ingeniería Informática

Grado en Ingeniería Informática Grado en Ingeniería Informática Competencias Generales y trasversales De acuerdo con la resolución del Consejo de Universidades de fecha 3 de marzo de 2009, para obtener este título de grado en ingeniería

Más detalles

FUNDAMENTOS DE PROGRAMACION CON C#

FUNDAMENTOS DE PROGRAMACION CON C# Capítulo 1 FUNDAMENTOS DE PROGRAMACION CON C# El lenguaje C# C# (léase, en inglés C sharp, y en español C almohadilla) es un lenguaje de programación que permite el desarrollo de aplicaciones para Internet,

Más detalles

18. Camino de datos y unidad de control

18. Camino de datos y unidad de control Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso 2006 2007 18. Camino de datos y unidad de control Un La versatilidad una característica deseable los Los

Más detalles

Guía Metodológica para el diseño de procesos de negocio

Guía Metodológica para el diseño de procesos de negocio Guía Metodológica para el diseño de procesos de negocio La guía desarrollada para apoyar TBA, se diseñó con base en las metodologías existentes para el desarrollo BPM, principalmente en aquellas que soportan

Más detalles

Reporte inicial. Metodología

Reporte inicial. Metodología Reporte inicial Este reporte inicial expondrá las decisiones que tomamos al momento de selección de metodología, plantillas y métodos de recabado de evidencia y por qué tomamos dichas decisiones. Metodología

Más detalles

Software Computacional y su clasificación

Software Computacional y su clasificación Software Computacional y su clasificación Capítulo 5 El software En modo sencillo el software permite que las personas puedan contarle a la computadora cierto tipo de problemas y que ésta a su vez le ofrezca

Más detalles

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable 1. Introducción. El Sistema de Administración de Información de un Negocio Franquiciable (SAINF)

Más detalles

Sistema de marketing de proximidad

Sistema de marketing de proximidad Dizan Vasquez Propuesta de proyecto Sistema de marketing de proximidad ACME México Dizan Vasquez Índice general 1. Descripción 3 2. Resúmen ejecutivo 4 2.1. Objetivo.................................................

Más detalles

2 EL DOCUMENTO DE ESPECIFICACIONES

2 EL DOCUMENTO DE ESPECIFICACIONES Ingeniería Informática Tecnología de la Programación TEMA 1 Documentación de programas. 1 LA DOCUMENTACIÓN DE PROGRAMAS En la ejecución de un proyecto informático o un programa software se deben de seguir

Más detalles

INFORME TECNICO PARA LA ADQUISICIÓN DE LICENCIAS SOFTWARE OFIMÁTICO

INFORME TECNICO PARA LA ADQUISICIÓN DE LICENCIAS SOFTWARE OFIMÁTICO INFORME TECNICO PARA LA ADQUISICIÓN DE LICENCIAS SOFTWARE OFIMÁTICO 1.- Nombre del Área: El área encargada de la evaluación técnica para la adquisición de licencias de software ofimático es la oficina

Más detalles

Diseño orientado al flujo de datos

Diseño orientado al flujo de datos Diseño orientado al flujo de datos Recordemos que el diseño es una actividad que consta de una serie de pasos, en los que partiendo de la especificación del sistema (de los propios requerimientos), obtenemos

Más detalles

Introducción a la Computación

Introducción a la Computación Introducción a la Computación MCC Marco Antonio Crúz Chávez 2003 Sistema de información Es un sistema incluido en otro sistema mayor que recibe, almacena, procesa y distribuye información. Los principales

Más detalles

i@c Presentación de servicios

i@c Presentación de servicios i@c Presentación de servicios I n t e r n e t d e A l t a C a l i d a d, S. A. d e C. V. http://www.iac.com.mx/ Tel: +52 (55) 5575-0151 info@iac.com.mx Servicios de Internet Desarrollo de software Software

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya LENGUAJES Lenguaje es el empleo de notaciones, señales y vocales (voz, palabras) para expresar ideas, comunicarse, y establecer relaciones entre los seres humanos. Un lenguaje no sólo consta de palabras,

Más detalles

Código del programa: PEMDE. Programa Experto en MANEJO DE DATOS CON EXCEL. Modalidad: Virtual. Descripción del programa

Código del programa: PEMDE. Programa Experto en MANEJO DE DATOS CON EXCEL. Modalidad: Virtual. Descripción del programa Código del programa: PEMDE Programa Experto en MANEJO DE DATOS CON EXCEL Modalidad: Virtual Descripción del programa 1 Presentación del programa Justificación Microsoft Excel es la herramienta de manejo

Más detalles

I. OBJETIVOS INTRODUCCIÓN. Oscar Daniel Camuendo Vásquez e-mail: oscardny86@hotmail.com

I. OBJETIVOS INTRODUCCIÓN. Oscar Daniel Camuendo Vásquez e-mail: oscardny86@hotmail.com DISEÑO, IMPLEMENTACIÓN E IMPLANTACIÓN DE UNA APLICACIÓN WEB DE ADMINISTRACIÓN Y CONTROL DE CALIFICACIONES PARA LA UNIDAD EDUCATIVA PARTICULAR OVIEDO (SECCIÓN SECUNDARIA), UTILIZANDO SOFTWARE LIBRE. Oscar

Más detalles

Curso Excel Básico - Intermedio

Curso Excel Básico - Intermedio Curso Excel Básico - Intermedio Clase 4 Relator: Miguel Rivera Adonis Introducción Base de Datos: Definición de Base de Datos Ordenar datos Formulario Filtros Trabajar con Sub-Totales Validación de Datos

Más detalles

Ventajas del software del SIGOB para las instituciones

Ventajas del software del SIGOB para las instituciones Ventajas del software del SIGOB para las instituciones Podemos afirmar que además de la metodología y los enfoques de trabajo que provee el proyecto, el software, eenn ssi i mi issmoo, resulta un gran

Más detalles

Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation.

Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation. WINDOWS Windows, Es un Sistema Operativo. Creado dentro de la línea de sistemas operativos producida por Microsoft Corporation. Dentro de los tipos de Software es un tipo de software de Sistemas. Windows

Más detalles

Introducción. Metadatos

Introducción. Metadatos Introducción La red crece por momentos las necesidades que parecían cubiertas hace relativamente poco tiempo empiezan a quedarse obsoletas. Deben buscarse nuevas soluciones que dinamicen los sistemas de

Más detalles

SÍNTESIS Y PERSPECTIVAS

SÍNTESIS Y PERSPECTIVAS SÍNTESIS Y PERSPECTIVAS Los invitamos a observar, a identificar problemas, pero al mismo tiempo a buscar oportunidades de mejoras en sus empresas. REVISIÓN DE CONCEPTOS. Esta es la última clase del curso.

Más detalles

1. INTRODUCCIÓN 1.1 INGENIERÍA

1. INTRODUCCIÓN 1.1 INGENIERÍA 1. INTRODUCCIÓN 1.1 INGENIERÍA Es difícil dar una explicación de ingeniería en pocas palabras, pues se puede decir que la ingeniería comenzó con el hombre mismo, pero se puede intentar dar un bosquejo

Más detalles

ORBERE. Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE

ORBERE. Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE ORBERE Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE Bilbao, 12 de diciembre de 2006 INDICE 1. METODOLOGÍA DE TRABAJO 2 1.1 Pautas para el Desarrollo 2 1.2 Entorno Tecnológico,

Más detalles

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador

Más detalles

Introducción a la Firma Electrónica en MIDAS

Introducción a la Firma Electrónica en MIDAS Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento

Más detalles

Gestión de Retales WhitePaper Noviembre de 2009

Gestión de Retales WhitePaper Noviembre de 2009 Gestión de Retales WhitePaper Noviembre de 2009 Contenidos 1. Introducción 3 2. Almacén de retales 4 3. Propiedades de los materiales 6 4. Alta de retales 8 5. Utilización de retales en un lote de producción

Más detalles

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS 4.1 Antecedentes históricos El lenguaje de programación BASIC (Beginner's All purpose Symbolic Instruction Code)

Más detalles

Introducción. Definición de los presupuestos

Introducción. Definición de los presupuestos P o r q u é e l p r e s u p u e s t o d e b e s e r e l c a m i n o a s e g u i r p a r a g a r a n t i z a r e l é x i t o d e s u e m p r e s a? Luis Muñiz Economista Introducción El aumento de la incertidumbre

Más detalles

Tema 4. Gestión de entrada/salida

Tema 4. Gestión de entrada/salida Tema 4. Gestión de entrada/salida 1. Principios de la gestión de E/S. 1.Problemática de los dispositivos de E/S. 2.Objetivos generales del software de E/S. 3.Principios hardware de E/S. 1. E/S controlada

Más detalles

PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO...

PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO... Tabla de Contenido PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO... 2 1. LA PRESENCIA DE INFORMACIÓN Y AYUDA ÚTIL PARA COMPLETAR LOS TRÁMITES EN LÍNEA.... 2 2. LA DISPONIBILIDAD DE DIVERSOS

Más detalles