Trabajo Colaborativo 2

20
 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA SISTEMAS EMBEBIDOS TRABAJO COLABORATIVO 2 DESARROLLO DE SOFTWARE PARA SISTEMAS EMBEBIDOS LUIS CARLOS REMON COTES NARCISO ORTIZ RUIZ JHOAN BARRAZA BARRIOS PEDRO ELIAS MUÑOS GRUPO 208006_5 TUTOR OSCAR IVAN VALDERRAMA FECHA 06/11/2012

Transcript of Trabajo Colaborativo 2

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA

SISTEMAS EMBEBIDOS

TRABAJO COLABORATIVO 2

DESARROLLO DE SOFTWARE PARA SISTEMAS EMBEBIDOS

LUIS CARLOS REMON COTESNARCISO ORTIZ RUIZJHOAN BARRAZA BARRIOSPEDRO ELIAS MUOSGRUPO208006_5

TUTOROSCAR IVAN VALDERRAMA

FECHA06/11/20121. INTRODUCCIONPara el diseo, creacin e implementacin de un programa se hacen necesario etapas que van desde el Diseo del algoritmo, codificacin del mismo, su traduccin a lenguaje mquina, la prueba del programa y finalmente su depuracin. Durante la etapa de diseo se plantea el problema a resolver y se analizan las posibles soluciones, valindonos de esquemas como diagramas de flujo para finalmente tomar como alternativa la que ms se ajuste a nuestros requerimientos. La codificacin del programa consiste en traducir el diseo obtenido en la etapa anterior en algn lenguaje de programacin, para el caso de nuestro modulo en curso estudiaremos los lenguajes ensamblador y lenguaje C. La traduccin al lenguaje mquina es realizada por el compilador con el que trabajemos este se encarga de crear un programa objeto, esto es, el programa escrito como una secuencia de ceros y unos para que pueda ser interpretado por el procesador. La prueba del programa consiste en verificar que el programa funcione sin adecuadamente y sin errores. Y finalmente en la etapa de depuracin se deben eliminar las diferentes fallas detectadas en el programa durante la fase de prueba.Durante el desarrollo de la presente actividad realizaremos una exploracin por los contenidos de la Unidad II del mdulo SISTEMAS EMBEBIDOS, explorando como primera medida el concepto de programacin de sistemas embebidos utilizando el lenguaje Assembler para lo cual se elaborara un manual con las instrucciones bsicas de programacin haciendo uso de un compilador que est incluido en todos los sistemas operativos con Windows (Debugger), tambin se incluirn en esta fase del trabajo los diferentes ensambladores y macroensambladores utilizados en el desarrollo de sistemas embebidos. En la segunda fase de este trabajo realizaremos una prctica de desarrollo de software para sistemas embebidos haciendo uso de la herramienta de la familia Freescale denominada: CodeWarrior. Y para finalizar el desarrollo del presente trabajo en la fase tres abordaremos el concepto de programacin de microcontroladores y microprocesadores en lenguaje C para lo cual igual que en la primera fase se elaborara un manual con las instrucciones bsicas de programacin.

Fase 1. Assembler

Realice un pequeo manual de cmo programar microcontroladores y microprocesadores en Assembler. Describa los diferentes ensambladores y macroensambladores.MANUAL DE PROGRAMACION DE MICROCONTROLADORDiseoEn la etapa de diseo se plantea el problema a resolver y se propone la mejor solucin, creando diagramas esquemticos utilizados para el mejor planteamiento de la solucin.

Codificacin

La codificacin del programa consiste en escribir el programa en algn lenguaje de programacin. (En este caso en ensamblador).

Traduccin

La traduccin al lenguaje mquina es la creacin del programa objeto, esto es, el programa escrito como una secuencia de ceros y unos que pueda ser interpretado por el procesador.

Prueba del programa

La prueba del programa consiste en verificar que el programa funcione sin errores, o sea, que haga lo que tiene que hacer.

Depuracin

La ltima etapa es la eliminacin de las fallas detectadas en el programa durante la fase de prueba. La correccin de una falla normalmente requiere la repeticin de los pasos comenzando desde el primero o el segundo.

MACROENSAMBLADORES

Son ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su potencia, normalmente son programas robustos que no permanecen en memoria una vez generado el programa objeto. Pseudoinstrucciones para definir segmentos:

SEGMENT: Define el inicio de un nuevo segmento. Su formato es: nombre SEGMENT alineacin combinacin clase

ENDS: Define el final de un segmento. Su formato es: nombre ENDS

Los parmetros del SEGMENT son informacin para el ligador:

