TP 1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

Trabajo Práctico I

Fundamentos de Programación de Sistemas Embebidos


Especialización en Sistemas Embebidos
Cohorte 2018
Trabajo Práctico I Fundamentos de Programación de Sistemas Embebidos

Objetivos
Adquirir destreza en el uso de Eclipse y GCC como herramientas de desarrollo de aplicaciones
en lenguaje C, utilizando Linux como sistema operativo.

Conocer las herramientas de depuración existentes en Eclipse, su metodología de uso y


potencialidades.
Recordar conceptos básicos de lenguaje C.

Herramientas requeridas
Para el desarrollo del presente trabajo práctico deberá contar con:
Equipo PC utilizando Linux como sistema operativo.
La suite de desarrollo de GNU, incluyendo binutils, gcc y make (paquete build-essential en
distribuciones basadas en debian).
Eclipse IDE for GNU ARM (versión recomendada Oxygen 3a)

1. Reflexión de bits de una palabra de ancho fijo


La reflexión de bits de un valor de tipo entero, es otro valor de tipo entero donde los bits
constitutivos del mismo se encuentran reflejados como si se viesen a través de un espejo. Esto es,
el primer bit (bit menos significativo) del valor original se convierte en el bit más significativo del
valor reflejado (véase Cuadro 1).

Valor original: 0 0 1 1 0 0 1 0 5010 3216


msb lsb
Valor reflejado: 0 1 0 0 1 1 0 0 7610 4C16

Cuadro 1: Ejemplo de valores reflejados utilizando valores de 8 bits

Actividades:
1. Cree un proyecto en Eclipse (gestionado automáticamente) para desarrollar una aplicación
en lenguaje C que permita obtener, a partir de un valor entero de 8 bits sin signo, la represen-
tación de su valor reflejado. Para lograr esto utilice divisiones y el operador resto, de modo
que el algoritmo realice divisiones sucesivas. La cantidad de iteraciones deberá estar dada
por el tamaño de la variable que contiene los datos a convertir, para esto utilice el operador
sizeof. En la implementación utilice como mínimo variables para contener el valor original
(oDato) y el valor reflejado (rDato).
2. Ejecute la aplicación utilizando como valores de prueba los indicados en el Cuadro 1.
3. Inicie una sesión de depuración, conmutando a la Perspectiva de Depuración de Elcipse.
Identifique aquí:

Los controles asociados a la ejecución de la aplicación (continuar ejecución normal,


detener y finalizar, pausar, finalizar y reiniciar, ejecutar una operación ingresando a las
funciones, ejecutar una operación sin ingresar a una función y subir al nivel de ejecución
inmediato superior).
Las vistas disponibles (Windows/Show View ), particularmente las vistas de Variables,
Breakpoints, Memory, Disassembly y Expressions.

Mg. Ing. E. Sergio Burgos 1


Trabajo Práctico I Fundamentos de Programación de Sistemas Embebidos

4. Establezca la vista de Variables (todas las variables definidas en la aplicación aparecerán


listadas). Realice una ejecución paso a paso del algoritmo desarrollado (F6) y observe los
resultado.
5. Inicie nuevamente una sesión de depuración, al alcanzar el primer punto de interrupción
(breackpoint), agregue en la vista de expresiones dos expresiones que permitan conocer la
dirección de memoria de las variables oDato y rDato.
A partir de las direcciones de memoria obtenidas, agregue un monitor de memoria (vista
Memory), de modo que las direcciones de las variables anteriores sean visibles.
Observe las opciones presentes en el menú contextual (botón derecho del mouse) asociado al
contenido del monitor de memoria. Desde allí configure como formato de representación 16
columnas de 1 byte cada una.
Realice una ejecución paso a paso del algoritmo observando el comportamiento del monitor
de memoria.
6. Desde la perspectiva de edición, duplique el proyecto original, en la nueva copia modifique
los tipos de variables de modo que se trabaje con valores de 32 bits con signo. Realice los
pasos descriptos en el punto 5 pero configurando la vista de memoria para que represente
valores de 32 bits hexadecimales.
A partir de las observaciones realizadas, ¿la arquitectura del sistema que está utilizando es
de tipo big-endian o little-endian?.
7. Ejecute paso a paso la aplicación anterior utilizando como valores de prueba 50 y -50. Observe
el contenido de las direcciones de memoria asociadas a las variables oDato y rDato. ¿Qué
puede concluir respecto de la representación de los números negativos que utiliza el entorno?

