Download enunciado del Microcontrolador
Document related concepts
no text concepts found
Transcript
Objetos que representan comportamiento Simulador de Microcontroladores Un microcontrolador es una computadora hecha en un solo chip (aunque puede ser en varios). Suelen utilizarse en la industria para controlar maquinas herramientas, robots, teléfonos celulares, etc. Un fabricante de microcontroladores le solicita a Ud. que haga un simulador en java de uno de sus modelos de microcontroladores, el cual consta de: • • • 1024 bytes de memoria de datos Dos acumuladores de 1 byte cada uno identificados como A y B. Un program counter (PC) que indica la dirección en la memoria de programa de la próxima instrucción a ejecutar, se incrementa cada vez que el microcontrolador ejecuta una instrucción. El fabricante nos pasó la lista de instrucciones mínimas que debe soportar Mnemotécnico Descripción NOP No operación, el programa sigue en la próxima instrucción. ADD Suma los valores de los dos acumuladores SUB Resta el valor del acumulador A al valor del acumulador B DIV Divide el valor del acumulador A por el valor del acumulador B SWAP Intercambia los valores de los acumuladores LOD addr Carga el acumulador A con el contenido de la memoria de datos en la posicion addr STR addr Guarda el valor del acumulador A en la posicion addr de la memoria de datos LODV val Carga en el acumulador A el valor val El sistema debe permitir agregar nuevas instrucciones en forma simple a medida que el fabricante lo solicite. La memoria datos tiene un rango de direcciones válidas del 0 al 1023. Las operaciones aritméticas ADD, SUB y DIV siempre tienen como resultado un valor de 2 bytes, el menos significativo queda en el acumulador A y el más significativo en el B (ver ejemplo en test de Suma de un número mayor a 255). Si se produce un error durante la ejecución de un programa, ya sea porque se indicó una dirección de memoria fuera de rango, o se produjo un error por división por 0, el programa se detiene y el PC queda con la dirección de la instrucción que causó el error. Los métodos que reciben direcciones como parámetros deben controlar que éstas estén en el rango válido, en caso contrario lanzar una IllegalArgumentException indicando el problema. Se pide que el microcontrolador pueda resolver estos programas: Objetivo Programa Resultado esperado Hacer avanzar 3 posiciones el PC Sumar 10 + 22 NOP NOP NOP LODV 10 PC pasa a 3 En el acumulador B debe quedar 32, en el A 0 (cero) 1 Objetos que representan comportamiento Sumar 100 + 50 Intentar dividir 2 por 0 Sumar 2 + 8 + 5 SWAP LODV 22 ADD LODV 100 SWAP LODV 50 ADD LODV 0 SWAP LODV 2 DIV LODV 2 STR 0 LODV 8 SWAP LODV 5 ADD SWAP LOD 0 ADD Hay que distribuir el resultado de la suma (150) en dos signed bytes : nos queda 127 (MAX_VALUE) en Acumulador B y 23 en Acumulador A El programa debe tirar una excepción representativa y el PC debe quedar en 4 (el índice de la instrucción donde ocurrió el error). En el Acumulador B debe quedar 15, en el A 0 (cero) Su solución debe implementar la siguiente interface: public interface MicroController { /*** programacion: carga y ejecuta un conjunto de instrucciones en memoria */ public void run(List<Instruccion> program); /*** Getters y setters de acumuladores A y B */ public byte getAAcumulator(); public void setAAcumulator(byte value); public byte getBAcumulator(); public void setBAcumulator(byte value); /*** Manejo public void public byte public void de program counter */ advancePC(); // Avanza el program counter una instrucción getPC(); reset(); // Inicializa el microcontrolador /*** Manejo de dirección de memoria de datos: getter y setter */ public byte getData(int addr); public void setData(int addr, byte value); } 2 Objetos que representan comportamiento Parte 2: 1) Interesa poder diferenciar los momentos de carga y ejecución de un programa. En particular: a) carga de un programa en memoria (sin ejecución, el microcontrolador debe estar detenido) b) borrar la memoria de datos y comenzar la ejecucion del programa cargado actualmente c) Ejecutar la siguiente instruccion del programa actual (y avanzar el program counter, para lo cual el programa tiene que estar “ejecutándose”) d) detener el programa en ejecución load start execute stop Queremos que ambas funcionalidades (ejecución automática y asistida) funcionen a la vez. 2) Se desea poder deshacer la última instrucción ejecutada (o sea, que el microprocesador vuelva al estado anterior). Ejemplo: si se hizo un SWAP, el acumulador A debe volver a tener lo que el acumulador B tenía y viceversa. En el caso del ADD se debe deshacer la suma y los valores de los acumuladores deben quedar como estaban previamente. 3) Para simplificar la construcción de programas, la segunda versión del procesador agregó algunas instrucciones de más alto nivel: Mnemotécnico HALT Descripción Detiene la ejecución del programa, cualquier operación step() posterior debe arrojar excepción de negocio WHNZ Ejecuta un conjunto de instrucciones mientras el valor del acumulador A sea distinto de cero. IFNZ Ejecuta un conjunto de instrucciones si el valor del acumulador A es distinto de cero. 3