Practico 9 - Ejercicio 6

Practico 9 - Ejercicio 6

de Bruno Emanuel Gandos Telis -
Número de respuestas: 5

Hola, tengo una duda sobre este ejercicio. ¿Que sería la dirección 0x20? lo consideramos un puerto o una dirección de memoria fija?. En caso de que no sea un puerto, como puedo acceder a ella? 

Esta fue la solución que se me ocurrió, agradezco cualquier corrección. Gracias.


En respuesta a Bruno Emanuel Gandos Telis

Re: Practico 9 - Ejercicio 6

de Federico Rivero -
Hola Bruno!

La dirección 0x20 corresponde a una dirección en el espacio de E/S. Es decir, es un puerto de E/S, presumiblemente de solo escritura. Normlamente aclaramos esas cosas, pero se ve que en este ejercicio no nos quedó bien.

De todos modos tengo que aclarar, que aunque 'la dirección 0x20' se pueda interpretar como una dirección de memoria, tu código nunca accede a memoria. Las sentencias

control = control & 0xFE
y
control = control | 1

apagan o prenden el bit 0 de la variable 'control', pero nunca acceden a memoria ni a E/S.

Un último comentario es que el bit menos significiativo (el que estás modificando) es el bit 0. En este ejercicio se debe controlar el bit 1, es decir, el segundo comenzando desde la derecha.

Saludos,
Federico
En respuesta a Federico Rivero

Re: Practico 9 - Ejercicio 6

de Bruno Emanuel Gandos Telis -
Hola Federico, gracias por la respuesta.
Entiendo que no estuve accediendo a memoria, bastaría con hacer: char control = in(PUERTO_ES) ?
Por último, la letra dice: "El encendido de todas las luces se realiza colocando el valor en 1 el bit menos significativo del
byte de la dirección 0x20 y las luces se apagan colocando el valor 0 en el mismo bit", quizás es media ambigua la letra, pero yo interpreto que se pone el valor 1 en el bit menos significativo, que sería el 0 correcto?.
Gracias.
En respuesta a Bruno Emanuel Gandos Telis

Re: Practico 9 - Ejercicio 6

de Federico Rivero -
Ah, sí, perdón, yo leí mal. Dice el 'bit menos significativo' que es el 0.

Con respecto al control, sería con OUT porque es una escritura.

OUT(0x20, 1) -> Prende las luces
OUT(0x20, 0) -> Apaga las luces

Saludos,
Federico
En respuesta a Federico Rivero

Re: Practico 9 - Ejercicio 6

de Nicolas Grosso San Roman -
Hola! Para colocar el valor 1 en el bit menos significativo del byte en la dirección 0x20, no habría que obtener lo que hay en 0x20 y hacer una máscara con dicho número y luego hacer OUT? Entiendo que capaz en 0x20 hay un byte con ciertos números previo a modificarlo, y lo que hago yo es solo modificar el úlitmo bit de este byte.
Gracias!
En respuesta a Nicolas Grosso San Roman

Re: Practico 9 - Ejercicio 6

de Federico Rivero -
Hola Nicolás!

Para saber exactamente qué hacer tendríamos que tener toda la especificación del puerto. Si el puerto es de solo escritura, simplemente se hace OUT y se sobreescriben todos los bits del puerto, no podés hacer algo diferente porque el puerto no es puede leer, es de solo escritura. Por el contrario, si decimos que es de lectura/escritura, sería razonable que lo leas y modifiques el bit corrrespondiente como indicás. Finalmente, existe un tercer tipo de puerto de E/S que es el de entrada/salida independiente. Esos puertos de E/S tiene la particularidad que si bien la dirección de E/S es la misma, lo que se lee no se mapea con lo que uno escribe en el puerto. La implementación de esto sería que el puerto tiene un registro para la lectura y otro para la escritura, pero ambos se acceden en el mismo puerto de E/S. Si el puerto fuera de E/S independiente entonces habría que escribirlo directamente igual que si se tratara de un puerto de solo escritura.

Saludos,
Federico