ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA 208006 – Sistemas Embebidos Act 8: Lección Evalutiva 2 LECTURA 1 El Assembler Como es sabido los sistemas computacionales requieren instrucciones de manera secuencial y así que puedan realizar las funciones para las cuales han sido diseñados, de otra forma serían inservibles. Estas instrucciones de forma secuencial forman lo que se conoce como programas. Existen diferentes formas de escribir programas pero independientemente de esto, los dispositivos semiconductores de procesamiento lo único que comprenden y procesan es el lenguaje de máquina. El lenguaje de máquina está conformado por códigos de instrucción que en esencia son números representados por series binarias, todos los dispositivos de procesamiento tienen un código de operación (op.code) para cada una de sus funciones. Como se ha visto anteriormente se sabe que todas las instrucciones para cualquier lenguaje de máquina tienen por lo menos dos partes; la primera es el comando u operación en si, que dice al procesador cuál es la función que se va a realizar. La segunda parte de la instrucción es el operando, que indica al procesador donde (posición en memoria) hallar o almacenar los datos y otras instrucciones que serán manipuladas. Puesto que para el ser humano manejar este tipo de códigos a la hora de realizar la programación de los dispositivos resultaría extremadamente tedioso se han desarrollado diferentes técnicas y lenguajes de programación tanto de alto como de bajo nivel. El lenguaje ensamblador en un lenguaje de bajo nivel ya que es la representación más directa de los códigos de instrucción mediante nemónicos, un nemónico es un vocablo que en lenguaje ensamblador representa un código de instrucción binario, los nemónicos se emplean para facilitar el aprendizaje, por parte del programador, de los diferentes códigos que soporta un determinado dispositivo. Toda programación realizada en lenguaje ensamblador debe ser compilada o traducida a código de máquina para que el dispositivo pueda entenderla. Para comprender mejor este concepto se presenta el siguiente ejemplo: Se tiene el siguiente código de máquina en Binario: 10100110 01100001 (Hexadecimal: 0xA661).La representación equivalente en lenguaje ensamblador es más fácil de recordar: MOV $61; Esta instrucción significa: cargue el acumulador con el dato almacenado en la posición 61 de la memoria. 1 ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA 208006 – Sistemas Embebidos Act 8: Lección Evalutiva 2 Algunos pros y contras sobre el empleo de este lenguaje se enumeran a continuación: Pros: ·Los programas hechos en lenguaje ensamblador son generalmente más rápidos en su ejecución que los hechos en lenguajes de alto nivel con iguales funcionalidades. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan de 5 a 10 veces más rápido que con lenguajes de alto nivel. ·Los programas hechos en lenguaje ensamblador generalmente ocupan menos espacio de memoria. Un buen programa en lenguaje ensamblador puede ocupar casi la mitad de espacio que su contraparte en lenguaje de alto nivel. ·Utilizando lenguajes de alto nivel, no es un buen comienzo para aprender sobre los MCU’s, mas aún, se necesita conocer todas las características de la arquitectura para poder programar con lenguajes de alto nivel. ·Con el lenguaje ensamblador se pueden crear segmentos de código imposibles de formar en un lenguaje de alto nivel. ·A medida que se aprenda a programar en assembler se pueden ir creando librerías de funciones que se pueden añadir a futuros códigos inclusive implementar en otro tipo de MCU, facilitándose así mucho el trabajo. ·Es bueno conocer el lenguaje ensamblador incluso si se programa en lenguajes de alto nivel puesto que muchos compiladores permiten la incrustación de código ensamblador en algún segmento de programa. Contras: ·Programar en lenguaje ensamblador es difícil de aprender, entender, leer, escribir, depurar y mantener, por eso surgió la necesidad de los lenguajes compilados. ·El lenguaje ensamblador no es 100% portable. ·Programar en lenguaje ensamblador toma tiempo. 2 ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA 208006 – Sistemas Embebidos Act 8: Lección Evalutiva 2 LECTURA 2 Programación y Puesta en Marcha del HC08 Para programar lo MCU’s de la Familia HC08 de freescale se deben tener en cuenta diferentes aspectos tanto físicos (hardware) como de software; en la presente sección se describe estos requerimientos y se presentan opciones funcionales entre la variedad de posibilidades existentes. 1. Programación de Microcontroladores de la Familia HC08. Los microcontroladores de la familia HC08 cuentan con un modo de ejecución, llamado modo usuario, el cual permite el acceso a todos los recursos del sistema es decir que se pueden manipular características como el acceso a memoria, manejo de interrupciones, entre otros. También existe un modo de trabajo especializado en la programación y depuración de los MCU’s conocido como el Modo Monitor. 1.1. Modo monitor. El modo monitor es una aplicación desarrollada para la familia de MCU’s de 8 Bits ubicada en la memoria ROM de los dispositivos, que permite la programación de aplicaciones en la memoria no volátil así como la depuración simple de los programas implementados por los desarrolladores, permite la ejecución de comandos provenientes del PC (Host), tales comandos son empleados para el acceso a cualquier posición de memoria o para descargar los programas en la memoria Flash o RAM. Este programa se ejecuta en modo usuario y se requiere de una serie de condiciones en algunos de los pines del MCU para activarlo después de un Power On Reset (POR).Se deben tener en cuenta los siguientes aspectos a la hora de trabajar en modo monitor: ·Para la comunicación con el PC solo se emplea uno de los pines de E/S, el cual intercambia su configuración (entrada o salida) mientras emula el protocolo serial hacia el PC. ·Durante el modo monitor debe existir una señal de reloj externa cuya frecuencia sea suficiente para que en el MCU se pueda alcanzar la tasa de baudios con la que se comunica con el PC. 3 ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA 208006 – Sistemas Embebidos Act 8: Lección Evalutiva 2 ·Muchos de los MCU’s de esta familia deben ser adecuadamente polarizados para su correcto funcionamiento en modo monitor. ·Algunas características de seguridad son deshabilitadas al entrar en modo monitor, entre las que se tiene COP (Computer Operation Properly), SWIInstruction y FLASH Protection. Cabe aclarar que el modo monitor no es una sustitución de sistemas mas sofisticados que permiten la completa emulación de los dispositivos, pero si es una forma económica de interconectar los MCU’s con un PC para el envío de comandos de manera serial realizando labores de lectura, escritura y depuración simple en los registros y memoria del MCU. Para entrar en modo monitor se requiere: ·Un Software adecuado en el PC que se encargue de la comunicación y programación. ·Un cable serial y un POD (Circuito de Polarización y de soporte para la comunicación serial) empleados para brindar la polarización y señales adecuadas así como para la transmisión de comandos desde el PC. 1.2 Modo de Ejecución. Este es el modo en el cual la CPU ejecuta normalmente el programa almacenado en la memoria FLASH, teniendo como origen la dirección almacenada en el Vector de RESET ($FFFE:$FFFF).Para la puesta en marcha de un dispositivo los requerimientos en hardware son más simples que los necesarios para la programación LECTURA 3 Fases de Procesamiento de un Programa en C A continuación se presentan las diferentes etapas que hacen parte del procesamiento de un programa en C hasta obtener el código de máquina correspondiente también conocido como código objeto. 1. El Pre-procesador. Este es un componente característico de C es decir que no lo poseen otros lenguajes de programación su tarea es actuar sobre el programa fuente antes que 4 ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA 208006 – Sistemas Embebidos Act 8: Lección Evalutiva 2 el compilador, convirtiéndolo en otro archivo fuente “predigerido”. En general las transformaciones realizadas por el pre-procesador incluyen: ·Eliminación de los comentarios. ·Sustitución se las constantes simbólicas por sus valores reales. ·Inclusión en el archivo fuente el contenido de los archivos declarados con las sentencias #include <archivo> (a estos archivos se les suele llamar cabeceras) ·Sustituir en el archivo fuente las macros declaradas con sentencias #define (p.e. #define CIEN 100). 2. El Compilador. Su misión consiste en traducir a lenguaje de máquina el programa escrito en lenguaje C, contenido en uno o más archivos fuente entregados por el preprocesador, generando lo que se conoce como un archivo objeto, algunos compiladores pasan por una fase intermedia en lenguaje ensamblador. También puede detectar errores durante la compilación presentando un mensaje dependiendo del error. 3. El enlazador Un archivo objeto está escrito en código máquina, pero no puede ser ejecutado por si solo, puesto que le falta código que se encuentra en otros archivos que lo complementan. El enlazador se encarga de generar un ejecutable binario, a partir del contenido de los archivos objetos y de diferentes Librerías. Más específicamente el enlazador toma los archivos de código objeto, generados en los primeros pasos del proceso de compilación y la información de los demás recursos necesarios (Librerías), remueve recursos que no son necesarios y enlaza el código objeto con las librerías utilizadas produciendo finalmente un archivo ejecutable. Librerías. Las Librerías no son mas que funciones precompiladas, que contienen el código necesario para realizar funciones especificas, a las que el archivo fuente llama. Estas librerías son realizadas para mantener el lenguaje lo más sencillo posible pero brindando las herramientas y funciones estándar que cualquier programador pueda necesitar. 5 ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA 208006 – Sistemas Embebidos Act 8: Lección Evalutiva 2 Estas funciones están agrupadas en un conjunto de librerías de código objeto, que constituyen la llamada librería Estándar. La llamada de estas librerías se realiza de la misma manera que a cualquier función por lo tanto deben ser declaradas antes de ser llamadas por el programa, para tal efecto se emplea la sentencia #include. Un ejemplo de librería es la llamada ‘stdio’ (Standar Imput/Output) que posee diferentes funciones tanto para leer como para escribir datos de diferentes dispositivos periféricos como teclados, unidades de almacenamiento, pantallas, impresoras, etc. 6