Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Duda sobre puertos y uniones en C

Estas en el tema de Duda sobre puertos y uniones en C en el foro de C/C++ en Foros del Web. Hola hola, buenas tardes. Tengo una duda con respecto a el ingreso de datos por puertos. En general, en los programas, al ingresar información por ...
  #1 (permalink)  
Antiguo 16/02/2015, 14:34
Avatar de ElenaJuarez  
Fecha de Ingreso: febrero-2015
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 9 años, 2 meses
Puntos: 0
Pregunta Duda sobre puertos y uniones en C

Hola hola, buenas tardes. Tengo una duda con respecto a el ingreso de datos por puertos. En general, en los programas, al ingresar información por un puerto, se cuenta con el bit de sincronismo para validar los datos y otro de fin.

por ejemplo, ingreso los siguientes datos

|__|__ |__|__|__|__|__|__|__|__|__|__|__|__|__|__|
________________________________________S __ F

Cada cuadradito seria un bit, f seria el bit menos significativo. La verdad que me costo hacer los cuadrados pero creo que no sirven mucho .
Mi duda es la siguiente, si tengo el siguiente fragmento :

Código C:
Ver original
  1. struct placa{
  2. int f:1;
  3. int s:1;
  4. int n:4;
  5. int tension:10;
  6. };
  7.  
  8. union UN{
  9. struct placa pl;
  10. int vector[2];
  11. }
  12.  
  13.  
  14. void main()
  15. {
  16. union UN ;
  17.  
  18. ioperm(0x200,2,1);
  19.  
  20. U.vector[0]=inb(0x200);
  21. U.vector[1]=inb(0x201);


Para comparar el bit de sincronismo (int s:1) tengo que preguntar por U.vector[0] o por U.vector[1] ? O sea mi duda es como se almacenan los datos al ingresar por los puertos? Si quiero comparar por ejemplo el bit fin tendría que hacer U.vector[0]&0x01 o U.vector[1]&0x01.

Espero que se entienda, porque la verdad si yo leo esto creo que no yo lo entendería. Gracias
  #2 (permalink)  
Antiguo 16/02/2015, 15:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda sobre puertos y uniones en C

Si estas pasando información por un puerto serial o usb. El como trasmites los bytes depende del endianness que estés manejando.

A nivel de un solo byte no te preocupas porque hay varias capas que ya se encargan de eso. El problema viene cuando son varios bytes y no sabes cual viene primero si la de menor o mayor orden.

El parity bit lo checas a nivel de byte y no a nivel de varios bytes.
  #3 (permalink)  
Antiguo 16/02/2015, 16:01
Avatar de ElenaJuarez  
Fecha de Ingreso: febrero-2015
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Duda sobre puertos y uniones en C

Cita:
Iniciado por razpeitia Ver Mensaje
Si estas pasando información por un puerto serial o usb. El como trasmites los bytes depende del [URL="http://en.wikipedia.org/wiki/Endianness"]endianness[/URL] que estés manejando.

A nivel de un solo byte no te preocupas porque hay varias capas que ya se encargan de eso. El problema viene cuando son varios bytes y no sabes cual viene primero si la de menor o mayor orden.

El parity bit lo checas a nivel de byte y no a nivel de varios bytes.
Hola, lo del parity lo tenía en cuenta, lo que yo intento es operar bit a bit, por ejemplo que un dato es valido si el bit S pasa de 0 a 1, entonces, por ejemplo:

Código C:
Ver original
  1. do{
  2. U.vector[0]=inb(0x200);
  3. U.vector[1]=inb(0x201);
  4. }while((U.vector[0]&ox02)==0);

Estaría bien ? está comparando el bit S con un 0x02 ? o tengo que utilizar el U.vector[1]?
  #4 (permalink)  
Antiguo 16/02/2015, 16:16
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre puertos y uniones en C

struct placa es de 16 bits, pero no queda claro de cuántos bits son tus int; ¿son de 8?

Si fuera así, en una máquina Big-Endian, los primeros 8 bits de placa estarían en vector[0], mientras que en una máquina Little-Endian, los primeros 8 bits de placa estarían en vector[1].

Sobre este asunto del endianness:
https://en.wikipedia.org/wiki/Endianness
  #5 (permalink)  
Antiguo 16/02/2015, 16:29
Avatar de ElenaJuarez  
Fecha de Ingreso: febrero-2015
Ubicación: Buenos Aires
Mensajes: 8
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Duda sobre puertos y uniones en C

Cita:
Iniciado por lareto Ver Mensaje
struct placa es de 16 bits, pero no queda claro de cuántos bits son tus int; ¿son de 8?

Si fuera así, en una máquina Big-Endian, los primeros 8 bits de placa estarían en vector[0], mientras que en una máquina Little-Endian, los primeros 8 bits de placa estarían en vector[1].

Sobre este asunto del endianness:
[url]https://en.wikipedia.org/wiki/Endianness[/url]

Ah perfecto, mil gracias, tambien leí el artículo y quedó claro. Mil gracias.

Etiquetas: puertos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:55.