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

Licencia

Enlaces