Examen: Parcial 1:2025_02_24:Robotica - myTeachingURJC/2019-20-LAB-AO GitHub Wiki
Examen Parcial 1: 2025-02-24. Robotica
- Tiempo: 50 minutos
- Descripción: Examen Parcial 1. Laboratorio. Grado en Ingeniería de Robótica Software
- Fecha: 2025/Feb/24
- Temario: Sesiones L1-L4
Contenido
Enunciado
El examen se ha realizado a través de Aula virtual. Tiene dos partes: Test y un programa
Test (5 ptos)
- Realizado a través de Aula virtual
- 10 preguntas tipo test
- Las respuesats incorrectas restan un 25% del valor de la pregunta
- Solución disponible en Aula virtual
Programa (5 ptos)
Los displays de 7 segmentos se utilizan para la escritura de mensajes mostrando secuencialmente dígitos o caractéres, y también se pueden utilizar para realizar animaciones.
Escribir un programa en ensamblador del RISC-V, ochos.s, que realice una animación que dibuje ochos continuamente en un display de siete segmentos y que guarde en una variable localizada en la primera posición del segmento de datos el número de ochos dibujados
Cada ocho se dibuja segmento a segmento. Sólo puede haber encendido un segmento cada vez. Se ha de empezar por el segmento a, seguido por los segmentos b, g, e, d, c, g y f para repetir de nuevo la secuencia infinitamente. En esta animación se muestra el comportamiento del display cuando se simula el código a baja velocidad
El display de 7 segmentos está mapeado en la memoria principal, en la dirección 0xFFFF0010
NOTA: Envía el fichero ochos.s con la solución como una entrega de laboratorio.
BONUS
Conseguirás los bonus si el programa funciona correctamente utilizando menos de 25 instrucciones
Solución al programa
- Fichero: ochos.s (ESPECIFICACION)
#-- Direccion del display de 7 segmentos derecho
.eqv DISP_R 0xFFFF0010
#-- Valor a enviar para encender cada segmento
.eqv SEG_A 0x1
.eqv SEG_B 0x2
.eqv SEG_C 0x4
.eqv SEG_D 0x8
.eqv SEG_E 0x10
.eqv SEG_F 0x20
.eqv SEG_G 0x40
.data
cont: .word 0 #-- Contador de ochos
.text
#-- Direccion del display de 7 segmentos
li x10, DISP_R
#-- Direccion de la variable contador
la x20, cont
#-- Inicializar contador
li x2, 0
bucle:
#-- Secuencia: a,b,g,e,d,c,g y f
#-- Encender Segmento a
li x1, SEG_A
sw x1, 0(x10)
#-- Encender segmento b
li x1, SEG_B
sw x1, 0(x10)
#-- Encender segmento g
li x1, SEG_G
sw x1, 0(x10)
#-- Encender segmento e
li x1, SEG_E
sw x1, 0(x10)
#-- Encender segmento d
li x1, SEG_D
sw x1, 0(x10)
#-- Encender segmento c
li x1, SEG_C
sw x1, 0(x10)
#-- Encender segmento g
li x1, SEG_G
sw x1, 0(x10)
#-- Encender segmento f
li x1, SEG_F
sw x1, 0(x10)
#-- Incrementar el contador
addi x2,x2,1
#-- Almacenar el contador en memoria
sw x2, 0(x20)
b bucle
#-- Como el programa es un bucle infinito, nunca
#-- terminara, por lo que las instrucciones de
#-- terminacion no son necesarias en este caso
#-- Terminar
#li a7, 10
#ecall
Este programa tiene 24 instrucciones, por lo que se cumplen los bonus
Evaluación
La evaluación del programa se hace en dos fases:
-
Funcionalidad (2.5 ptos): Se comprueba si el programa funciona, y si cumple con las especificaciones (Nombre del fichero correcto, ensablado sin errores, sin errores en tiempo de ejecución, resultado correcto, variables definidas en sus posiciones de memoria especificadas, etc). Esto se hace mediante un script de test, que automatiza el proceso
-
Código (2.5 ptos): Se inspecciona visualmente cómo está hecho el código: código limpio, claro, con comentarios, instrucciones correctas, fallos de programación, etc...
TEST automático
TODO
Autores
- Juan Ignacio Pérez
- Juan González-Gómez (Obijuan)