Alineacin: Define la direccin a partir de donde puede colocarse el segmento:

PARA: La direccin inicial del segmento es un mltiplo de 16 (10h).

PAGE: La direccin inicial del segmento es donde empieza una pgina (mltiplo de 100h).

WORD: La direccin inicial del segmento es una direccin par.

BYTE: EL segmento inicia donde sea.

Combinacin: Define la forma en que el segmento puede combinarse con otros segmentos para que se tenga el mismo nombre y clase.

OMITIRLA: Segmento privado, es decir, no puede combinarse.

STACK: Segmento para usarse con el stack.

PUBLIC: Este segmento puede unirse con todos los segmentos del mismo y la misma clase para formar una sola.

COMMON: Todos los segmentos del mismo nombre y clase se colocan a partir de la misma direccin.

Cuando se tienen dos segmentos con el mismo nombre y clase y son pblicos, al ligar se unen en un solo segmento no importando que estn en archivos distintos. Cuando se usa la psudoinstruccin COMMON van a utilizar el mismo espacio de memoria, si son de diferente tamao en memoria, se toma el tamao del mayor bloque.

Clase: Indica el tipo de datos que contiene el segmento, siempre se ponen entre comillas y pueden definirse propios. DATA: Datos. CODE: Cdigo. STACK: Pila.

Pseudoinstrucciones para reservar memoria y definir constantes:

DB: Sirve para reservar un byte en la memoria con un valor determinado. Su formato es: [nombre] DB val1 [, val2, ..., valn]

DW: Reserva un dato de dos bytes (una palabra) con un valor inicial. Su formato es: [nombre] DW val1 [, val2, ..., valn] DD: Reserva un dato de cuatro bytes (doble palabra) con un valor inicial. Su formato es: [nombre] DD val1 [, val2, ..., valn] DQ: Reserva un dato de ocho bytes (cudruple palabra) con un valor inical. Su formato es: [nombre] DQ val1 [, val2, ..., valn]

DT: Reserva un dato de diez bytes con un valor inicial. Su formato es: [nombre] DT val1 [, val2, ..., valn] vali representa una expresin formada por nmeros en cualquiera de las siguientes bases: XXXXb Binaria XXXXo Octal XXXXd Decimal XXXX Decimal XXXXh Hexadecimal Tambin se pueden tener expresiones de esos nmeros con los operadores de: + Suma - Resta Negacin (C2) * Multiplicacin / Divisin Tambin pueden ser etiquetas o expresiones aritmticas que involucren etiquetas o bien cadenas de caracteres, entre apstrofes.

EQU: Permite definir constantes. Su formato es: etiq EQU val ORG: Define un desplazamiento inicial para ensamblar las siguientes lneas. Su formato es: ORG val

Pseudoinstrucciones para definir procedimientos:

PROC: Define el inicio de una subrutina. Nombre PROC tipo

ENDP: Define el final de una subrutina. Nombre ENDP

El tipo de la subrutina puede ser:

NEAR: Cercano.

FAR: Lejano.

OMITIRLO: Se define por omisin de tipo NEAR:

Un ensamblador de archivo, revisa errores de sintaxis, es decir, revisa que el programa est bien escrito, ms no que funcione.

Para poner comentarios dentro del programa se inician con un ; y todo lo que este a la derecha ser un comentario sobre el mismo rengln.

La estructura del archivo quedara:

Datos SEGMENT PARA DATA

; Definicin de variables y constantes Datos ENDS

Pila SEGMENT PARA STACK STACK DW 100 DUP (0) ; Indica que se tiene que repetir la instruccin n-veces con el ; valor que aparece en los parntesis

Pila ENDS Codigo SEGMENT PARA CODE ASSUME DS:Datos, CS:Codigo, SS:Pila, ES:NOTHING

; Sirve para indicarle al macroensamblador cuales segmentos

Tipos De Ensambladores

Aunque todos los ensambladores realizan bsicamente las mismas tareas, podemos clasificarlos de acuerdo a caractersticas. As podemos clasificarlos en:Ensambladores Cruzados (Cross-Assembler):

Se denominan as los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrn las computadoras donde va a ejecutarse el programa objeto producido.El empleo de este tipo de traductores permite aprovechar el soporte de medios fsicos (discos, impresoras, pantallas, etc.), y de programacin que ofrecen las mquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.

