Role Durumunu ogrenmek.

  • Konuyu başlatan Konuyu başlatan M_B
  • Başlama tarihi Başlama tarihi

M_B

Aktif Üye
Katılım
16 Şubat 2023
Mesajlar
213
Kod:
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

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

veya

Kod:
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.
 

Forum istatistikleri

Konular
7,555
Mesajlar
126,517
Üyeler
3,058
Son üye
mgozalan

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top