2. Números enteros: partes y representaciones


Es muy común, cuando se trabaja en lógica digital, referirse a los n bits más significativos
o a los m bits menos significativos. En estos casos se consideran que, en una representación de
un número binario, contando desde la izquierda, los bits más significativos serán los primeros n
mientras que los menos significativos serán los últimos m.
Estas ideas de particiones utilizadas en representaciones de números binarios pueden extender-
se a representaciones de valores en otras bases.

Actividades:

1. Desarrolle una aplicación que utilice funciones para resolver los siguientes problemas:

Retornar la cantidad de dígitos de un valor contenido en una variable de tipo entero,


sin signo de 32 bits.
Retornar un valor conformado por los n dígitos más significativos de un valor entero, sin
signo de 32 bits. Considere que los dígitos más significativos se cuentan en función de la
cantidad de dígitos contenidos en la variable (no en su capacidad de almacenamiento).
Mostrar por pantalla la representación en base 2 de un valor entero, sin signo de 32
bits.
Retornar la representación ASCII del dígito menos significativo de un valor entero de
32 bits, sin signo, dado como argumento.
Utilizando la función anterior, mostrar por pantalla la representación en base 10 de un
valor de 32 bits, sin signo, dado como argumento.
Nota: No es válido en la solución utilizar salidas con formato (printf), solo la función
putchar.

Mg. Ing. E. Sergio Burgos 2


Trabajo Práctico I Fundamentos de Programación de Sistemas Embebidos

Figura 1: Agregando la librería matemática de C al proyecto.

Considere para la implementación de las funciones anteriores el uso de la función pow. Al


utilizarla, deberá agregar la librería ‘m’ (matemática) al proceso de enlazado, para esto,
acceda a las propiedades del proyecto y realice la configuración que se observa en la Figura
1.
La aplicación deberá permitir verificar el correcto funcionamiento de las funciones anteriores,
incluyendo el prototipo de las funciones (previo a la función main) y su implementación. A
modo de ejemplo, podría generar una salida como:

Ingrese un valor de prueba: 98012


Tiene 5 dígitos
Cantidad de dígitos significativos 1 = 9
Cantidad de dígitos significativos 2 = 98
Cantidad de dígitos significativos 3 = 980
Cantidad de dígitos significativos 4 = 9801
Cantidad de dígitos significativos 5 = 98012
Cantidad de dígitos significativos 6 = 98012
Cantidad de dígitos significativos 7 = 98012
Cantidad de dígitos significativos 8 = 98012
Representación en base 2: 0000 0000 0000 0001 0111 1110 1101 1100
Valor mostrado por caracteres: 9 8 0 1 2

2. Copie el proyecto anterior dentro del espacio de trabajo dando origen a un nuevo proyecto.
Separe la implementación de las funciones anteriores de la aplicación principal, agregando
un nuevo archivo .h y .c que contenga las funciones desarrolladas. Verifique el correcto
funcionamiento de la aplicación.
3. Elimine todos los archivos generados durante el proceso de construcción de las dos aplica-
ciones anteriores (Clean). Construya la aplicación de la actividad 1 y observe el resultado
obtenido en la salida de Consola generada por Eclipse en la perspectiva C/C++. Realice la
misma tarea sobre el proyecto de la actividad 2. ¿Qué diferencias observa?

Mg. Ing. E. Sergio Burgos 3

También podría gustarte