Role Durumunu ogrenmek.

M_B

Üye
Katılım
16 Şubat 2023
Mesajlar
62
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 personel

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,885
Mesajlar
100,433
Üyeler
2,493
Son üye
cym247

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top