Bellek eşlemeli I/O
- C kursu
- Uzman
- Ders 38/47
- 5 dk
Bellek eşlemeli I/O kavramını öğrenirsin.
Bellek eşlemeli I/O
Bellek eşlemeli I/O (memory-mapped I/O, MMIO), donanım yazmaçlarının (register) bellek adreslerine eşlenmesi yöntemidir. Bir GPIO pini, bellekte belirli bir adrese karşılık gelir; o adrese yazmak pini değiştirir, okumak pin durumunu verir.
C'de bu, bir gösterge (pointer) aracılığıyla yapılır: volatile unsigned int *reg = (volatile unsigned int *)0x40021000;. volatile anahtar sözcüğü kritiktir: derleyiciye bu değişkenin optimize edilmemesini söyler. Çünkü donanım her an değeri değiştirebilir; önbelleğe alma (caching) yanlış sonuç verir. MMIO, gömülü C'nin en temel donanım erişim yöntemidir.
volatile neden önemli?
volatile olmadan, derleyici bir yazmaç okumasını önbelleğe alabilir. Örneğin, while (*reg & 1) döngüsünde derleyici *reg'i bir kez okuyup değeri saklayabilir; donanım yazmacı değişse bile döngü sonsuza kadar döner.
volatile ile, derleyici her döngüde yazmacı yeniden okur. Bu, kesme bayrakları ve donanım durum yazmaçları için zorunludur. Gömülü C'de her donanım yazmacı volatile olarak bildirilir. Bu, yazılımın donanım değişikliklerini her zaman görmesini sağlar. Unutma: volatile iş parçacığı güvenliği sağlamaz; yalnızca optimize etmeyi engeller.
Uygulama GPIO yazmacını simüle et
static volatile unsigned int gpio_data = 0; tanımla (sahte yazmaç). int main(void) içinde gpio_data = 1; ile yazmaca yaz. printf("GPIO: %d\n", gpio_data) ile oku ve yazdır.
Başlangıç kodu
#include <stdio.h>
// sahte GPIO yazmacı tanımla (volatile)
// main'de yazmaca yaz ve okuÖrnek çözüm
#include <stdio.h>
static volatile unsigned int gpio_data = 0;
int main(void) {
gpio_data = 1;
printf("GPIO: %d\n", gpio_data);
return 0;
}Beklenen çıktı
GPIO: 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 volatile anahtar sözcüğünü tamamla
____ unsigned int gpio_data = 0;
volatile unsigned int gpio_data = 0;
Açıklama: volatile, derleyici optimize etmesin diye kullanılır.
2 Bir donanım yazmacı hangi niteleyiciyle bildirilir?
- static
- const
- volatile Doğru cevap
- auto
Açıklama: volatile, donanım yazmaçları için zorunludur.
3 MMIO kavramını eşle
| Kavram | Anlamı |
|---|---|
volatile |
Optimize etme |
Yazmaç |
Donanım adresi |
Gösterge |
Adrese erişim |
MMIO |
Bellek eşlemeli I/O |