Role Durumunu ogrenmek.

M_B

Aktif Üye
Katılım
16 Şubat 2023
Mesajlar
158
C:
typedef union
{
         uint8_t RoleStatus:8;
     struct{
                        bool RL_1 : 1;       
                        bool RL_2 : 1;       
                        bool RL_3 : 1;       
                       bool RL_4 : 1;       
                        bool RL_5 : 1;       
                        bool RL_6 : 1;       
                        bool RL_7 : 1;       
                        bool RL_8 : 1;       
                    }role;
}Role_t;


Role_t Role;

Yukardaki şekilde tanımlamam var.
Program icerisinde duruma gore
Role.role.RL_1 =1; aktif veya
Role.role.RL_1 =0; pasif yapıyorum.

Role.RoleStatus degerini okudugumda hangi rolenin aktif veya pasif olduğunu nasıl ogrenebilirim.
Tek tek Role.role.RL_X leri sorgulama yapmadan.
Ornegin Role.RoleStatus degerini okudum ve gelen deger 0xA5
Bu durumda RL_1 , RL_3 , RL_6 ve RL_8 'in aktif oldugunu nasıl ögrenebilirim. Nasil bir algoritma kurmalıyım
veya başka cözum yolu önerileriniz var mı ?

Teşekkürler.
 
Son düzenleme:
Bitmask kullanabilirsin

C++:
for (unsigned int mask = 0x01; mask != 0x100; mask <<= 1)
{
    if (Role.RoleStatus & mask)
    {
        /* bit set */
    }
    else
    {
        /* bit clear */
    }
}

veya

C++:
for (unsigned int i = 0; i < 8; ++i)
{
    if (Role.RoleStatus & (1 << i))
    {
        /* bit i set */
    }
    else
    {
        /* bit i clear */
    }
}
 
Son düzenleme:
Merhaba,
Ben uzak kontroller için, rölenin gerçekten aktif olup olmadığını görebilmek için MCU nun başka bir pinini bu işe atıyorum. Uzaktaki rölenin (ki çift kontaklı olması gerekiyor) bir kontağını da MCU'nun tahsis ettiğim pinini on veya off durumunu algılayıp yazılım gereği karşı tarafa fiziksel olarak aktif veya pasif olduğunu gözlemleyebiliyorum.
 
Kod:
void RoleDurumu(uint8_t x)
{       
int n=0; 
int i;
char str[50];     

    //checking bit status
    for(i=0;i<8;i++)
    {
        if(x & (1<<n))
        {
//         printf("%d.Role Aktif\n",n+1);  // Bu satır normalde ısımı de goruyor ama Eth ile de veri gonderdigim   icin. stringleri ekleyip gondermeyi tercih ettim
            sprintf(str, "%d.Role\n", n+1);
            strcat(role_str, str);
        }
            n++;
    }   
         printf("%s\n",role_str);
}

@taydın hocam yukardaki şekilde cözdüm.
Teşekkürler.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
6,951
Mesajlar
118,752
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top