Página 1 de 1

Percorrer Bit de uma Struct

MensagemEnviado: 20 Mar 2009 09:28
por SoMeWhErE
Olá, pessoal.

Programo PIC em C, e me surgiu dúvida.

Criei uma Struct com 28 campos tipo bit, e gostaria de percorrer os campos para alterá-los e não sei como fazer isso.

Vou explicar melhor.

Vou receber do PC, uma configuração de 28 sensores.
e de acordo com a situação de cada um, irei ativar determinado sensor, que o campo fica nessa struct de bits.

Código: Selecionar todos
typedef struct{    //Criação da Struct dos Sensores
   unsigned sensor0:1;
   unsigned sensor1:1;
   unsigned sensor2:1;
   ...
   unsigned sensor26:1;
   unsigned sensor27:1;
   unsigned sensor28:1;
}conf_sens;

conf_sens sensores; //declaração da struct
main()
{
   ...
}

//função de tratamento da situação
   char i,j=3;          //i controle do for, j controle da posição do buffer
   for(i=1;i<29;i++) //loop para os 28 sensores
   {
      if(read[j] == '1')   //cada posição do buffer a partir do campo 3 é a situação de cada sensor '1' para ativo '0' para inativo
      {
         sensores.sensorxx = 1;
      }
      else
      {
         sensores.sensorxx = 0;
      }
      j++;
   }



No lugar do xx seria cada sensor, que eu gostaria q cada passagem do for alterasse para o proximo sensor.

Não tenho muito conhecimento de C, e gostaria de saber se é possivel e se alguem poderia me ajudar.

VALEWSSS

MensagemEnviado: 20 Mar 2009 14:34
por leoabubauru
Que tal isso:



Código: Selecionar todos
union conf_sens
   {
   struct
      {   
      unsigned sensor0:1;
      unsigned sensor1:1;
      unsigned sensor2:1;
      ...
      unsigned sensor26:1;
      unsigned sensor27:1;
      unsigned sensor28:1;
      } bits;
      long grupo_sensor
   }

conf_sens sensores; //declaração da struct

main()
{
   ...
}

   //função de tratamento da situação
   char i;          //i controle do for, j controle da posição do buffer
   
   for(i=3;i<29;i++) //loop para os 28 sensores
      {
      if(read[i] == '1')   //cada posição do buffer a partir do campo 3 é a situação de cada sensor '1' para ativo '0' para inativo
         {
         sensores.grupo_sensor |= (1<<i);
         }
      else
         {
         sensores.grupo_sensor &= (0<<i);
         }
      }

MensagemEnviado: 20 Mar 2009 16:49
por barboza

MensagemEnviado: 20 Mar 2009 17:15
por SoMeWhErE
Valewsss....Pessuar......Brigadaum