Percorrer Bit de uma Struct

Programação C em geral

Moderadores: 51, guest2003

Percorrer Bit de uma Struct

Mensagempor SoMeWhErE » 20 Mar 2009 09:28

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
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor leoabubauru » 20 Mar 2009 14:34

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);
         }
      }
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor barboza » 20 Mar 2009 16:49

Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor SoMeWhErE » 20 Mar 2009 17:15

Valewsss....Pessuar......Brigadaum
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x