Interrupt
- C++ kursu
- Uzman
- Ders 34/47
- 5 dk
Interrupt handler yazmayı öğrenirsin.
Interrupt
Bir interrupt (kesme), donanımın CPU'ya bir olay bildirmesidir. CPU, mevcut komutu bırakır, kayıtçıları saklar ve kesme hizmet yordamına (ISR) atlar. ISR bittiğinde CPU önceki işine geri döner.
ISR'ler çok kısa olmalıdır: başka kesmeler gecikebilir, sistem kilitlenebilir. İçinde istisna fırlatılmaz (genellikle -fno-exceptions ile derlenir), heap kullanılmaz, uzun döngü yoktur. Donanım bayrağı temizlenir, ortak değişkene işaret konur, ana döngü işi yapar.
Paylaşılan değişken volatile
ISR ile ana döngü arasında paylaşılan bir değişken volatile olmalıdır. Aksi halde derleyici ana döngüde değişkeni bir kez okuyup önbelleğe alabilir; ISR tarafından değişen yeni değeri görmez.
Örnek: volatile bool flag = false;. ISR flag = true; yapar; ana döngü while (!flag) { } ile bekler. volatile olmadan derleyici flag'i bir kez okur ve döngüyü sonsuz yapar. Bu yüzden ISR ile paylaşılan her değişken volatile olmalıdır.
Uygulama ISR-style volatile değişken kullan
Global volatile bool flag = false; ve volatile int counter = 0; tanımla. main içinde flag = true;, counter = 5; ve std::cout << counter; yaz.
Başlangıç kodu
#include <iostream>
// flag ve counter volatile değişkenlerini buraya tanımla
int main() {
// flag'i true yap, counter'a 5 ata ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
volatile bool flag = false;
volatile int counter = 0;
int main() {
flag = true;
counter = 5;
std::cout << counter;
return 0;
}Beklenen çıktı
5
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir ISR genellikle ne yapmaz?
__attribute__((interrupt)) void isr() { /* ... */ }- Hızlı dönmek
- İstisna fırlatmak Doğru cevap
- Bayrağı temizlemek
- Donanıma yazmak
Açıklama: ISR'ler istisna fırlatmaz; çünkü istisna tabloları pahalıdır ve geri dönüş karmaşık olur.
2 ISR adını tamamla
__attribute__((interrupt)) void ____() { /* ISR gövdesi */ }
__attribute__((interrupt)) void isr() { /* ISR gövdesi */ }
Açıklama: isr, kesme hizmet yordamının adıdır.
3 Kavramı rolüne eşle
| Kavram | Anlamı |
|---|---|
ISR |
Kesme hizmet yordamı |
volatile |
Paylaşılan değişken |
noexcept |
İstisna yok |
flag |
Kesme bayrağı |