Re: Cargar el buffer (E/S e interrupciones)
Con ambas soluciones se puede resolver el problema. Hay que tener en cuenta que para el primer caso, el arreglo buffer debe ser de 16 bits, y en el segundo de 8. De todos modos, la correctitud de la solución depende obviamente de cómo utilices esa información guardada.
Saludos,
Federico
Re: Cargar el buffer (E/S e interrupciones)
Hola,
Con respecto a eso ultimo que me dijiste que la correctitud de la solución depende de como use esa información guardada tenia la siguiente duda:
Use un buffer de 2 bytes (short int buffer[LAR_BUFFER])
Y en general guarde los datos asi:
buffer[pcarga] = (IN(DATOS_n) << 8 ) | 0x0n
Osea en el byte mas significativo el dato y en el byte menos significativo el numero de linea
El problema pide "Al ingresar un dato (1 byte) por la línea n (0..3) se trasmite a la salida el numero n (1 byte) y luego el dato ingresado (1 byte)."
Queria saber si esta es la forma correcta de hacer eso:
char nro = buffer[pdescarga] & 0x00FF;
char dato = buffer[pdescarga] & 0xFF00;
OUT(DATO_S, nro);
OUT(DATO_S, dato);
Sobre todo la duda es si la mascara que hice se asigna de forma correcta a la variable char de 1 byte. Y si no como podria ser?
Gracias!!
Re: Cargar el buffer (E/S e interrupciones)
Hay un problemita con esas asignaciones y es el siguiente: El char como bien sabés ocupa 8 bits, y las variables que estás utilizando a la derecha son de 16 bits. C te permite hacer esto, pero luego achica el resultado, guardando únicamente los últimos 8 bits. Para el primera caso funciona bien, porque los gbits que querés conservar son los últimos 8. Para el segundo caso, a la variable dato se le asignará el valor 0. Deberías hacer un shift a la derecha de 8 lugares para que la asignación sea correcta:
char dato = (buffer[pdescarga] & 0xFF00) >> 8;
Saludos!