Autor Tema: Utilizar los bits de una array de byte.  (Leído 2277 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Saaac

  • PIC10
  • *
  • Mensajes: 17
Utilizar los bits de una array de byte.
« en: 15 de Septiembre de 2011, 08:04:38 »
Hola,

He visto un tema parecido a mi duda pero la mia aun se complica un poco mas espero que me la podais resolver, porque me he quedado atascado.
Os explico. tengo la siguiente declaracion de variables de estructura:

struct EstructuraIO EstructInOut[nIs];

struct EstructuraIO{
   unsigned char    Condicion_Es:1;
        unsigned char       Condicion_Bp[ns];
   unsigned char    Valorant:1;
   unsigned char    TamanoMensaje; 
};

Y mi pregunta es, igual que la variable Condicion_ES la paso a un bit con el :1
Porque el compilador no me deja hacer lo mismo con la variable array Condicion_Bp[ns]. Si le añado a esta variable el :1 me da ERROR el compilador. Hay alguna solucion en lenguaje C para poder convertir una array dentro de una estructura en bits.

Gracias.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Utilizar los bits de una array de byte.
« Respuesta #1 en: 15 de Septiembre de 2011, 09:56:59 »
Podes crear un tipo anteriormente:

Código: C
  1. typedef struct{
  2.         unsigned bit0:1;    
  3.         unsigned bit1:1;
  4.         unsigned bit2:1;
  5.         unsigned bit3:1;
  6.         unsigned bit4:1;
  7.         unsigned bit5:1;
  8.         unsigned bit6:1;
  9.         unsigned bit7:1;
  10. }VAL_BITS;

y después hacer:

Código: C
  1. struct EstructuraIO{
  2.    unsigned char    TamanoMensaje;  
  3.    VAL_BITS         Condicion_Bp;
  4.    unsigned char    Condicion_Es:1;
  5.    unsigned char    Valorant:1;
  6. };

Si no existe el tipo bool no creo que te permita crear un array.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Saaac

  • PIC10
  • *
  • Mensajes: 17
Re: Utilizar los bits de una array de byte.
« Respuesta #2 en: 15 de Septiembre de 2011, 10:26:39 »
Muchas Gracias Suky,

No se si es posible pero a mi lo que me gustaria es poder trabajar con el array de un solo bit igual que lo hago con las unsigned char para no ocupar tanto espacio en RAM. Me explico con un ejemplo haber si se me entiende.
EJEMPLO:
¿Lo que me interesaria saber si se puede hacer es igual que la var (Condicion_Es:1) ocupo en RAM 1 bit en lugar de un byte. Me interesaria que para la var (Condicion_Bp[ns]:1) ocupar 1 bit para cada posicion de la array y no un byte pero si pongo el codigo de esta forma no me compila hay SOLUCION a esta duda?
struct EstructuraIO{
   unsigned char    Condicion_Es:1;
   unsigned char    Condicion_Bp[ns]:1;
   unsigned char    Valorant:1;
   unsigned char    TamanoMensaje;
};

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Utilizar los bits de una array de byte.
« Respuesta #3 en: 15 de Septiembre de 2011, 12:19:23 »
Como te comente, si no existe el tipo BOOL no vas a poder. En otros compiladores de PICs por ejemplo, si lo permite:

Código: C
  1. struct EstructuraIO{
  2.    unsigned char    Condicion_Es:1;
  3.    bool                  Condicion_Bp[ns];
  4.    unsigned char    Valorant:1;
  5.    unsigned char    TamanoMensaje;
  6. };

 :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Utilizar los bits de una array de byte.
« Respuesta #4 en: 15 de Septiembre de 2011, 12:45:29 »
Algunos compiladores sí soportan el tipo boolean, pero NO soportan ARRAY de booleans.
El CCS hace un tiempo comenzó a soportarlo. Qué compilador estás utilizando?
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Saaac

  • PIC10
  • *
  • Mensajes: 17
Re: Utilizar los bits de una array de byte.
« Respuesta #5 en: 15 de Septiembre de 2011, 12:55:12 »
Gracias Suky pero el bool no me lo reconece.

Hola BrunoF, ¿Como puedo saber el compilador estoy usando? el programa es el FREESCALE CODEWARRIOR version 5.9.0 build2803, uso el de por defecto.