Ensambladores Residentes:Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecucin, al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se haca en Cross-assembler, y sin necesidad de programas simuladores.Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo, tambin ocupar memoria el programa fuente y el programa objeto. Esto obliga a tener un espacio de memoria relativamente amplio. Es el indicado para desarrollos de pequeos sistemas de control y sencillos automatismo empleando microprocesadores.La ventaja de estos ensambladores es que permiten ejecutar inmediatamente el programa; la desventaja es que deben mantenerse en la memoria principal tanto el ensamblador como el programa fuente y el programa objeto.

Macroensambladores:Son ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su potencia, normalmente son programas robustos que no permanecen en memoria una vez generados el programa objeto. Puede variar la complejidad de los mismos, dependiendo de las posibilidades de definicin y manipulacin de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes.

Microensambladores:Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo de instrucciones, es decir, que el intrprete de las mismas interpretaba de igual forma un determinado cdigo de operacin.El programa que indica al intrprete de instrucciones de la UCP cmo debe actuar se denomina microprograma. El programa que ayuda a realizar este microprograma se llama microensamblador. Existen procesadores que permiten la modificacin de sus microprogramas, para lo cual se utilizan microensambladores.

Ensambladores de una fase:Estos ensambladores leen una lnea del programa fuente y la traducen directamente para producir una instruccin en lenguaje mquina o la ejecuta si se trata de una pseudo instruccin. Tambin va construyendo la tabla de smbolos a medida que van apareciendo las definiciones de variables, etiquetas, etc.Debido a su forma de traduccin, estos ensambladores obligan a definir los smbolos antes de ser empleados para que, cuando aparezca una referencia a un determinado smbolo en una instruccin, se conozca la direccin de dicho smbolo y se pueda traducir de forma correcta. Estos ensambladores son sencillos, baratos y ocupan poco espacio, pero tiene el inconveniente indicado.

Ensambladores de dos fases:Los ensambladores de dos fases se denominan as debido a que realizan la traduccin en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de smbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los smbolos utilizados y las posiciones que se les ha asignado. Estos ensambladores son los ms utilizados en la actualidad.

Ensambladores de alto nivel:Los ms sofisticados ensambladores de alto nivel proporcionan abstracciones del lenguaje tales como: Estructuras de control avanzadas Declaraciones e invocaciones de procedimientos/funciones de alto nivel Tipos de datos abstractos de alto nivel, incluyendo las estructuras/records, uniones, clases, y conjuntos Procesamiento de macros sofisticado (aunque est disponible en los ensambladores ordinarios desde finales 1960 para el IBM/360, entre otras mquinas) Caractersticas de programacin orientada a objetos

Fase 2. Software CodeWarrior Descargue e instale el software CodeWarrior y realice la prctica planteada en la leccin 10 de la unidad 2. Desarrollo de software para sistemas embebidos, capitulo 5. Prcticas bsicas y aplicaciones. Anexe informe y capturas de pantalla del proceso realizado.

SIMULACION N1

SIMUACION N2

SIMULACION N3

SIMULACION N4

SIMULACION N5

SIMULACION N6

SIMULACION N7

SIMULACION N8

Fase 3. Programacin en C Realice un pequeo manual de cmo programar microcontroladores y microprocesadores en C.

Programacin en C para Microcontroladores y Microprocesadores

C es un lenguaje bastante conciso y en ocasiones desconcertante. Considerado ampliamente como un lenguaje de alto nivel, posee muchas caractersticas importantes, tales como: programacin estructurada, un mtodo definido para llamada a funciones y para paso de parmetros, potentes estructuras de control, etc.Sin embargo gran parte de la potencia de C reside en su habilidad para combinar comandos simples de bajo nivel, en complicadas funciones de alto nivel, y en permitir el acceso a los bytes y words del procesador. En cierto modo, C puede considerarse como una clase de lenguaje ensamblador universal. La mayor parte de los programadores familiarizados con C, lo han utilizado para programar grandes mquinas que corren Unix, MS-DOS, e incluso Windows (programacin de drivers). En estas mquinas el tamao del programa no es importante, y el interface con el mundo real se realiza a travs de llamadas a funciones o mediante interrupciones DOS. As el programador en C slo debe preocuparse en la manipulacin de variables, cadenas, matrices, etc.Con los modernos microcontroladores de 8 bits, la situacin es algo distinta. Tomando como ejemplo el 8051, el tamao total del programa debe ser inferior a los 4 u 8K (dependiendo del tamao de la EEPROM), y debe usarse menos de 128 o 256 bytes de RAM. Idealmente, los dispositivos reales y los registros de funciones especiales deben ser direccionados desde C. Las interrupciones, que requieren vectores en direcciones absolutas tambin deben ser atendidas desde C. Adems, se debe tener un cuidado especial con las rutinas de ubicacin de datos para evitar la sobre escritura de datos existentes.Uno de los fundamentos de C es que los parmetros (variables de entrada) se pasan a las funciones (subrutinas) en la pila, y los resultados se devuelven tambin en la pila. As las funciones pueden ser llamadas desde las interrupciones y desde el programa principal sin temor a que las variables locales sean sobre escritas.Una seria restriccin de la familia 8051 es la carencia de una verdadera pila. En un procesador como el 8086, el apuntador de la pila tiene al menos 16 bits. Adems del apuntador de pila, hay otros registros que pueden actuar como apuntadores a datos en la pila, tal como el BP (Base Pointer). En C, la habilidad para acceder a los datos en la pila es crucial. Como ya ha sido indicado, la familia 8051 est dotada de una pila que realmente slo es capaz de manejar direcciones de retorno. Con 256 bytes disponibles, como mximo, para la pila no se pueden pasar muchos parmetros y realizar llamadas a muchas funciones.

