fiuba-labo-de-micro-miercoles / 2019-2c-primer-proyecto-dengayet

2019-2c-primer-proyecto-dengayet created by GitHub Classroom
0 stars 1 forks source link

ejercicio de parcial #2

Open dengayet opened 4 years ago

dengayet commented 4 years ago

ejercicio_tipo_parcial_1

Hola! Subí un ejercicio tipo parcial que encontré en el campus. Lo probé en el simulador y anduvo pero tengo algunas dudas:

Se me hubiera simplificado el chequeo de las condiciones de corte y la forma en que se recorre el vector si tuviera una instrucción similar a LDD pero en la que el offset del puntero pudiera ser dado por un registro (en cuyo caso serviría como un índice) pero no encontré. Existe alguna de ese estilo?

Por otro lado, no estoy segura de estar usando los branch y los jump de la manera correcta. En clase después de algun branch poníamos la etíqueta que nos devolvía al loop, pero en mi código use el branch para salir del loop , y para volver a ejecutarlo use jmp.

En el enunciado dice que el vector está cargado en RAM externa, eso lo entendí como que debería declarar las variables VEC1 y VEC2 a partir de donde termina la SRAM interna. Eso estaría bien?

Muchas gracias! Saludos

Denise

pimartos commented 4 years ago

Hola, voy contestando por partes:

Se me hubiera simplificado el chequeo de las condiciones de corte y la forma en que se recorre el vector si tuviera una instrucción similar a LDD pero en la que el offset del puntero pudiera ser dado por un registro (en cuyo caso serviría como un índice) pero no encontré. Existe alguna de ese estilo?

La respuesta es "no", en este microcontrolador no hay un modo de direccionamiento (forma de acceder a los datos) que sea del tipo <base+offset en Rn> (en otros micros si lo hay). La razon de ello es que en un direccionamiento asi se necesita al menos un ciclo de maquina para calcular la direccion absoluta del dato (como base+offset) y al menos otro ciclo de maquina para realizar el acceso, lo que es opuesto al objetivo de tener la ejecucion de una instruccion por ciclo de maquina

Por otro lado, no estoy segura de estar usando los branch y los jump de la manera correcta. En clase después de algun branch poníamos la etíqueta que nos devolvía al loop, pero en mi código use el branch para salir del loop , y para volver a ejecutarlo use jmp.

Ambas formas son funcionalmente equivalentes, el tema de hacerlo como lo planteaste en el ejercicio de parcial es que ejecuto una instruccion condicional para decidir si salgo del loop y un salto para volver a ejecutar el loop; de la forma que lo hacemos en clase, usas una instruccion condicional para decidir si volves a ejecutar el loop, o sino simplemente seguis ejecutando el resto del programa en forma lineal. Esta forma es mas facil de analizar y seguir para alguien que tiene que revisar el codigo (es una buena practica de programacion)

En el enunciado dice que el vector está cargado en RAM externa, eso lo entendí como que debería declarar las variables VEC1 y VEC2 a partir de donde termina la SRAM interna. Eso estaría bien?

En realidad ese enunciado correspondia a un micro que tenia la capacidad de conectarle memoria ram externa al encapsulado, su acceso era distinto al de la memoria ram interna, por eso la diferencia. En este micro es la interpretacion que hiciste; es la ram despues del ultimo I/O register; seria a partir de la posicion 0x0100

Como observacion adicional (debido al comentario en el codigo), este micro (atmega328p) no tiene memoria a partir de la posicion 0x0900, por lo que no hay que declarar nada que pueda quedar en una posicion de memoria por encima de 0x08FF

cordialmente, Pedro

dengayet commented 4 years ago

Muchas gracias! Voy a pensar una forma de hacerlo usando los branch como en clase y lo vuelvo a subir

Denise