Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

C++ Dersleri | Bit Alanları - Gömülü Sistemler Bellek Organizasyonu

    Gömülü sistemlerde hepimizin bildiği ya da şuanda öğreneceği üzere hafıza alanlarımız (flash - eprom - ram) oldukça kısıtlıdır. Atmega 328p için 2kb ram alanı var desek ve bunun da Ancak 2048 tane harfi ram de barındırabileceği anlamına geldiğini söylesek, belki de şu okumakta olduğunuz metini bile ram de saklayamıyor olacağımızı kolayca tahmin edebiliriz. Bazı durumlarda herhangi bir parametrenin sadece açık ya da kapalı olduğunu tutmak istediğimiz bir değişkene ihtiyacımız olur. Ancak en küçük hafıza birimimiz 8 bit (1byte) olduğundan, 1 byte harcamadan 1 bitlik veriyi bir değişken içerisinde saklayabilmek mümkün değildir. Ancak bu bir byte 'ın geri kalan 7 bitini farklı değişkenler için kullanmamıza olanak tanıyan bit fields dediğimiz bir yapı vardır. Tanımlarken hangi değişken için kaç bitlik alan ayırmak istediğimizi belirtmemiz yeterli, bit ayırma işlemini compiler halleder.

    


    Bir projede parametreleri kaydetmek isteyelim, hatta daha net olarak örneklendirelim, bir televizyon için olsun bu. Parametrelerimiz limitleriyle birlikte şöyle olsun :

  • Mevcut kanal : 1-16 (toplam 16 kanal) 4 bit
  • Ses seviyesi  : 0-15 (toplam 16 seviye) 4 bit
  • Otomatik parlaklık : true / false (toplam 2 durum) 1 bit
  • Dil seçeneği 1-8 (enum 8 dil) 3 bit
  • Kaynak 1-4 (enum AV-SCART-TV) 2 bit
parametreler çoğaltılabilir.


Kodumuz şöyle olacak
enum languages
{
    Turkish,
    English,
    French,
    Dutch,
    Spanish,
    Arabic,
    Farsi
};
enum videoSources
{
    Vga,
    Tv,
    Scart
};
struct params
{
    // 2 byte yer kaplaması beklenir
    // 4 bit: kanal verisi 0-15 arasında
    // 4 bit: ses seviyesi verisi 0-15 arasında
    // 1 bit: Otomaik parlaklık açık / kapalı
    // 3 bit: Dil seçimi enum maksimum 8 seçenek 
    // 2 bit: Video kaynağı seçimi
    // 2 bit: boş
    unsigned char channel :4, volume :4, autoBrightness :1, language :3, source :2, :2;
};

int main()
{
    params TvParams;
    TvParams.channel = 11;
    TvParams.volume = 5;
    TvParams.autoBrightness = false;
    TvParams.language = Turkish;
    TvParams.source = Vga;
    cout  sizeof(TvParams);
}

Her bir türü için örnek vermeye çalıştım, sonraki parametreye dikkat ederseniz isim vermedik, kullanmıyoruz ama sen bunun 2 bit olduğunu bil ve bize toplamda 16 bit 2 bytelık bellek ayır demiş olduk.
    Uygulama bize 2 çıktısını verdi, beklediğimiz gibi. Ancak sizeof kullanırken şunu yapamıyoruz :
sizeof(TvParams.autoBrightness);

    Herkese kolay gelsin

Önceki konu : Bit kopyalama
Sonraki konu: C++ Diziler



This post first appeared on Devrelerim.com, please read the originial post: here

Share the post

C++ Dersleri | Bit Alanları - Gömülü Sistemler Bellek Organizasyonu

×

Subscribe to Devrelerim.com

Get updates delivered right to your inbox!

Thank you for your subscription

×