Otras consideraciones dignas de destacar para el C en un microcontrolador son: Control de los perifricos internos y externos del chip. Servicio de las interrupciones. Hacer el mejor uso de los limitados conjuntos de instrucciones. Soportar diferentes configuraciones de ROM/RAM. Un alto nivel de optimizacin para conservar el espacio de cdigo. Control de la conmutacin de registros. Soporte para los derivados de la familia (87C751, 80C517 etc.). El compilador Keil C51 contiene todas las extensiones para el uso del lenguaje C con microcontroladores. Este compilador C utiliza todas las tcnicas apuntadas por Intel con su PLM51, pero aade caractersticas propias tales como la aritmtica en coma flotante, la entrada/salida (I/O) con formato, etc. Se trata de la implementacin del estndar ANSI C especfico para los procesadores 8051.Ventajas del lenguaje C frente al Ensamblador1-Mayor facilidad de programacin. El lenguaje C dispone de un conjunto de operadores, datos y comandos que le confieren, al mismo tiempo, potencia y facilidad de programacin, lo que permite un tiempo de desarrollo de programas mucho menor que con el lenguaje Ensamblador.

2-Portabilidad entre sistemas. Con el lenguaje C se asegura la portabilidad entre diferentes plataformas hardware o software, lo que quiere decir, por ejemplo, que un algoritmo implementado en C en una plataforma con Linux puede ser adaptado, prcticamente sin modificaciones, a un PIC. Esto permite el aprovechamiento de numerosos algoritmos que se encuentran ya disponibles para otras plataformas diferentes a los PIC. El Ensamblador, por el contrario, ya se ha indicado que es fuertemente dependiente del hardware, por lo que no permite su adaptacin de una plataforma a otra distinta.3-Desarrollo de programas estructurados. El lenguaje C permite desarrollar programas estructurados en funciones, bloques o procedimientos, lo que proporciona una compartimentacin del cdigo. Por el contrario, el Ensamblador no es un lenguaje estructurado, lo que lleva a que los programas desarrollados en ensamblador sean lineales, con el inconveniente que esto implica en lo que se refiere a claridad del cdigo escrito.4-Fcil mantenimiento de los programas. Por ser un lenguaje de compresin relativamente fcil.

A pesar de todas las ventajas indicadas para el lenguaje C, no se puede prescindir totalmente del Ensamblador. ste, al estar ms cercano al nivel del hardware que se programa, permite generar cdigo ms compacto (menor nmero de instrucciones para realizar una misma tarea), lo que lleva a una mayor velocidad de ejecucin.

Aunque el desarrollo de programas para microcontroladores es posible realizarlo totalmente en Ensamblador, la utilizacin del lenguaje C supone una alternativa muy interesante por su rapidez, facilidad, y portabilidad, sin que esto signifique que este nuevo enfoque venga a sustituir definitivamente al Ensamblador, en casos en los que se necesita crear partes de cdigo sujetas a determinadas restricciones ( reducido nmero de instrucciones, alta velocidad de ejecucin,) se puede implementar esa parte de cdigo directamente en Ensamblador dentro de un programa en C, consiguiendo de este modo un cdigo mucho ms eficiente. Esta ventaja no la tienen otros compiladores de Basic Pascal.

Estructura de un programa en CTomaremos en cuenta este ejemplo, escrito para el compilador Hitech PICC. #include // Incluir este archivo

/* La siguiente directiva establece la Palabra de Configuracin */ __CONFIG ( PWRTEN & WDTDIS & XT & UNPROTECT );

void pausa(void) { // Llave de apertura del bloque de pausa unsigned int c; // Declarar variable c (de 16 bits) for(c=0; c