Bit manipülasyonu
- C kursu
- Uzman
- Ders 40/47
- 5 dk
Gömülüde bit manipülasyonu desenlerini öğrenirsin.
Bit manipülasyonu
Gömülü sistemlerde bir yazmacın belirli bitlerini değiştirmek yaygındır. Bir yazmaç 32 bittir; her bit bir donanım özelliğini denetler. Bit manipülasyonu, bu bitleri tek tek kurmak, temizlemek ve değiştirmektir.
Üç temel işlem: kur (reg |= (1 << n)), temizle (reg &= ~(1 << n)) ve değiştir (reg ^= (1 << n)). Burada (1 << n) bir maske (mask) üretir: yalnızca n'inci bit 1'dir. |= ile bit kurulur, &= ~ ile temizlenir, ^= ile değiştirilir. Bu işlemler atomik değildir; kesme güvenliği için dikkat gerekir.
Maske ve okuma
Belirli bir biti okumak için maske ile VE (AND) alırsın: if (reg & (1 << n)). Bu, n'inci bit 1'se doğru, 0'sa yanlış verir. Bir yazmacın alt kısmını okumak için: value = reg & 0xFF; (alt 8 bit).
Çoklu bit yazmak için önce temizle sonra kur: reg &= ~0xF; reg |= (value & 0xF);. Bu, alt 4 biti value'nun alt 4 biti ile değiştirir. Maskeleme, gömülü C'de donanım yazmaçlarının alt alanlarını yönetmenin standart yoludur. Her donanım sürücüsü bu desenleri kullanır.
Uygulama Bit kurma programı yaz
unsigned int reg = 0; tanımla. reg |= (1 << 0); ile bit 0'ı kur. reg |= (1 << 2); ile bit 2'yi kur. int main(void) içinde printf("Kayıt: %d\n", reg) ile yazdır (sonuç 5 olmalı: binary 101).
Başlangıç kodu
#include <stdio.h>
// reg tanımla ve sıfırla
// bit 0 ve bit 2'yi kur
// main'de değeri yazdırÖrnek çözüm
#include <stdio.h>
int main(void) {
unsigned int reg = 0;
reg |= (1 << 0);
reg |= (1 << 2);
printf("Kayıt: %d\n", reg);
return 0;
}Beklenen çıktı
Kayıt: 5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir biti kurmak için hangi işlem kullanılır?
- reg &= ~(1 << n)
- reg = (1 << n)
- reg |= (1 << n) Doğru cevap
- reg ^= (1 << n)
Açıklama: |= ile maske bitsel VEYA ile birleştirilir; bit kurulur.
2 Bit kurma işlemini tamamla
reg |= (1 << ____); /* bit 0'ı kur */
reg |= (1 << 0); /* bit 0'ı kur */
Açıklama: (1 << 0) 0'ıncı biti kuran maskedir.
3 Bit işlemini eşle
| Kavram | Anlamı |
|---|---|
Kur |
|= (1 << n) |
Temizle |
&= ~(1 << n) |
Değiştir |
^= (1 << n) |
Oku |
& (1 << n) |