Mikroişlemciler


8085 ve 8086 üzerinden yazmaçlar, veri yolları, komutlar, zamanlama, kesmeler, seri/paralel G/Ç, DMA ve belleği; RTOS, interrupt latency, priority inversion, cache/DMA görünürlüğü, watchdog ve deadline ile birleştiren ders notu.
Ünite 1: Temel Kavramlar
1.1. Üç Terimin Ayrımı
Mikroişlemci, aritmetik-mantık birimi, yazmaç kümesi ve denetim devrelerini bir işlemci yongasında bütünleştiren programlanabilir işlem birimidir. Klasik 8085/8086 ayrımında ana bellek ve çevre birimleri işlemci dışındadır; modern mikroişlemciler ise önbellek, bellek denetleyicisi ve çeşitli sistem birimlerini aynı paket veya yonga üzerinde bütünleştirebilir.
Mikrobilgisayar, merkezi işlem birimi olarak bir mikroişlemci kullanan, bunun yanında bellek ve giriş-çıkış birimleri bulunan sistemdir.
Mikrodenetleyici, işlemci çekirdeğini, belleği ve çevre birimlerini tek pakette birleştirir. Gömülü uygulamalarda kart üzerindeki bileşen sayısını ve yol gecikmelerini azaltır.
1.2. Tanım
Mikroişlemci, bellekte saklı bir programa göre aldığı sayılar üzerinde aritmetik veya mantık işlemleri yapan ve sonuç olarak başka sayılar üreten programlanabilir bir aygıttır.
Tanımın her öğesi ayrı bir tasarım kısıtı taşır:
- Programlanabilir: Aynı donanım, komut dizisi değiştirilerek farklı işler yapar. Esneklik, sabit işlevli devreye göre başarım kaybı karşılığında elde edilir.
- Komut kümesi: İşlemcinin yapabileceklerinin tümü, tasarım anında sabitlenmiş komut kümesiyle sınırlıdır.
- Sayılar: İşlemci yalnız ikili sayı tanır. Aynı bit dizisi, komut kodu, veri veya adres olarak yorumlanabilir; anlamı yürütme bağlamı belirler.
- Bellekte saklı: Program ve veri aynı bellek uzayında bulunur (saklı program ilkesi).
1.3. Söz ve Türevleri
İşlemcinin bir seferde işlediği bit grubu söz (word) olarak adlandırılır ve genişliği işlemcinin sınıfını belirler. 4 bit nibble, 8 bit bayt olarak anılır. 8 bitlik bir işlemci büyük sayılarla çalışabilir, fakat bunları 8 bitlik parçalara bölerek işler; her ek parça ayrı komut ve ayrı çevrim demektir.
1.4. Bellek Haritası ve Komut Çevrimi
Bellek haritası, adres uzayının hangi bölgesinin hangi fiziksel aygıta ayrıldığını gösteren gösterimdir. Adres yolu genişliği n ise adreslenebilir alan 2^n konumdur; 16 adres hattı 64 KB alan verir.
Bir komutun yürütülmesi üç aşamalıdır:
Getir (fetch) -> Çöz (decode) -> Yürüt (execute)İşlemci program sayacının gösterdiği adresten komut kodunu okur, komut kod çözücüsünde yorumlar, gerekli veri erişimlerini yapar ve sonucu yazar. Program sayacı okuma sırasında otomatik artar; dallanma komutları bu artışın yerine yeni bir değer yükler.
1.5. Makine Dili ve Assembly
Makine dili, işlemcinin doğrudan çalıştırdığı ikili kodlardır; onaltılık gösterim yalnız insan için kolaylıktır. Assembly, işlemcinin komut kümesini sembolik anımsatıcılar, etiketler ve assembler yönergeleriyle ifade eder ve assembler tarafından makine koduna dönüştürülür. Kaynak düzeyindeki her ifade zorunlu olarak tek bir makine komutuna karşılık gelmez.
Makine dili işlemciye özgüdür: bir işlemci için yazılmış ikili kod, farklı komut kümesine sahip başka bir işlemcide çalışmaz.
Ünite 2: 8085 Mimarisi
Bu ünite, 8085 işlemcisini ALU, yazmaçlar, program sayacı, yığın işaretçisi, veri yolu ve dış bellek/GÇ ilişkileriyle bir bütün olarak ele alır.
+-------------------+
adres/veri yolu <-> 8085 CPU |
| ALU |
| accumulator |
| yazmaçlar |
| PC / SP |
| kontrol birimi |
+---------+---------+
|
+-------------+-------------+
| |
bellek G/Ç birimleriBir işlemci komutu izlenirken başlangıçta program sayacı, yazmaçlar ve bellek konumu belirlenir. Komut getirme, çözme ve yürütme adımlarında hangi veri yolunun kullanıldığı ve hangi durumun değiştiği ayrı ayrı gösterilir. Sonuç yalnız hedef yazmacın değeriyle doğrulanmaz; durum bayrakları, yan etkiler ve sonraki komut adresi de kontrol edilir. Böylece mimaride tanımlanan komut davranışı ile çevrimler içinde gerçekleşen mikroişlemler birbirinden ayrılır.
2.1. İşlevsel Bloklar
8085, 8 bit veri yolu ve 16 bit adres yolu olan, 64 KB adresleyebilen bir mikroişlemcidir. Başlıca blokları aritmetik-mantık birimi, yazmaç kümesi, komut kod çözücü, zamanlama ve denetim birimi, kesme denetimi ve seri giriş-çıkış denetimidir.
2.2. Yazmaçlar
8085 yazmaçları:
- A (akümülatör), 8 bit: Aritmetik ve mantıksal işlemlerde temel operand ve sonuç yazmacıdır.
- B, C, D, E, H ve L, 8 bit: Genel amaçlı yazmaçlardır. BC, DE ve HL çiftleri 16 bit olarak da kullanılabilir.
- Bayrak yazmacı, 8 bit: İşlem sonucuna ilişkin durum bilgilerini taşır.
- PC, 16 bit: Bir sonraki yürütülecek komutun adresini tutan program sayacıdır.
- SP, 16 bit: Yığının tepe adresini tutan yığın işaretçisidir.
- W ve Z, 8 bit: İşlemci tarafından geçici amaçlarla kullanılan, programcıya doğrudan görünmeyen iç yazmaçlardır.
HL çifti bellek işaretçisi olarak özel bir konuma sahiptir; M yazımı, HL'nin gösterdiği bellek gözünü ifade eder.
2.3. Bayraklar
Beş bayrak tanımlıdır ve bayrak yazmacındaki konumları sabittir:
D7 D6 D5 D4 D3 D2 D1 D0
S Z - AC - P - CY- S (işaret): Sonucun en anlamlı biti 1 ise kurulur.
- Z (sıfır): Sonuç sıfırsa kurulur.
- AC (yardımcı elde): 3. bitten taşma varsa kurulur; yalnız ondalık düzeltme komutu tarafından kullanılır.
- P (eşlik): Sonuçtaki 1 sayısı çift ise kurulur.
- CY (elde): En anlamlı bitten taşma veya ödünç varsa kurulur.
Her komut bayrakları etkilemez. Koşullu dallanma yazılırken, bayrağı kuran komut ile dallanma arasına bayrağı değiştiren başka bir komutun girmemesine dikkat edilir.
2.4. Yol Yapısı ve Çoklamalı Düşük Adres
8085'in düşük sekiz adres biti ile veri yolu aynı pinleri paylaşır (AD0-AD7); yüksek sekiz adres biti ayrıdır (A8-A15). Pin sayısını azaltan bu çoklama, adresin dış devrede tutulmasını zorunlu kılar.
ALE (adres tutucu izinleme) sinyali her makine çevriminin ilk T durumunda etkinleşir ve düşük adres baytının bir sekizli mandala (latch) yazılmasını sağlar. Sonraki durumlarda aynı pinler veri taşır. Bu ayırma işlemine ayrıştırma (demultiplexing) denir ve 8085 tabanlı her sistemde bulunması zorunlu ilk dış devredir.
2.5. Denetim ve Durum Sinyalleri
RD ve WR işlemin yönünü, IO/M sinyali erişimin bellek mi giriş-çıkış mı olduğunu belirtir. S0 ve S1 durum sinyalleri ile birlikte makine çevriminin türü dışarıdan tanınır.
IO/M S1 S0 Makine çevrimi
0 1 1 Komut kodu getirme
0 1 0 Bellek okuma
0 0 1 Bellek yazma
1 1 0 G/Ç okuma
1 0 1 G/Ç yazmaREADY girişi yavaş belleklerin işlemciyi bekletmesini sağlar; düşük tutulduğu sürece işlemci bekleme durumları (wait state) ekler. Bu düzenek, farklı hızdaki bileşenlerin tek yol üzerinde çalışmasını mümkün kılar.
2.6. Saat
8085 dahili saat üretecine sahiptir; X1-X2 uçlarına bağlanan kristalin frekansı ikiye bölünerek dahili saat elde edilir. 6,144 MHz kristal yaklaşık 3,07 MHz dahili saat, dolayısıyla yaklaşık 325 ns'lik bir T durumu verir. Tüm zamanlama hesapları bu tek periyot üzerinden yürür.
Ünite 3: Komut Kümesi ve Adresleme Modları
3.1. Komut Biçimi
Her komut işlem kodu (opcode) ve işlenen (operand) bölümlerinden oluşur. 8085 komutları uzunluklarına göre üç gruptadır:
- Tek baytlık: Yalnız işlem kodu içerir (
MOV A,B,ADD C). - İki baytlık: İşlem kodu ve 8 bitlik veri (
MVI A, 32H). - Üç baytlık: İşlem kodu ve 16 bitlik adres veya veri (
LXI H, 2050H,JMP 2000H).
16 bitlik değerler bellekte düşük bayt önce saklanır. Komut uzunluğu doğrudan getirme çevrimi sayısını, dolayısıyla yürütme süresini belirler.
8085'in komut kümesi 74 temel işlem türü ve 246 farklı işlem kodu içerir; 8 bitlik işlem kodu alanının 256 kombinasyonunun tamamı kullanılmamıştır.
3.2. Komut Grupları
Veri transferi: Veriyi bir yerden diğerine kopyalar; kaynak değişmez ve bayraklar etkilenmez. MOV, MVI, LDA, STA, LXI, LDAX, STAX, LHLD, SHLD, XCHG, IN, OUT.
Aritmetik: ADD, ADI, ADC, SUB, SUI, SBB, INR, DCR, INX, DCX, DAD. Bayrak etkisi komuta göre değişir: ADD/ADC/SUB/SBB ailesi ilgili durum bayraklarını günceller; INR ve DCR CY bayrağını değiştirmez; INX ve DCX bayrakları etkilemez; DAD ise yalnız CY bayrağını etkiler. Bu nedenle 16 bitlik sayaçların sıfır koşulu ayrıca sınanmalıdır.
Mantık: ANA, ORA, XRA, CMA, CMP, CPI ve döndürme komutları RLC, RRC, RAL, RAR. Karşılaştırma komutu çıkarma yapar fakat sonucu saklamaz, yalnız bayrakları kurar. RLC akümülatörü kendi içinde döndürür, RAL ise elde bayrağını döngünün parçası yapar; bu ayrım çok baytlı kaydırmalarda belirleyicidir.
Dallanma: Koşulsuz JMP, CALL, RET; koşullu JZ, JNZ, JC, JNC, JP, JM, JPE, JPO ve bunların çağrı-dönüş karşılıkları.
Makine denetimi: NOP, HLT, EI, DI, SIM, RIM.
3.3. Adresleme Modları
- Anlık (immediate): Veri komutun içindedir.
MVI A, 32H - Yazmaç (register): İşlenenler yazmaçtır.
MOV A, B - Doğrudan (direct): Komut belleğin adresini taşır.
LDA 2050H - Dolaylı (indirect): Adres bir yazmaç çiftindedir.
MOV A, M - Örtük (implicit): İşlenen komutun tanımında saklıdır.
CMA
Dolaylı adresleme dizi ve tablo işlemlerinin temelidir: adres yazmaç çiftinde tutulduğu için INX H ile artırılarak aynı komut farklı gözlere uygulanır. Doğrudan adreslemede adres komutun içinde sabit olduğundan böyle bir esneklik yoktur.
Ünite 4: Zamanlama, Makine Çevrimleri ve Gecikme Döngüleri
Bu ünite, bir komutun makine çevrimleri ve T durumları üzerinden nasıl zamanlandığını ve toplam yürütme süresinin nasıl oluştuğunu ele alır.
komut
|
+--> işlem kodu getirme: T1 T2 T3 ...
|
+--> bellek okuma/yazma: T1 T2 T3 ...
|
+--> G/Ç okuma/yazma: T1 T2 T3 ...
komut süresi = ilgili makine çevrimlerinin toplam süresiBir makine çevriminin zamanlaması incelenirken hangi saat aralıklarında adresin ve verinin geçerli olduğu belirlenir. Okuma veya yazma kontrol sinyallerinin kurulum ve tutma koşulları, bağlı belleğin erişim süresiyle karşılaştırılır. Yavaş çevre birimi için bekleme durumları gerekiyorsa toplam komut süresi yeniden hesaplanır. Zaman diyagramındaki doğru mantık seviyeleri tek başına yeterli değildir; geçerlilik pencereleri fiziksel zaman gereksinimlerini de sağlamalıdır.
4.1. Zamanlama Hiyerarşisi
T durumu : bir saat periyodu, en küçük zaman birimi
Makine çevrimi: yol üzerinde bir erişim (3-6 T durumu)
Komut çevrimi : bir komutun tamamlanması (1-5 makine çevrimi)Komut kodu getirme çevrimi normalde 4 T durumu sürer; işlemcinin dahili işlem yapması gereken durumlarda 6 T durumuna uzar. Bellek ve giriş-çıkış okuma-yazma çevrimleri 3 T durumudur.
Örneğin MOV A, B tek makine çevrimi ve 4 T durumu, LDA 2050H dört makine çevrimi ve 13 T durumu, CALL beş makine çevrimi ve 18 T durumu alır.
4.2. Gecikme Döngüleri
Yazılımla gecikme üretmenin temeli, bilinen sayıda T durumu tüketen bir döngüyü sayaçla tekrarlamaktır.
MVI C, N ; 7 T
LOOP: DCR C ; 4 T
JNZ LOOP ; 10 T (dallanır), 7 T (dallanmaz)Son yinelemede dallanma gerçekleşmediği için 3 T durumu eksik harcanır:
T(toplam) = 7 + N·14 - 3
t(gecikme) = T(toplam) · T(saat)Tek 8 bitlik sayaçla üretilebilecek en uzun gecikme 256 yineleme ile sınırlıdır. Daha uzun gecikmeler için yazmaç çifti kullanılır (DCX bayrak kurmadığından sonuç ayrıca sınanır) veya iç içe iki döngü kurulur. İç içe döngüde toplam süre, iç döngü süresinin dış sayaçla çarpımına dış döngünün kendi ek yükü eklenerek bulunur.
Bu yöntemin sınırı açıktır: gecikme saat frekansına bağımlıdır, işlemciyi tümüyle meşgul eder ve bir kesme geldiğinde süre uzar. Kesin ve işlemciyi bloke etmeyen zamanlama için donanım zamanlayıcı kullanılır (Ünite 10).
Komut çevriminden gerçek zaman bütçesine geçiş. Saat frekansı 3 MHz olan varsayımsal bir işlemcide bir T-state süresi 1/3 µs olur. İncelenen kod yolunun toplamda 30 T-state harcadığı belirlenirse çekirdek yürütme süresi 30/3 = 10 µs bulunur. Ancak dallanma alınmadığında 30, alındığında 42 T-state gerektiren bir yol varsa en kötü durum süresi 42/3 = 14 µs olur. Bir görev için 12 µs son teslim sınırı varsa ortalama yolun yeterli olması tek başına kabul için yeterli değildir. Kesme gecikmeleri, bellek bekleme durumları ve çevre birimi senkronizasyonu da varsa bütçeye eklenmelidir. Çevrim hesabının doğrulaması, kullanılan işlemcinin gerçek komut zamanlaması tablosuyla yapılır; bu örnekteki sayılar belirli bir işlemci komut dizisinin ölçülmüş verisi değil, yöntemi gösteren varsayımsal değerlerdir.
Ünite 5: Yığın ve Altprogramlar
5.1. Yığın
Yığın, yığın işaretçisi tarafından gösterilen ve son giren ilk çıkar (LIFO) düzeninde çalışan bellek alanıdır. 8085'te yığın azalan yönde büyür: PUSH işaretçiyi önce azaltır, POP okuduktan sonra artırır.
PUSH B : SP = SP-1, [SP] = B ; SP = SP-1, [SP] = C
POP D : E = [SP], SP = SP+1 ; D = [SP], SP = SP+1PUSH PSW akümülatör ile bayrak yazmacını birlikte saklar; kesme hizmet altprogramlarının ilk komutu genellikle budur.
Yığın işaretçisi program başında LXI SP ile bellek alanının üst ucuna kurulur. Yığın aşağı doğru büyüdüğü için, veri alanının alt uçtan yukarı büyümesi tasarım kuralıdır; iki alanın buluşması yığın taşmasıdır ve sessizce veri bozar.
PUSH ve POP komutlarının sırası ters simetrik olmalıdır. Sıra bozulursa yazmaç içerikleri karışır; dönüş adresi üzerine yazılırsa program denetimi tümüyle kaybolur.
5.2. Altprogramlar
CALL, bir sonraki komutun adresini yığına iter ve program sayacına hedef adresi yükler. RET yığından iki bayt çekerek program sayacına yazar. Koşullu CALL ve RET biçimleri de vardır.
Bu düzenek altprogram iç içeliğini (nesting) doğal olarak destekler; derinliğin tek sınırı yığın için ayrılan bellektir. Özyineli çağrı da aynı mekanizmayla çalışır.
Parametre geçirme yolları: yazmaçlar üzerinden (hızlı, sayı sınırlı), bellekte belirlenmiş alan üzerinden, işaretçi olarak bir yazmaç çifti üzerinden veya yığın üzerinden. Yığın üzerinden geçirmede dönüş adresinin altındaki gözlerin okunması gerekir; çağrı sonrası yığının temizlenmesinden hangi tarafın sorumlu olduğu bir sözleşme meselesidir.
Altprogramın kullandığı tüm yazmaçları girişte saklayıp çıkışta geri yüklemesi (yazmaç sözleşmesi), çağıran ile çağrılan arasındaki gizli bağımlılıkları ortadan kaldırır. Modern derleyicilerdeki çağrı sözleşmelerinin (calling convention) doğrudan atasıdır.
Ünite 6: Bellek ve Arayüzleme
Bu ünite, adres, veri ve denetim yolları üzerinden işlemci ile RAM, ROM ve G/Ç birimleri arasındaki arayüzü ele alır.
CPU adres yolu -----+----> RAM
+----> ROM
+----> bellek eşlemeli G/Ç
CPU veri yolu <----+----> ortak veri yolu
CPU denetim -----> RD / WR / chip select6.1. Bellek Hücresinden Yongaya
Temel bellek hücresi, veri girişi ve saat kapısı bulunan bir D mandalıdır. Çıkışa üç durumlu (tri-state) tampon, girişe yazma denetimli tampon eklenerek aynı hücre ortak bir yola bağlanabilir hale gelir. Üç durumlu tampon, seçilmeyen yongaların yol üzerinde yüksek empedansta kalmasını sağlar; ortak yolun temel çalışma koşulu budur.
Bir yazmaç oluşturmak için hücreler yan yana, bellek dizisi oluşturmak için yazmaçlar alt alta bağlanır. Belirli bir yazmacı seçen izinleme hattı, adres bitlerinin kod çözücüden geçirilmesiyle üretilir.
Bellek yongası iki sayı ile ölçülür: uzunluk (göz sayısı) ve genişlik (göz başına bit). 2K × 8 bir yonga 2048 göz ve gözde 8 bit taşır ve 2^11 = 2048 olduğundan 11 adres hattı kullanır.
6.2. Adres Kod Çözme
16 adres hattının bir bölümü yonga içindeki gözü, kalanı hangi yonganın seçileceğini belirler. Yonga seç (CS) girişi bu üst bitlerin kod çözülmesiyle sürülür.
A15 A14 A13 A12 A11 A10 | A9 ... A0
yonga seçimi | yonga içi adresÜst bitlerin belirli bir kombinasyonu bir yongaya adres aralığı atar. Aralığın başlangıcı, yonga içi adres bitlerinin tümü sıfır; sonu ise tümü bir yapılarak bulunur.
Tam kod çözme tüm üst adres bitlerini kullanır; her yonganın tek bir adres aralığı olur. Kısmi kod çözme bir bölümünü kullanır; devre basitleşir, karşılığında aynı fiziksel göz birden çok adresten görünür (görüntü, foldback). Küçük sistemlerde kabul edilebilir bir ödünleşimdir, fakat bellek haritasında görünmeyen çakışmalar yarattığı için sistem büyütüldüğünde hata kaynağı olur.
Aynı yaklaşım giriş-çıkış aygıtlarına da uygulanır. 8085 ayrı bir giriş-çıkış adres uzayına sahiptir: IN ve OUT komutları 8 bitlik port adresi kullanır ve 256 port adresler; kod çözmede IO/M sinyali de dikkate alınır. Alternatif olarak aygıt bellek uzayına yerleştirilir (bellek eşlemli G/Ç); bu durumda tüm bellek komutları aygıta uygulanabilir, bedeli bellek adres alanının bir bölümünün harcanmasıdır.
Ünite 7: Kesmeler
Bu ünite, kesme isteğinin normal yürütmeyi geçici olarak devralması, bağlamın korunması, ISR yürütülmesi ve programa dönüş sırasını ele alır.
normal program
|
kesme isteği
|
v
mevcut durumu koru
|
v
ISR çalıştır
|
v
durumu geri yükle
|
v
normal programa dön7.1. Yoklama ve Kesme
Yoklamada (polling) işlemci aygıtın durum bitini döngü içinde okur; basit fakat işlemci zamanının büyük bölümü boşa harcanır ve yanıt gecikmesi döngü süresine bağlıdır. Kesmede aygıt hazır olduğunda işlemciye sinyal verir; işlemci ancak o zaman ilgilenir.
Kesme geldiğinde işlemci yürürlükteki komutu tamamlar, program sayacını yığına iter ve hizmet altprogramına dallanır. Hizmet sonunda RET ile kesilen noktaya dönülür.
7.2. 8085'in Kesme Yapısı
8085 kesme girişleri:
- TRAP: Maskelenemez ve vektörlüdür. Vektör adresi
0024H'dir; kenar ve seviye duyarlılığı birlikte kullanılır. - RST 7.5: Maskelenebilir ve vektörlüdür. Vektör adresi
003CH'dir; pozitif kenar tetiklemelidir ve kesme isteği tutulur. - RST 6.5: Maskelenebilir ve vektörlüdür. Vektör adresi
0034H'dir; seviye duyarlıdır. - RST 5.5: Maskelenebilir ve vektörlüdür. Vektör adresi
002CH'dir; seviye duyarlıdır. - INTR: Maskelenebilir ve vektörsüzdür. Sabit bir vektör adresi yoktur; kesme onay çevrimi sırasında dış donanım tarafından sağlanan komut üzerinden yönlendirilir.
Öncelik sırası yukarıdan aşağıya doğrudur. Vektörlü kesme, hizmet adresi donanımca sabitlenmiş olandır. RST n komutlarının vektör adresi n × 8 ile bulunur.
TRAP maskelenemez; güç kesintisi gibi durdurulamaz olayların bildirimi için ayrılmıştır. RST 7.5 dahili bir mandal içerdiğinden kenar tetiklidir: sinyal kaybolsa bile istek saklanır. Seviye tetikli girişlerde istek sinyalinin hizmet başlayana kadar korunması gerekir.
EI ve DI komutları kesme izin flip-flopunu kurar ve siler; bir kesme kabul edildiğinde bu flip-flop donanımca silinir, dolayısıyla iç içe kesmeye izin verilecekse hizmet altprogramı içinde EI yeniden verilmelidir.
7.3. SIM ve RIM
SIM komutu akümülatördeki kalıbı kesme maskesi olarak yazar:
D7 D6 D5 D4 D3 D2 D1 D0
SOD SDE -- R7.5 MSE M7.5 M6.5 M5.5Maske bitleri ancak MSE biti 1 iken yazılır; bu koruma, seri çıkış için SIM kullanıldığında maskelerin yanlışlıkla değişmesini önler. R7.5 biti RST 7.5 mandalını temizler.
RIM komutu maskeleri, kesme izin durumunu ve bekleyen kesmeleri akümülatöre okur:
D7 D6 D5 D4 D3 D2 D1 D0
SID P7.5 P6.5 P5.5 IE M7.5 M6.5 M5.57.4. Vektörsüz Kesme ve Öncelik
INTR kabul edildiğinde işlemci INTA sinyali üretir ve dış devrenin yol üzerine bir RST n veya CALL komut kodu koymasını bekler. Böylece hizmet adresi tümüyle dış donanım tarafından belirlenir.
Birden çok aygıtın tek INTR hattını paylaşması durumunda öncelik kodlayıcı kullanılır: aygıt istekleri kodlanır ve karşılık gelen RST komut kodu üretilir. Bu görevi tümleşik olarak yerine getiren programlanabilir kesme denetleyicisi (8259A), önceliklendirme, maskeleme, iç içe kesme ve döngüsel öncelik gibi işlevleri tek yongada sunar.
7.5. Kesme Gecikmesi
Bir kesmenin bildirimi ile hizmetin başlaması arasındaki süre, yürürlükteki komutun kalan süresi, kesme kabul çevrimleri ve hizmet altprogramının bağlam saklama komutlarının toplamıdır. Gerçek zamanlı sistemlerde önemli olan ortalama değil, en kötü durum gecikmesidir; en uzun komutun ve kesmelerin kapalı tutulduğu en uzun kritik bölümün süresi bu üst sınırı belirler. Kesmelerin uzun süre kapatılması, en kötü durum gecikmesini doğrudan büyütür.
Ünite 8: Seri İletişim
8.1. Paralel ve Seri İletim
Paralel iletimde tüm bitler ayrı hatlarla aynı anda gönderilir; hızlıdır fakat hat sayısı ve hatlar arası gecikme farkı (skew) nedeniyle yalnız kısa mesafelerde kullanılır. Seri iletimde bitler tek hat üzerinden sırayla gönderilir; yavaştır fakat maliyeti ve kablo karmaşıklığı düşüktür.
İşlemci içindeki veri paralel olduğundan, gönderimde paralel-seri, alımda seri-paralel dönüşüm gerekir.
8.2. Senkron ve Asenkron İletim
Senkron iletimde verici ve alıcı ortak bir zamanlamayla çalışır; veri blokları aralıksız gönderilir ve çerçeve senkronizasyon karakterleriyle sağlanır. Büyük blokların yüksek hızda aktarılmasına uygundur.
Asenkron iletimde her karakter kendi başlangıç ve bitiş bitleriyle çerçevelenir; iletim herhangi bir anda başlayabilir. Alıcı, başlangıç bitinin düşen kenarını yakalayarak kendi saatini hizalar ve her biti bit süresinin ortasında örnekler.
[start=0][d0][d1]...[d7][parity][stop=1]Baud hızı saniyedeki sembol sayısıdır; iki seviyeli iletimde bit hızına eşittir. Bir bitin süresi baud hızının tersidir: 1200 baud için 833 µs. Yazılımla seri iletim yapılırken gecikme döngüsü bu değere göre boyutlandırılır.
Etkin veri hızı, çerçeveleme bitleri nedeniyle baud hızından düşüktür: 8 veri biti, 1 başlangıç, 1 bitiş ve 1 eşlik biti kullanıldığında her 11 bitin 8'i veri taşır.
8.3. Hata Denetimi
Eşlik (parity) biti, karakterdeki 1 sayısını tek veya çift yapacak biçimde eklenir. Tek bitlik hataları yakalar, çift sayıda hatayı yakalayamaz.
Sağlama toplamı ve çevrimsel artıklık denetimi (CRC), blok halinde gönderilen verilerde kullanılır ve çok daha yüksek yakalama gücü sağlar.
Alıcı tarafında üç tipik hata ayırt edilir: eşlik hatası, çerçeveleme hatası (beklenen konumda bitiş biti bulunamaması) ve taşma hatası (önceki karakter okunmadan yenisinin gelmesi). Çerçeveleme hatalarının yığılması genellikle baud hızı uyuşmazlığına işaret eder.
8.4. Elektriksel Standart
RS-232, mantık seviyelerini işlemcinin TTL seviyelerinden farklı tanımlar; arada seviye dönüştürücü gerekir. Standart, sinyal seviyelerinin yanında bağlayıcı ve el sıkışma hatlarını da tanımlar.
8.5. 8085'in Seri Uçları
8085, SOD (seri çıkış) ve SID (seri giriş) uçlarını SIM ve RIM komutlarıyla kullanır. Bir bit göndermek için veri biti SOD konumuna yerleştirilir, SDE biti kurulur ve SIM çalıştırılır; almak için RIM sonrası akümülatörün en anlamlı biti okunur.
Çerçeveleme, bit zamanlaması ve kaydırma tümüyle yazılım tarafından yürütülür; bu nedenle iletim boyunca işlemci bloke olur ve kesme gecikmeleri bit hatasına dönüşür. Adanmış bir seri iletişim yongası (USART) bu işi donanımda yaptığından hem işlemciyi serbest bırakır hem de zamanlama hassasiyetini garanti eder.
Ünite 9: Paralel Giriş-Çıkış ve 8255A
9.1. Yapı
8255A programlanabilir çevre arayüzü 24 giriş-çıkış hattını üç porta böler: A, B ve C. Denetim mantığı iki grup halinde çalışır; A grubu port A ile port C'nin üst dörtlüsünü, B grubu port B ile port C'nin alt dörtlüsünü yönetir. Denetim sözcüğü yazılarak port yönleri ve çalışma modu belirlenir.
9.2. Çalışma Modları
Mod 0 (basit giriş-çıkış): Portlar el sıkışma olmadan giriş veya çıkış olarak kullanılır. Anahtar, LED ve benzeri yavaş aygıtlar için yeterlidir.
Mod 1 (el sıkışmalı giriş-çıkış): Port A ve B veri taşır, port C'nin bitleri el sıkışma sinyallerine ayrılır. Girişte STB aygıtın veriyi yerleştirdiğini, IBF tamponun dolduğunu bildirir; çıkışta OBF verinin hazır olduğunu, ACK aygıtın aldığını bildirir. INTR çıkışı ile aktarım kesme tabanlı yürütülebilir.
Mod 2 (çift yönlü): Yalnız port A için geçerlidir; aynı hatlar üzerinden hem gönderme hem alma yapılır ve gerekli el sıkışma sinyalleri port C'den sağlanır.
BSR modu (bit set-reset): Denetim sözcüğünün en anlamlı biti sıfır olduğunda, port C'nin tek bir biti diğerlerini etkilemeden kurulur veya silinir. Röle ve benzeri tekil çıkışların denetimi için port bütününü yeniden yazmayı gereksiz kılar.
9.3. El Sıkışmanın Gerekçesi
İşlemci ile çevre aygıt arasındaki hız farkı büyüktür. El sıkışma sinyalleri, verinin alınmadan üzerine yazılmasını ve alınmamış verinin okunmasını önler; hız uyumsuzluğunu akış denetimiyle çözer. Aynı ilke modern arabirimlerde hazır-geçerli (ready-valid) el sıkışması olarak sürdürülmektedir.
Ünite 10: Programlanabilir Zamanlayıcı-Sayıcı
10.1. Yapı
8253/8254 üç bağımsız 16 bitlik sayıcı içerir. Her sayıcının kendi saat girişi, kapı (gate) girişi ve çıkışı vardır. Denetim sözcüğüyle sayıcı seçilir, okuma-yazma biçimi, çalışma modu ve sayma tabanı (ikili veya BCD) belirlenir; ardından başlangıç değeri yüklenir.
Sayıcı, saat darbeleriyle geri sayar ve sıfıra ulaştığında çıkışını moda özgü biçimde değiştirir.
10.2. Modlar
- Mod 0 — sayım sonunda kesme: Çıkış sayım boyunca düşük, sayım bitince yüksek kalır. Tek seferlik olay zamanlaması.
- Mod 1 — donanım tetiklemeli tek atım: Kapı tetiklendiğinde çıkış sayım süresince düşüktür; tetik yenilenirse süre baştan başlar.
- Mod 2 — hız üreteci: Sayım sonunda çıkış bir çevrim düşük olur ve sayıcı otomatik yeniden yüklenir. Periyodik kesme kaynağı olarak kullanılır.
- Mod 3 — kare dalga: Çıkış yükleme değerinin yarısı kadar yüksek, yarısı kadar düşük kalır. Saat ve baud üreteci olarak kullanılır.
- Mod 4 — yazılım tetiklemeli darbe: Yükleme sonrası sayım biter bitmez tek çevrimlik darbe üretilir.
- Mod 5 — donanım tetiklemeli darbe: Aynı davranış kapı girişiyle tetiklenir.
8254, 8253'ten farklı olarak geri okuma (read-back) komutu içerir; sayıcının anlık değeri ve durumu, sayım kesilmeden okunabilir.
10.3. Donanım Zamanlayıcının Üstünlüğü
Yazılım gecikme döngüsü işlemciyi bloke eder ve kesmelerden etkilenir. Donanım sayıcı bağımsız çalışır, işlemciyi yalnız sayım bitiminde kesmeyle uyarır ve zamanlaması saat frekansı dışında hiçbir yazılım koşuluna bağlı değildir. Deterministik zamanlama gerektiren her uygulamada tercih edilen çözümdür.
Ünite 11: Veri Transfer Şemaları
11.1. Programlı giriş-çıkış
İşlemci IN ve OUT komutlarıyla aktarımı bizzat yürütür. İki alt biçimi vardır:
Koşulsuz aktarım: Aygıtın her zaman hazır olduğu varsayılır. Yalnız yavaş ve basit aygıtlarda güvenlidir.
Koşullu (yoklamalı) aktarım: İşlemci durum bitini okuyup hazır olana kadar bekler. Güvenlidir, fakat bekleme süresi boyunca işlemci başka iş yapamaz.
11.2. Kesme Tabanlı Aktarım
Aygıt hazır olduğunda kesme üretir. İşlemci ana işini sürdürür, yalnız gerçek aktarım anında müdahale eder. İşlemci kullanımı yüksektir; bedeli, her aktarım için bağlam saklama ve geri yükleme yükü ödenmesidir. Çok küçük veri parçalarının çok sık aktarıldığı durumlarda bu ek yük aktarımın kendisinden büyük olabilir.
11.3. Doğrudan Bellek Erişimi
Yüksek hızlı ve blok halindeki aktarımlarda veri, işlemci üzerinden geçmeden aygıt ile bellek arasında doğrudan taşınır. Denetleyici HOLD sinyaliyle yolu ister; işlemci yürürlükteki makine çevrimini tamamlar, yol sürücülerini yüksek empedansa alır ve HLDA ile onay verir. Aktarım süresince yol denetimi denetleyicidedir.
İki çalışma biçimi vardır. Döngü çalma (cycle stealing) modunda her seferinde tek bir aktarım yapılır ve yol işlemciye geri verilir; işlemci yavaşlar fakat çalışmaya devam eder. Blok modunda tüm blok kesintisiz aktarılır; en yüksek verimi verir, karşılığında işlemci blok süresince durur ve kesme gecikmesi belirgin biçimde artar.
Doğrudan bellek erişimi, işlemci gözüyle görünmeyen bellek yazmaları ürettiği için önbellekli sistemlerde tutarlılık sorunu doğurur; modern sistemlerde bu, önbellek tutarlılık protokolleri veya yazılımla önbellek geçersizleştirme ile çözülür.
Ünite 12: 8086 Ve 16 Bit Mimariye Geçiş
12.1. Temel Özellikler
8086, 16 bit veri yolu ve 20 bit adres yolu olan, 1 MB adresleyebilen bir mikroişlemcidir. 40 pinlik pakete sığması için adres, veri ve durum sinyalleri çoklanmıştır; AD0-AD15 adres ve veri, A16-A19 adres ve durum bilgisi taşır.
İşlemci iki çalışma kipinde yapılandırılır. Minimum kip tek işlemcili sistemler içindir ve denetim sinyalleri doğrudan işlemciden üretilir. Maksimum kip çok işlemcili sistemler içindir; durum sinyalleri bir yol denetleyicisi tarafından çözülerek yol paylaşımı ve eş işlemci desteği sağlanır.
12.2. İki Birimli Yapı
8086 içsel olarak iki bölümden oluşur:
Yol arayüz birimi (BIU) adres üretir, bellek erişimlerini yapar ve getirilen komutları bir kuyruğa doldurur (8086'da altı bayt, 8088'de dört bayt).
Yürütme birimi (EU) kuyruktan komut alır, çözer ve yürütür.
Bu ayrım, yürütme birimi bir komutu işlerken yol arayüz biriminin sonraki komutları önceden getirmesini sağlar. Getirme ve yürütmenin örtüşmesi, boru hattı (pipeline) kavramının ilk ve en basit biçimidir. Kazanç, dallanmada kuyruğun boşaltılması gerektiği için kaybedilir; dallanma cezası, modern boru hatlarında da aynı nedenden kaynaklanır.
12.3. Yazmaçlar
Genel amaçlı AX, BX, CX, DX yazmaçları yüksek ve düşük yarımları ayrı adreslenebilir biçimde kullanılabilir. SI ve DI dizin, BP ve SP işaretçi yazmaçlarıdır. IP komut işaretçisidir.
Bayrak yazmacında altı durum bayrağı (CF, PF, AF, ZF, SF, OF) ve üç denetim bayrağı (TF adım adım yürütme, IF kesme izni, DF dizgi yönü) bulunur.
12.4. Bellek Bölütleme
Dört bölüt yazmacı (CS, DS, SS, ES) 16 bitlik bölüt adreslerini tutar. Fiziksel adres:
Fiziksel adres = (bölüt yazmacı × 16) + ötelemeBu şema, 16 bitlik yazmaçlarla 20 bitlik adres uzayına erişimi sağlar. Bölüt sınırları 16 baytlık paragraflara hizalıdır ve her bölüt en çok 64 KB kapsar. Aynı fiziksel adres birden çok bölüt-öteleme çiftiyle ifade edilebildiğinden, işaretçi karşılaştırmaları normalize edilmedikçe güvenilir değildir.
Bölütleme aynı zamanda ilkel bir yeniden konumlandırma düzeneğidir: program içindeki ötelemeler değişmeden, yalnız bölüt yazmaçları değiştirilerek kod ve veri belleğin başka bir bölgesine taşınabilir.
12.5. Adresleme Modları ve Dizgi Komutları
8086 anlık, yazmaç, doğrudan, yazmaç dolaylı, taban-artı-dizin ve göreli adreslemeyi destekler; öteleme, taban ve dizin bileşenlerinin birleşimi dizi ve yapı erişimlerini tek komuta indirir.
Dizgi komutları (MOVSB, CMPSB, SCASB, LODSB, STOSB) kaynak ve hedefi SI ve DI üzerinden alır, DF bayrağının yönünde otomatik ilerler. REP önekiyle CX sayacı sıfırlanana kadar tekrarlanırlar; bellek blok kopyalama ve arama işlemleri döngü kurmadan tek komutla yürütülür. Bu, karmaşık komut kümesi (CISC) felsefesinin tipik örneğidir: sık kullanılan bir yazılım kalıbının donanıma gömülmesi.
Ünite 13: Klasik Kavramların Güncel Karşılıkları
13.1. CISC ve RISC
8085 ve 8086, değişken uzunluklu komutlar, bellek-yazmaç aritmetiği ve çok çevrimli karmaşık komutlar taşıyan CISC mimarileridir. RISC yaklaşımı sabit uzunluklu komut, yalnız yükle-sakla ile bellek erişimi ve geniş yazmaç kümesi kullanır; kod yoğunluğundan ödün verir, karşılığında kod çözmeyi basitleştirip derin boru hattı ve yüksek saat frekansı sağlar.
Bugün gömülü alanda ARM Cortex-M ve RISC-V aileleri baskındır. Ayrım pratikte bulanıklaşmıştır: modern x86 işlemciler karmaşık komutları dahili olarak basit mikro-işlemlere çevirerek RISC benzeri bir çekirdek üzerinde yürütür.
13.2. Boru Hattı
8086'nın komut kuyruğu getirme ile yürütmeyi örtüştürür. Modern boru hatlarda aşama sayısı beş ile yirmi arasındadır ve her aşama farklı komut üzerinde çalışır. İdeal durumda çevrim başına bir komut tamamlanır.
Üç tehlike (hazard) türü bu ideali bozar: veri tehlikesi (bir komut önceki komutun henüz yazılmamış sonucuna ihtiyaç duyar), denetim tehlikesi (dallanma sonucu belli olmadan sonraki komutlar getirilmiştir) ve yapısal tehlike (aynı donanım kaynağına eşzamanlı ihtiyaç). Çözümler sırasıyla ileri besleme, dal öngörüsü ve kaynak çoğaltmadır.
Gerçek zamanlı sistemlerde boru hattı ve dal öngörüsü, ortalama başarımı yükseltirken en kötü durum yürütme süresinin analizini zorlaştırır. Zamanlama kesinliği gereken çekirdeklerde bu nedenle sığ boru hattı tercih edilir.
13.3. Bellek Hiyerarşisi ve Önbellek
8085'te tüm bellek tek hızdadır. Modern sistemlerde işlemci hızı ile ana bellek hızı arasındaki fark, aradaki her erişimi darboğaza çevirir. Bu fark, yazmaç-önbellek-ana bellek-kalıcı depolama hiyerarşisiyle kapatılır.
Önbellek, zamansal ve uzamsal yerellik varsayımına dayanır: yakın zamanda erişilen ve yakın adresteki verilere yeniden erişilme olasılığı yüksektir. Erişim isabetliyse gecikme birkaç çevrim, ıskaysa yüzlerce çevrimdir. Ortalama erişim süresi:
t(ortalama) = t(önbellek) + ıska_oranı · t(ceza)Deterministik davranış gereken sistemlerde önbellek yerine, gecikmesi sabit ve programcı denetiminde olan sıkı bağlı yerel bellek (TCM, scratchpad) kullanılır.
13.4. Kesme Denetimi
8085'in beş kesme hattı ve dış öncelik kodlayıcısının yerini, çekirdeğe tümleşik kesme denetleyicileri almıştır. Cortex-M ailesindeki iç içe vektörlü kesme denetleyicisi yüzlerce kesme kaynağını, programlanabilir öncelik seviyeleriyle ve otomatik bağlam saklamayla yönetir; öncelik önalımı (preemption) donanımca yürütülür.
Değişmeyen ilke şudur: kesme gecikmesinin en kötü durum sınırı, gerçek zamanlı bir sistemin tasarımında ortalama başarımdan daha belirleyicidir.
13.5. Çevre Veri Yolları
Klasik dersteki paralel port ve el sıkışma düzeneğinin bugünkü karşılıkları farklı ödünleşimlerle konumlanır:
- UART: Asenkron seri iletimin doğrudan devamı; noktadan noktaya, düşük hız, saat hattı yok.
- SPI: Senkron, tam çift yönlü, yüksek hızlı; her köle için ayrı seçim hattı gerekir.
- I²C: İki hatlı, adreslenebilir çoklu aygıt; hız düşük, kablolama en az.
- CAN: Fark sinyalli, önceliğe göre yol tahkimi yapan, gürültülü ortamlar için tasarlanmış yayın veri yolu.
- USB ve Ethernet: Yüksek hızlı, katmanlı protokolleri ve kendi denetleyicileri olan arabirimler.
Seçim ölçütü aynıdır: hat sayısı, mesafe, hız, aygıt sayısı ve gürültü dayanımı arasındaki ödünleşim.
13.6. Doğrudan Bellek Erişiminin Bugünü
Modern mikrodenetleyicilerde çok kanallı DMA denetleyicileri, çevre birimlerinden gelen tetiklerle çalışır ve dairesel tampon, çift tamponlama, bellekten belleğe aktarım gibi kipleri destekler. Yüksek örnekleme hızlı analog-sayısal dönüştürücü verilerinin işlemciye hiç uğramadan belleğe alınması bugünkü tipik kullanımdır.
13.7. Koruma ve Güvenlik
8085'te bellek koruması yoktur; her komut her adrese erişebilir. Modern çekirdekler bellek koruma birimi ile bellek bölgelerine erişim izni tanımlar; ayrıcalıklı ve kullanıcı kipleri ayrılır. Güvenli bölge teknolojileri (örneğin TrustZone) güvenilir ve güvenilmeyen yürütme alanlarını donanımda ayırır.
Gömülü sistemlerde güvenlik artık bir seçenek değil kısıttır: güvenli önyükleme, imzalı yazılım güncellemesi ve hata ayıklama arayüzünün üretimde kilitlenmesi standart gereklerdir.
13.8. Çok Çekirdeklilik
Tek işlemcili modelin yerini, ortak bellek üzerinde çalışan birden çok çekirdek almıştır. Bu, ders boyunca sessizce varsayılan iki şeyi geçersiz kılar: bellek erişimlerinin bir tek sırası olduğu ve okuma-değiştirme-yazma dizisinin bölünemez olduğu.
Sonuç olarak önbellek tutarlılık protokolleri, bellek sıralama modelleri ve atomik komutlar devreye girer. Yığın kavramı çekirdek başına ayrı yığınlara, kesme ile ana program arasındaki paylaşımlı değişken sorunu ise genel eşzamanlılık denetimi problemine dönüşür.
13.9. Gözetleme Zamanlayıcısı, Zaman Aşımı ve Güvenli Durum
Modern gömülü sistemlerde işlemcinin yalnız doğru komutları yürütmesi yeterli değildir; yazılımın ilerleyemediği veya beklenen zaman sınırını aştığı durumların da belirlenmesi gerekir. Gözetleyici zamanlayıcı (watchdog), yazılım belirlenen süre içinde yaşam belirtisi üretmezse sistemi sıfırlama veya güvenli tepki başlatma mekanizması sağlayabilir.
Gözetleme zamanlayıcısı tek başına hata toleransı değildir. Yeniden başlatma sonrasında çıkışların hangi durumda olacağı, yarım kalmış işlemlerin nasıl ele alınacağı, kalıcı arızada sonsuz yeniden başlatma döngüsünün nasıl önleneceği ve sistemin güvenli duruma nasıl geçeceği de tasarımın parçasıdır. Bu yaklaşımın uçuş bilgisayarı ve kritik gerçek zamanlı yazılım bağlamı Aviyonik Sistemler ve İnsansız Hava Araçları dersinde genişletilmektedir.
13.10. MCU/SoC Üzerinde Gerçek Zamanlılık
Klasik mikroişlemci dersindeki kesme, zamanlayıcı, DMA ve bellek eşlemeli G/Ç kavramları modern MCU/SoC üzerinde gerçek zamanlı yazılımın temelini oluşturur. Ancak "hızlı işlemci" ile "öngörülebilir zamanlama" aynı özellik değildir.
13.10.1. Interrupt Latency
Bir interrupt oluştuğunda ISR'nin başlamasına kadar geçen süre yalnız işlemci frekansına bağlı değildir. Daha yüksek öncelikli kesmeler, maskelenmiş kesme aralıkları, pipeline/cache durumu ve işletim sistemi kritik bölgeleri gecikmeye katkı verebilir.
olay
↓
interrupt pending
↓
önceki işin güvenli kesilmesi
↓
context save
↓
ISR başlangıcıGerçek zamanlı tasarımda ortalama interrupt latency yerine üst sınırın bilinmesi daha değerlidir.
13.10.2. RTOS Görevleri ve Öncelik
RTOS scheduler periyodik veya olay güdümlü görevleri önceliklerine göre çalıştırabilir. Yüksek öncelik her zaman "daha önemli kod" anlamına gelmez; öncelik sistemin deadline ve bağımlılık yapısından türetilmelidir.
Kilit kullanan görevlerde priority inversion oluşabilir. Priority inheritance veya ceiling protokolleri bu gecikmeyi sınırlandırmak için kullanılabilir.
13.10.3. Cache, DMA ve Görünürlük
DMA birimi belleğe CPU'dan bağımsız erişebilir. Cache bulunan SoC'de şu hata mümkündür:
CPU cache'te yeni veri
RAM'de eski veri
DMA RAM'i okurve ters yönde DMA'nın yazdığı yeni veri CPU cache'inde görünmeyebilir.
Bu nedenle cache maintenance, memory barrier ve DMA buffer sözleşmesi platform dokümantasyonuna göre kurulmalıdır. volatile cache coherency mekanizması değildir; derleyici erişimlerini sınırlar fakat donanım önbellek tutarlılığını tek başına sağlamaz.
13.10.4. Watchdog ve Deadline
Watchdog yalnız "program kilitlendi mi?" sorusuna cevap vermemelidir. Ana işlevin zamanında ilerlediği doğrulanmadan watchdog beslemek sistemin işlevsel olarak durmuş olmasını gizleyebilir.
Daha güvenilir desen:
kritik görevler ilerledi mi?
↓ evet
health aggregation
↓
watchdog serviceşeklindedir.
13.10.5. Öngörülebilirlik Bütçesi
Bir gerçek zamanlı yol şu bileşenlerden oluşabilir:
sensor interrupt
+ ISR
+ queue/wakeup
+ task execution
+ bus/DMA
+ actuator updateBu zincirin toplam worst-case gecikmesi deadline'dan küçük olmalıdır. Ortalama sürelerin toplamı gerçek zamanlı garanti değildir.
Bu konu, mikroişlemci düzeyindeki mekanizmaları ayrı [Gömülü ve Gerçek Zamanlı Sistemler] dersine taşıyacak doğal geçiş noktasıdır; mikroişlemci dersindeki amaç mekanizmaların donanım kökünü görünür tutmaktır.
13.11. Mikroişlemcide Veri Hareketinin Maliyeti
Mikroişlemci tabanlı bir denetimde işlemcinin aritmetik hızı kadar çevre birimlerine veri taşıma yolu da belirleyicidir. DMA kullanımı, kesme servis süresi, cache bakım gereksinimi ve bellek eşleme düzeni örnekleme döngüsündeki gecikmeyi etkiler. Süre hesabı yapılırken yalnız komut sayısı değil veri aktarımının hangi çevrimde başlayıp tamamlandığı, otobüs erişim çatışmaları ve gerçek zamanlı kesme öncelikleri değerlendirilmelidir.
- Register-cache-DRAM zincirinde gecikme ve enerji maliyetlerinin karşılaştırılması.
- Pipeline stall nedenlerinin branch, dependency ve memory wait olarak ayrıştırılması.
- Performans counter verisinin kaynak kodu seviyesindeki erişim örüntüsüyle ilişkilendirilmesi.
Ünite 14: Yazılım-Donanım Sınırında Taşınabilirlik ve Doğrulama
Klasik mikroişlemci eğitimi yazmaç, komut ve yol yapısını öğretir; modern sistemlerde ise doğru çalışan gömülü yazılım için işlemci ile derleyici, ABI, bellek sistemi ve çevre birimi arasındaki sözleşmeler de birlikte okunmalıdır.
14.1. Endianness ve Veri Temsili
Endianness, çok baytlı bir değerin bellekte hangi bayt sırasıyla tutulduğunu tanımlar. Sayısal değer değişmez; yalnız fiziksel bayt yerleşimi değişir. Bu ayrım özellikle ikili dosya biçimleri, ağ paketleri, çevre birimi yazmaçları ve farklı mimariler arasında veri paylaşımında görünür hale gelir.
Taşınabilir kod, bir tamsayının bellekteki bayt düzenini varsaymak yerine protokolün veya dosya biçiminin belirlediği düzeni açıkça uygular. Aynı ilke bit alanları için de geçerlidir: C/C++ bit-field yerleşiminin donanım yazmaç düzeniyle kendiliğinden aynı olduğu varsayılmamalıdır.
14.2. Hizalama ve Erişim Genişliği
Bir veri türünün doğal hizalaması, işlemcinin o veriyi hangi adres sınırında verimli veya geçerli biçimde okuyabildiğini etkiler. Bazı mimariler yanlış hizalanmış erişimi donanımsal olarak işlerken bazıları istisna üretebilir veya birden çok bellek işlemi yapmak zorunda kalabilir.
Bu nedenle paketli ağ yapıları ya da dosyadan alınan ham baytlar doğrudan daha geniş bir tamsayı işaretçisine dönüştürülmemelidir. Veri temsili, hizalama ve katı takma adlama (strict aliasing) kuralları dil düzeyi ile donanım düzeyi arasında ayrı ayrı değerlendirilmelidir.
14.3. ABI ve Çağrı Sözleşmesi
Komut kümesi mimarisi hangi komutların var olduğunu tanımlar; uygulama ikili arabirimi (ABI) ise derlenmiş bileşenlerin birbirleriyle nasıl konuşacağını belirler. Parametrelerin hangi yazmaçlarda veya yığında taşındığı, dönüş değerinin nerede bulunduğu, hangi yazmaçların çağıran ya da çağrılan tarafından korunacağı ve yığın hizalaması ABI kapsamındadır.
Aynı ISA üzerinde farklı ABI'ler mümkün olabilir. Bu nedenle assembly ile C/C++ arasında sınır kurarken yalnız işlemci veri sayfası değil, hedef platformun ABI belgesi de kaynak kabul edilmelidir.
14.4. Adres Çevirisi ve Koruma Sınırı
Basit mikrodenetleyicide fiziksel adres doğrudan bellek veya çevre birimine gidebilir. Daha gelişmiş sistemlerde MMU sanal adresi fiziksel adrese çevirir; MPU ise bölge tabanlı erişim yetkileri sağlayabilir. Bu mekanizmalar aynı işlevi yapmaz.
Koruma tasarımında şu ayrımlar önemlidir:
sanal adres != fiziksel adres
erişim yetkisi != önbellek politikası
ayrıcalık seviyesi != kullanıcı kimliği
adres eşleme != sahiplikBir erişimin geçerli olması, onun gecikmesiz veya önbelleklenebilir olduğu anlamına gelmez.
14.5. DMA, Önbellek ve Sahiplik
DMA motoru belleğe CPU'dan bağımsız erişebildiği için aynı tampon üzerinde iki yürütme birimi oluşur: CPU ve DMA. Önbellekli sistemlerde yalnız işaretçi paylaşmak veri görünürlüğünü garanti etmez. Platforma göre önbellek temizleme/geçersizleştirme, bellek bariyeri, eşgüdüm protokolü veya tutarlı DMA desteği gerekebilir.
Güvenilir tasarım tampon sahipliğini durum geçişleriyle açıkça tanımlar:
CPU hazırlıyor
↓
DMA'ya devredildi
↓
DMA aktarımı
↓
tamamlanma olayı
↓
CPU yeniden sahipBu model, aynı tamponun iki tarafça eşzamanlı ve belirsiz biçimde değiştirilmesini önler.
14.6. Donanım Sayaçları ve Ölçüm
Kaynak kod satırı ya da assembly komutu sayısı doğrudan çalışma süresi değildir. Modern çekirdekte önbellek kaçırmaları, dallanma tahmini, bekleme durumları, bellek yolu çekişmesi ve kesmeler çevrim sayısını değiştirebilir.
Donanım destekliyorsa çevrim sayacı ve performans sayaçları; gerçek zamanlı gömülü sistemlerde ise osiloskop, mantık çözümleyici veya GPIO zaman damgalama gibi dış ölçüm yöntemleri birlikte kullanılabilir. Ölçüm yöntemi gözlenen davranışı değiştirebileceğinden, enstrümantasyon maliyeti ayrıca hesaba katılmalıdır.
14.7. ISA, ABI ve Mikromimari Aynı Şey Değildir
Bir programın davranışını analiz ederken üç katman birbirinden ayrılmalıdır:
ISA → programcıya görünen komut ve durum sözleşmesi
ABI → derlenmiş bileşenlerin ikili çağrı/veri sözleşmesi
mikromimari → bu sözleşmelerin donanım içinde nasıl gerçekleştirildiğiAynı ISA'yı kullanan iki işlemci farklı boru hattı, önbellek, kestirimci veya yürütme birimine sahip olabilir. Bu nedenle işlevsel taşınabilirlik ile zamanlama taşınabilirliği aynı garanti değildir.
14.8. Mikroişlemciyi Komut, Veri Yolu ve Çevrebirim Zamanlamasıyla Birlikte Okumak
Mikroişlemci sistemi, birbirine üç yolla bağlanmış üç bileşenden oluşur: işlemci, bellek ve giriş-çıkış. Adres yolu nereye, veri yolu neyi, denetim yolu ne zaman ve hangi yönde sorularını yanıtlar. Dersin tüm konuları bu üç sorunun somutlaşmasıdır.
Adresleme kod çözme problemidir. Bellek yongası seçimi, giriş-çıkış port seçimi ve bölütleme aynı işi farklı ölçeklerde yapar: adres bitlerini bölüp bir bölümünü hedef seçimine, kalanını hedef içi konuma ayırmak.
Zamanlama uyumsuz hızları uzlaştırma problemidir. Bekleme durumları, el sıkışma sinyalleri, tamponlama ve önbellek, aynı sorunun farklı katmanlardaki çözümleridir.
Denetim akışı bağlam saklama problemidir. Altprogram çağrısı, kesme ve görev değiştirme, aynı düzeneğin giderek genişleyen biçimleridir: yürürlükteki durumu yığına al, başka bir yere dallan, dönüşte durumu geri yükle. Yığının doğru yönetilmemesi her üç durumda da aynı sonucu doğurur.
Veri aktarımı, işlemcinin ne kadar dahil olacağı ekseninde sıralanır: koşulsuz programlı aktarım, yoklama, kesme, doğrudan bellek erişimi. Sıralamada aşağı inildikçe işlemci kullanımı artar, karşılığında donanım karmaşıklığı ve öngörülemezlik artar.
Klasik 8085 malzemesinin bugünkü değeri, bu ilkelerin karmaşıklık katmanları olmadan görülebilmesidir. Aynı ilkeler modern çekirdeklerde ortadan kalkmamış, boru hattı, önbellek, bellek koruma ve çok çekirdeklilik katmanlarının altına gömülmüştür.
14.9. Mikroişlemcide Temel Mimari ve Yürütme Kavramları
- Mikroişlemci != mikrobilgisayar != mikrodenetleyici (biri yalnız işlem birimi, biri tam sistem, biri tek pakette tümleşik sistem)
- Komut kodu != işlenen (biri ne yapılacağını, diğeri neyle yapılacağını söyler)
- Komut çevrimi != makine çevrimi != T durumu (biri komutun tamamı, biri tek yol erişimi, biri tek saat periyodu)
- Bayt sayısı != T durumu sayısı (komut uzunluğu ile yürütme süresi ayrı büyüklüklerdir)
- Adres yolu genişliği != veri yolu genişliği (biri kapasiteyi, diğeri sözü belirler)
- ALE != adres yolu (ALE çoklanmış düşük adresin ne zaman tutulacağını söyler)
- Doğrudan adresleme != dolaylı adresleme (adres komutun içinde mi yazmaçta mı)
- Anlık adresleme != doğrudan adresleme (biri veriyi, diğeri verinin adresini taşır)
- Kopyalama != taşıma (
MOVkaynağı değiştirmez) - CMP != SUB (biri yalnız bayrak kurar, sonucu saklamaz)
- RLC != RAL (biri akümülatör içinde döner, diğeri elde bayrağını döngüye katar)
- INR != INX (biri bayrak kurar, diğeri kurmaz)
- Yığın işaretçisi != program sayacı (biri veri tepesini, diğeri komut adresini gösterir)
- PUSH sırası != POP sırası (ters simetrik olmak zorundadır)
- CALL != JMP (biri dönüş adresini yığına yazar)
- Yoklama != kesme (biri işlemcinin sorması, diğeri aygıtın bildirmesi)
- Maskelenebilir != maskelenemez kesme (TRAP yazılımla kapatılamaz)
- Vektörlü != vektörsüz kesme (hizmet adresi donanımca sabit mi dışarıdan mı verilir)
- Kenar tetikli != seviye tetikli (kenar tetiklide istek mandalda saklanır)
- EI != SIM (biri genel kesme iznini, diğeri tekil maskeleri yönetir)
- Kesme gecikmesi ortalaması != en kötü durum gecikmesi (gerçek zamanlılıkta ikincisi bağlayıcıdır)
- Tam kod çözme != kısmi kod çözme (kısmi kod çözme adres görüntüleri üretir)
- Bellek eşlemli G/Ç != ayrı G/Ç uzayı (biri bellek adres alanı harcar, diğeri IN/OUT ile sınırlıdır)
- Bellek uzunluğu != bellek genişliği (göz sayısı ile göz başına bit sayısı)
- Senkron != asenkron iletim (ortak saat mi karakter başına çerçeveleme mi)
- Baud hızı != veri hızı (çerçeveleme bitleri veri taşımaz)
- Eşlik denetimi != hata düzeltme (eşlik yalnız yakalar, düzeltmez)
- Seri iletim != paralel iletim (hat sayısı ile mesafe ve hız arasındaki ödünleşim)
- 8255 mod 0 != mod 1 (el sıkışma sinyallerinin varlığı)
- BSR modu != G/Ç modu (biri tek bit kurar-siler, diğeri port yapılandırır)
- Yazılım gecikme döngüsü != donanım zamanlayıcı (biri işlemciyi bloke eder ve kesmelerden etkilenir)
- Kesme tabanlı aktarım != DMA (birinde veri işlemci üzerinden geçer)
- Döngü çalma != blok modu DMA (işlemcinin durma süresi ve kesme gecikmesi farkı)
- Bölüt adresi != fiziksel adres (fiziksel adres bölüt×16 + öteleme ile bulunur)
- Komut kuyruğu != önbellek (biri sıradaki komutları önceden getirir, diğeri veri ve komutu yerelliğe göre saklar)
- Boru hattı != paralel işlemci (biri tek akışın aşamalarını örtüştürür)
- CISC != RISC (komut karmaşıklığı ile kod çözme basitliği arasındaki ödünleşim)
- Ortalama başarım != en kötü durum yürütme süresi (gerçek zamanlı tasarımın ölçütü ikincisidir)
14.10. Bellek Eşlemeli G/Ç, volatile Ve Donanım Sıralaması
Bellek eşlemeli çevre birimi register'ları normal RAM değişkeni gibi davranmaz. Aynı adresi okumak cihaz durumunu tüketebilir, yazmak fiziksel yan etki oluşturabilir ve register değeri programın kontrolü dışında değişebilir. Derleyici bu erişimleri sıradan değişken gibi optimize etmemelidir.
C/C++ gömülü kodda volatile, erişimin gerçekten yapılmasını ifade etmek için kullanılır; fakat thread-safe atomiklik veya CPU bellek bariyeri garantisi değildir. Çok çekirdekli sistemde veya DMA ile paylaşılan tamponlarda mimariye özgü bellek sıralaması ayrıca dikkate alınır.
Register tanımında bit maskeleri, read-only/write-one-to-clear alanlar ve reserved bit'ler veri sayfasından aynen uygulanmalıdır. "Mevcut değeri oku, biti değiştir, geri yaz" kalıbı W1C alan bulunan register'da istemeden başka olayları temizleyebilir.
14.11. Veri Sayfası ile Kod Arasında Doğrulama
Bir çevre birimi register'ı için bit adı yeterli değildir; reset değeri, erişim türü, reserved bit davranışı ve write-one-to-clear gibi özel semantik veri sayfasından kontrol edilmelidir.
Zamanlama örneğinde osiloskop/logic analyzer ölçümü, yazılımın beklediği sıra ile fiziksel sinyalin gerçekten aynı olup olmadığını gösterir. Kesme gecikmesi, bus hızı ve DMA etkileşimi yalnız kaynak koddaki satır sayısından çıkarılamaz.
Mimari örneklerde 8085/8086, ARM veya RISC-V davranışları birbirine genellenmemelidir. ISA kuralı, üretici mikrodenetleyici dokümanı ve kart düzeyi elektriksel sınırlar ayrı referans katmanlarıdır.
14.12. Mikroişlemcilerden Edge AI Çıkarımına
Mikroişlemci ile yapay zekâ arasındaki en sağlam bağ, modelin kaynakları sınırlı bir cihaz üzerinde çalıştırılmasıyla kurulur. Bulut veya sunucu tarafında büyük bellek ve yüksek güç bütçesi bulunabilir; gömülü sistemde ise RAM, flash, işlem süresi ve enerji aynı anda sınırdır. Bu nedenle edge AI, yalnız modeli küçültmek değil, algoritmayı mikroişlemcinin gerçek yürütme koşullarına uydurmak problemidir.
Basit bir çıkarım hattı:
sensör / giriş
↓
ön işleme
↓
model
↓
karar
↓
çıkış / aktüatörşeklindedir. Her aşama işlem süresi ve bellek tüketir. Model ağırlıkları flash'ta bulunabilir, çalışma sırasında SRAM'e kısmen taşınabilir. Ara tensörlerin tamamı aynı anda tutulmak zorunda değilse tampon yeniden kullanımı bellek ihtiyacını azaltabilir. Bu, klasik gömülü yazılımdaki statik bellek planlamasının model çalışma zamanındaki karşılığıdır.
Nicemleme burada merkezi bir araçtır. FP32 ağırlık ve aktivasyonları INT8 veya daha dar gösterimlere dönüştürmek model boyutunu ve aritmetik maliyeti azaltabilir. Ancak ölçek ve sıfır noktası gibi nicemleme parametreleri sayısal davranışın parçasıdır. Eğitim sonrası nicemleme kolay olabilir fakat model doğruluğu düşebilir; nicemleme farkındalıklı eğitim bu hatayı eğitim sırasında hesaba katabilir. Kazanç mutlaka hedef cihazda ölçülmelidir.
Sabit nokta aritmetiği klasik mikroişlemci bilgisini yeniden görünür kılar. Çarpma sonrası bit genişliği, yuvarlama, doygunluk ve taşma model çıktısını etkiler. “Tamsayı işlemci daha hızlıdır” genellemesi tek başına yeterli değildir; çekirdeğin DSP/SIMD komutları, bellek erişimi ve kullanılan çıkarım çekirdekleri gerçek maliyeti belirler.
Kesme ve gerçek zamanlılık da önemlidir. Sensör örnekleri belirli periyotla geliyorsa inference süresi bu periyodu aşmamalı veya görev bölünmelidir. Ortalama süre yerine en kötü durum ve yüksek yüzdelik davranış incelenmelidir. Model hesaplaması kesmeleri uzun süre engelliyorsa sistem başka gerçek zamanlı görevleri kaçırabilir.
DMA, sensör veya haberleşme verisinin CPU'yu gereksiz kopyayla meşgul etmeden belleğe taşınmasını sağlayabilir. Çift tamponlama ile bir tampon işlenirken diğeri doldurulabilir. Bu yaklaşım AI'ya özgü değildir; ancak sürekli sensör çıkarım hattında iş hacmi ve deterministik davranış için değerlidir.
Enerji de ayrı bir metriktir. Daha hızlı çıkarım her zaman daha az enerji anlamına gelmez. Yüksek frekansta kısa süre çalışmak ile düşük frekansta uzun süre çalışmak cihazın güç karakteristiğine göre farklı sonuç verir. Bataryalı sistemde görev başına enerji, yalnız gecikmeden daha anlamlı olabilir.
Edge AI'nın sınırı da nettir. Mikroişlemci dersi modelin nasıl öğrenildiğini açıklamaz. Buna karşılık öğrenilmiş fonksiyonun sınırlı bellek, zaman, veri yolu ve enerji altında nasıl gerçek bir gömülü göreve dönüştüğünü açıklar. Bu nedenle model seçimi, nicemleme ve çalışma zamanı optimizasyonu hedef donanım bilinmeden tamamlanmış sayılmaz.
14.13. Bir Komutun Donanım İçindeki Yolunu İzlemek
Mikroişlemci konularını birbirinden kopuk yazmaç ve komut listeleri olarak öğrenmek yerine tek bir komutun yürütülmesini izlemek birçok kavramı aynı anda birleştirir. İşlemci önce program sayacının gösterdiği adresten komutu getirir, komut kodunu çözer, gerekli operandları yazmaçtan veya bellekten alır, işlemi yürütür ve sonucu uygun hedefe yazar. Bu sırada program sayacı, bayraklar, adres ve veri yolları ile denetim sinyalleri aynı işlemin farklı parçalarıdır.
LOAD R1, [A] benzeri soyut bir komut düşünüldüğünde önce komutun kendisi bellekten getirilir. Ardından A adresi üretilir, bellek okuma çevrimi gerçekleşir ve veri R1 yazmacına aktarılır. Bellek ile işlemci aynı hızda değilse bekleme durumları veya önbellek davranışı toplam süreyi etkileyebilir. Bu nedenle “bir komut bir çevrim sürer” türü genellemeler mimari ve mikro-mimari ayrımı yapılmadan kullanılamaz.
Polling, kesme ve DMA da aynı G/Ç probleminin farklı çözümleridir. Polling işlemcinin aygıt durumunu tekrar tekrar kontrol etmesine dayanır. Kesme, aygıt hazır olduğunda işlemcinin yürütmesini kısa süreliğine başka bir yordamda sürdürmesini sağlar. DMA ise büyük veri aktarımında her sözcüğün işlemci tarafından taşınması gereksinimini azaltır. Bunlardan hiçbiri her durumda mutlak olarak üstün değildir; aktarım boyutu, gecikme gereksinimi, kesme maliyeti ve donanım desteği seçimi etkiler.
Endian konusu da sayı değerinden çok byte sırasıyla ilgilidir. Aynı çok baytlı değer bellekte farklı sıralarda tutulabilir; değer değişmez, fiziksel byte düzeni değişir. Ağ protokolü, ikili dosya veya çevre birimi ile çalışırken bu ayrım görünür hale gelir.
Bir mikroişlemci sorusunda yararlı yaklaşım, komutu yalnız sözdizimiyle değil adres üretimi -> veri hareketi -> işlem -> durum değişikliği zinciriyle okumaktır. Bu zincir, daha sonraki Bilgisayar Mimarisi ve gömülü sistem konularının da temelidir.
14.14. Çevre Birimleri, Seri Veri Yolları ve Zaman Sözleşmeleri
Mikroişlemci veya mikrodenetleyici programlamak, yalnız komut kümesini bilmek değildir. Gerçek sistemde işlemci; sensör, motor sürücüsü, dönüştürücü, haberleşme modülü ve başka denetleyicilerle çevre birimi kayıtları ve fiziksel veri yolları üzerinden etkileşir. Bu katman, mikroişlemci dersini gömülü sistem tasarımına bağlar.
14.15. GPIO: Dijital Pin Yalnız 0 ve 1 Değildir
Bir GPIO pininin giriş/çıkış yönü, pull-up/pull-down yapılandırması, sürüş gücü, kenar algılama ve alternatif fonksiyon seçimi ayrı kayıtlarla denetlenebilir. Bir pini yazılımla 1 yapmak, fiziksel hatta her koşulda ideal lojik seviye oluşacağını garanti etmez; yük, gerilim alanı, rise/fall time ve elektriksel sınırlar veri sayfasından doğrulanmalıdır.
14.16. UART, SPI ve I²C Farklı İletişim Sözleşmeleridir
UART eşzamansız seri iletişimdir. Ortak saat hattı taşımaz; iki uç baud rate, veri bitleri, parity ve stop-bit yapılandırmasında anlaşmalıdır. Sürekli byte stream için basit ve yaygındır.
SPI, ortak saatle çalışan senkron bir master/peripheral yapısıdır. Ayrı saat ve veri hatları yüksek aktarım hızını kolaylaştırabilir; ancak birden çok peripheral için chip-select yönetimi gerekir ve standart, üst seviye mesaj biçimini tek başına tanımlamaz.
I²C, saat ve veri hatlarını çok sayıda aygıtın paylaşabildiği adresli bir veriyoludur. Açık-drenç/open-drain sürüş ve pull-up dirençleri fiziksel katmanın parçasıdır. Başlatma, durdurma, ACK/NACK ve adresleme kuralları veri aktarımının sözleşmesini oluşturur.
UART TX ───────── RX asenkron, nokta-nokta ağırlıklı
RX ───────── TX
SPI SCLK ───────┬──── ortak saat
MOSI ───────┼──── ayrı veri hatları
MISO ───────┼────
CS0/CS1 ────┴──── aygıt seçimi
I²C SCL ────────┬──── paylaşılan saat
SDA ────────┴──── paylaşılan adresli veriBu veri yollarında “protokol çalışıyor” demek yalnız doğru baytları görmek değildir. Saat hızı, kablo/iz kapasitesi, pull-up değeri, gerilim seviyesi, chip-select zamanlaması ve aygıtın veri sayfasındaki setup/hold süreleri birlikte değerlendirilir.
14.17. Polling, Kesme ve DMA Aynı Problemi Farklı Maliyetlerle Çözer
Bir çevre birimini sürekli polling ile kontrol etmek basit fakat CPU zamanı tüketen bir çözümdür. Kesme, olay olduğunda işlemciyi haberdar eder; düşük olay oranında daha verimli olabilir fakat kesme fırtınası ve öncelik davranışı tasarım problemi oluşturabilir. DMA, büyük veya düzenli veri aktarımını işlemcinin her bayta müdahalesi olmadan gerçekleştirebilir; buna karşılık buffer sahipliği ve önbellek görünürlüğü dikkat ister.
polling → CPU bekler ve tekrar sorar
interrupt→ aygıt olayı CPU'yu çağırır
DMA → aygıt/bellek aktarımı blok halinde yürürSeçim yalnız ortalama throughput'a göre yapılmaz. En kötü durum gecikmesi, CPU bütçesi, enerji tüketimi ve veri kaybı riski de tasarım değişkenidir.
14.18. Gerçek Zamanlılık: Hızlı Olmak Değil Zaman Sınırını Kanıtlamak
Gömülü bir görev için ortalama yürütme süresi tek başına yeterli değildir. En kötü durum yürütme süresi (WCET), kesme gecikmesi, öncelik, kilitlenen kaynaklar ve periyodik görevlerin toplam CPU talebi deadline ile birlikte değerlendirilmelidir.
sensör örnekleme periyodu : 10 ms
son teslim süresi : 10 ms
WCET : 2.4 ms
kesme + engellenme bütçesi: 0.8 ms
kalan zaman payı : 6.8 msBu sayılar yalnız örnek bir bütçedir; gerçek WCET ve jitter ölçümle veya uygun analiz yöntemiyle doğrulanmalıdır. RTOS, görevlere öncelik, zamanlama ve senkronizasyon mekanizmaları sunar; fakat tek başına sistemi deterministik yapmaz. Uzun kritik bölgeler, öncelik terslenmesi, cache miss, DMA çakışması veya bloklayan sürücü çağrısı deadline ihlali yaratabilir.
14.19. Watchdog Hata Düzeltmez, Hata Modelini Sınırlar
Gözetleme zamanlayıcısı (watchdog), yazılımın belirlenen süre içinde ilerleme işareti vermemesini algılayarak reset veya güvenli durum geçişi başlatabilir. Ancak watchdog'u periyodik bir timer'dan koşulsuz beslemek, kilitlenmiş sistemin de “sağlıklı” görünmesine yol açar. Besleme kararı kritik görevlerin gerçekten ilerlediğini kanıtlayan bir sağlık koşuluna bağlanmalıdır.
Mikroişlemci ile gömülü sistem arasındaki temel fark burada görünür: mikroişlemci komutu yürütür; gömülü sistem ise komutun fiziksel dünya, enerji, zaman ve hata sınırları içinde doğru sonucu üretmesini sağlamak zorundadır.
Ünite 15: Modern Cortex-M Mikrodenetleyicilerinde Başlatma, Kesme ve Çevrebirim Zamanlaması
Klasik 8085/8086 anlatısı; komut çevrimi, veri yolu, kesme ve çevrebirimlerin temel mantığını öğretir. Modern mikrodenetleyicide aynı kavramlar kaybolmaz; reset vektörü, kesme denetleyicisi, saat ağacı, pin çoklama, zamanlayıcılar, veri dönüştürücüler ve DMA üzerinden daha bütünleşik hale gelir. Bu bölüm belirli bir STM32 modelinin programlama kılavuzu değildir. Amaç, Cortex-M sınıfı mikrodenetleyicilerde veri sayfası ve reference manual okunurken taşınabilir olacak mühendislik modelini kurmaktır.
15.1. Reset, Başlangıç Kodu ve Vektör Tablosu
Bir Cortex-M çekirdeğinin resetten uygulama koduna geçişi, "main çağrılır" biçiminde tek adımlı düşünülmemelidir. Tipik zincir şöyledir:
reset
↓
vektör tablosundan ilk stack pointer değeri
↓
reset handler adresi
↓
clock / memory / runtime başlangıç işleri
↓
.data kopyalama ve .bss temizleme
↓
C/C++ runtime hazırlığı
↓
mainVektör tablosu çekirdek exception'ları ve çevrebirim kesmeleri için handler adreslerini taşır. Bu nedenle linker script, startup dosyası ve interrupt handler adları birbirinden bağımsız ayrıntılar değildir. Yanlış bölüm yerleşimi veya yanlış handler adı, kaynak kodu derlense bile reset döngüsü ya da varsayılan handler'a düşme gibi çalışma zamanı hataları oluşturabilir.
15.2. NVIC, Exception ve Öncelik Modeli
Cortex-M ailesindeki Nested Vectored Interrupt Controller (NVIC), çevrebirim kesmelerinin etkinleştirilmesi, pending/active durumları ve önceliklerinin yönetilmesi için çekirdekle bütünleşik mekanizmadır. Kesme önceliğini yalnız sayısal bir değer olarak görmek yetersizdir. Tasarımda şu sorular birlikte cevaplanmalıdır:
- hangi olay hangi deadline'a sahiptir?
- bir handler başka bir handler tarafından kesilebilir mi?
- kritik bölge ne kadar süre kesmeleri engeller?
- aynı öncelikteki işler nasıl sıralanır?
- handler içinde bloklayan işlem var mı?
- shared state hangi atomiklik veya senkronizasyon kuralıyla korunur?
Yüksek öncelikli handler'ın gereksiz uzun tutulması, düşük öncelikli fakat zaman kritik bir çevrebirimin starvation veya veri kaybı yaşamasına neden olabilir. "Kesme kullanmak" deterministik davranış garantisi değildir; interrupt latency + handler WCET + preemption + blocking birlikte bütçelenmelidir.
15.3. Saat Ağacı ve SysTick
Mikrodenetleyicide tek bir "CPU frekansı" bulunması bütün çevrebirimlerin aynı saatle çalıştığı anlamına gelmez. Kristal/RC kaynakları, PLL, prescaler ve farklı bus domain'leri CPU, timer, UART veya ADC gibi bloklara farklı saatler sağlayabilir.
clock source
↓
PLL / selector
↓
prescaler
├─ core clock
├─ peripheral bus A
└─ peripheral bus BBir baud-rate veya timer hesabı yapılırken register'a yazılan bölme değeri değil, o çevrebirime gerçekten ulaşan saat esas alınmalıdır. Saat ağacındaki değişiklik flash wait-state, güç tüketimi ve çevrebirim zamanlamasını da etkileyebilir.
SysTick, Cortex-M çekirdeğinde periyodik zaman tabanı üretmek için kullanılan sistem zamanlayıcılarından biridir. İşletim sistemi tick'i veya basit zaman ölçümü için kullanılabilir; fakat yüksek hassasiyetli ölçümde timer capture, cycle counter veya ayrı donanım zamanlayıcısı daha uygun olabilir. Tick tabanlı yazılım gecikmesini mutlak zaman doğruluğu gibi yorumlamak doğru değildir.
15.4. GPIO ve alternate-function Yönlendirmesi
Modern MCU pinleri çoğunlukla yalnız dijital giriş/çıkış değildir. Aynı fiziksel pin GPIO, UART, SPI, timer channel veya analog giriş gibi farklı işlevlere bağlanabilir. Bu nedenle bir pinin çalışması tipik olarak dört ayrı karara bağlıdır:
pin mode
+ alternate-function seçimi
+ elektriksel sürüş / pull-up / pull-down
+ ilgili peripheral clock ve peripheral yapılandırmasıPush-pull ile open-drain, internal pull ile harici direnç ve output speed/slew-rate ayarları aynı problem değildir. Özellikle I²C gibi açık-drenç veri yollarında elektriksel topoloji protokol davranışının parçasıdır.
15.5. Timer: Sayaçtan Zaman Sözleşmesine
Genel amaçlı timer'lar yalnız periyodik interrupt üretmez. Prescaler ve auto-reload/counter ilişkisi temel zaman ölçeğini kurarken channel mekanizmaları olayın ölçülmesini veya çıkış üretilmesini sağlar.
Input capture, bir giriş kenarı oluştuğunda sayaç değerini donanımda yakalayarak periyot veya pulse width ölçümünü yazılım polling'inden bağımsızlaştırır. Output compare, sayaç belirli değere ulaştığında çıkış/olay üretir. PWM, periyot ve duty-cycle'ı timer donanımıyla üretir.
counter clock = timer clock / prescaler
period ticks = auto-reload + 1
PWM duty = compare / period ticksBu eşitlikler kavramsal modeldir; belirli MCU'da timer clock doubling, center-aligned mode veya register shadowing gibi ayrıntılar reference manual'dan doğrulanmalıdır.
15.6. ADC, DAC ve Örnekleme Zinciri
ADC çözünürlüğü tek başına ölçüm doğruluğu değildir. Ölçüm zincirinde reference voltage, giriş kaynak empedansı, sample-and-hold süresi, quantization, offset/gain error, gürültü ve PCB yerleşimi birlikte etkili olur.
N bit ideal ADC için kod aralığı yaklaşık olarak 0 ... 2^N - 1 biçimindedir. Fakat gerçek ölçümde nominal LSB değerini doğrudan "kesin hassasiyet" kabul etmek yanlıştır. Çok kısa sample time, yüksek empedanslı sensörün internal sampling capacitor'ı yeterince şarj edememesine yol açabilir.
DAC ise sayısal kodu analog seviyeye dönüştürür; çıkış sürüş kapasitesi, settling time ve harici yük gerçek davranışı belirler. PWM + filtre ile analog benzeri çıkış üretmek ile gerçek DAC aynı yöntem değildir.
15.7. DMA: Aktarım Motoru, Sahiplik Protokolü ve Görünürlük
DMA'nın amacı yalnız CPU yükünü düşürmek değildir. Doğru tasarımda çevrebirim veri akışını daha düşük jitter ile sürdürebilir. Buna karşılık buffer yaşam döngüsü açık bir sahiplik protokolü gerektirir:
CPU doldurur
↓
ownership DMA'ya geçer
↓
DMA aktarır
↓
completion olayı
↓
ownership CPU'ya dönerDouble buffering veya circular DMA sürekli örnekleme için yararlıdır; ancak producer/consumer hızları dengelenmezse overwrite veya underrun oluşabilir. Cache bulunan MCU/SoC'larda DMA ile CPU'nun aynı belleği görmesi cache maintenance ve memory ordering gerektirebilir. volatile bu problemi tek başına çözmez.
15.8. Register, CMSIS ve HAL Katmanlarını Ayırmak
Aynı çevrebirim farklı soyutlama seviyelerinden yönetilebilir:
uygulama
↓
vendor HAL / driver
↓
CMSIS ve device header
↓
register / memory-mapped I/O
↓
donanımRegister-level erişim kontrol ve determinism açısından yararlı olabilir; buna karşılık taşınabilirlik ve bakım maliyeti yüksektir. HAL daha hızlı geliştirme sağlayabilir fakat gizli timeout, polling veya ek durum yönetimi kritik hot path'te ölçülmelidir. Soyutlama katmanı performans varsayımı değil, doğrulanacak bir sözleşmedir.
Güvenilir gömülü yazılım geliştirmede doğru yaklaşım, bir katmanı ideolojik olarak seçmek değil; deadline, güç, bellek, safety, test edilebilirlik ve bakım gereksinimine göre en düşük gerekli soyutlama seviyesini kullanmaktır.
15.9. Enkoder Yakalama Zamanlayıcısında Taşma ve Örnek Kaybı
1 MHz hızında çalışan 16 bit serbest koşan bir zamanlayıcı 65536 µs = 65,536 ms sonunda başa döner. Art arda iki enkoder kenarı arasında 80 ms varsa ham sayaç farkını doğrudan çıkarmak yanlış süre üretebilir; taşma sayısı ayrı tutulmalı veya daha geniş bir zaman tabanı kullanılmalıdır. 20 kHz darbe kenarı akışında ortalama aralık 50 µs olduğundan her kenarda uzun yazılım kesmesi çalıştırmak, diğer görevlerin gecikme bütçesini tüketebilir.
Donanımın yakalama birimi kenar zamanını kesme hizmeti başlamadan kaydedebilir. DMA ile ring tamponuna aktarma, yazılım kesmesi yükünü düşürebilir; ancak halka taşması, üretici–tüketici sahipliği ve önbellek görünürlüğü yeni doğruluk koşullarıdır. Kuadratür dekoderi olan bir çevrebirim yön değişimini A/B fazıyla donanımda çözebilir; sayaç değeri okunurken tutarlı anlık görüntü alınmalıdır. Kabul testinde sayaç sınırında kenar, ters yönde hareket, kısa gürültü darbesi ve tampon doluluğu ayrı senaryolar olarak denenir.
Sabit genişlikli zamanlayıcı sayacıyla iki darbe arasındaki süre hesaplanırken taşma, örnek kaybı ve yön bilgisi ayrı ele alınmalıdır. N bitlik serbest çalışan bir sayaçta iki yakalama arasındaki modüler fark, aralık boyunca en fazla bir sayaç çevrimi geçtiği güvence altındaysa anlamlı süreyi verir. 16 bitlik sayaç 65.530 değerinden 10'a geçtiğinde fark mod 65.536 ile 16 sayımdır; ancak arada tam bir ek tur daha varsa aynı iki uç değer yeterli bilgi sağlamaz. Donanım taşma sayacı, beklenen azami darbe aralığı ve kesme gecikmesi birlikte tasarlanmalıdır.
15.10. Kesme Girişinden Denetlenebilir Yanıt Zamanına
Bir mikrodenetleyicide kesme hizmet yordamının kısa olması, olaydan çıktı tepkisine kadar toplam sürenin kısa olduğunu tek başına göstermez. Kesmenin maskeli kaldığı bölüm, işlemci öncelik seviyesi, mevcut komutun tamamlanması, vektörleme, yazmaç bağlamının korunması, ISR yürütmesi ve çevrebirim veri yolundaki beklemeler toplam gecikmeye katkıda bulunur. DMA kullanımı işlemci üzerinden veri taşıma maliyetini azaltabilir; ancak DMA tamamlanma kesmesi ve bellek veri tutarlılığı yükümlülüklerini ortadan kaldırmaz.
Bir zamanlama bütçesi \(L_{total}=L_{mask}+L_{dispatch}+L_{isr}+L_{bus}+L_{actuation}\) gibi ölçülebilir aşamalara ayrılabilir. Bu parçalar üst üste biniyor veya donanım tarafından farklı sırada yürütülüyorsa basit toplam üst sınır sayılmaz; sınırın hangi koşullarda geçerli olduğu belirtilmelidir. Kritik örnekte GPIO pininin kesme girişinde ve çıktı değişiminde gözlemlenmesi, yalnız yazılım sayacına bakmaktan daha bütüncül gecikme ölçümü sağlayabilir.
ISR içerisinde sınırsız bekleme, dinamik bellek ayırma ve başka bir görevin bırakması gereken kilidi bekleme, gerçek zamanlılık açısından incelenmelidir. Uzun işler uygun öncelikte ertelenmiş işleme devredilebilir; bunun da kuyruk taşması ve birikme davranışı ayrıca tanımlanmalıdır. 8085'in kesme ve makine çevrimi kavramları bu modern değerlendirmeye temel oluşturur; ancak klasik cihazın zamanlama sayıları güncel Cortex-M uygulamasına aynen taşınamaz.
15.11. Gerçek Zamanlı Görevlerin Yanıt Süresi Üst Sınırı
Mikrodenetleyicide periyodik bir görevin yürütme süresi, son teslim tarihine uyacağı anlamına gelmez. Öncelikli zamanlayıcıda daha yüksek öncelikli işler görevi kesebilir; kritik bölgelerde bloke olma ve kesme hizmet süreleri gecikmeyi artırır. Tek işlemcili, sabit öncelikli ve önalmalı bir modelde \(i\) görevinin en kötü yanıt süresi aşağıdaki yinelemeyle araştırılabilir:
\[ R_i^{(k+1)}=C_i+B_i+\sum_{j\in hp(i)}\left\lceil\frac{R_i^{(k)}}{T_j}\right\rceil C_j. \]
Burada \(C_i\) görev yürütme üst sınırı, \(B_i\) bloke olma üst sınırı, \(T_j\) yüksek öncelikli görevin periyodu ve \(hp(i)\) daha yüksek öncelikli görevler kümesidir. Yineleme yakınsayıp \(R_i\leq D_i\) olursa söz konusu model varsayımları altında deadline koşulu sağlanır. Kendiliğinden bütün kesmeleri, DMA etkilerini, önbellek davranışını veya veri yolu çekişmesini kapsamaz; bunların ölçülmüş veya kanıtlanmış katkıları uygun \(C\) ve \(B\) terimlerine yansıtılmalıdır.
Örneğin yalnız ortalama yürütme süresinin 1 ms olması, 2 ms son teslim süresi için yeterli kanıt değildir. Kaynakların en kötü gecikmelerini ayrı ölçmek, öncelik terslenmesini incelemek ve kötü durum yükü altında görevi sınamak gerekir. Kesme işleyicisinin süresi sınırlandırılmıyor veya iş yükünün varış modeli bilinmiyorsa matematiksel yanıt süresi iddiası kurulamaz.
Kaynakça
- Bosch. CAN Specification Version 2.0. 1991.
- Brendan Gregg. Systems Performance: Enterprise and the Cloud. Pearson Education, 2014.
- Brey, B. B. The Intel Microprocessors. 8. baskı, Pearson, 2008.
- Chris Fregly. AI Systems Performance Engineering. O’Reilly Media, 2025.
- Gaonkar, R. S. Microprocessor Architecture, Programming, and Applications with the 8085. 5. baskı, Prentice Hall, 2002.
- Hall, D. V. Microprocessors and Interfacing: Programming and Hardware. 2. baskı, McGraw-Hill, 2005.
- Hennessy, J. L.; Patterson, D. A. Computer Architecture: A Quantitative Approach. 6. baskı, Morgan Kaufmann, 2019.
- Intel Corporation. 8253/8254 Programmable Interval Timer teknik dokümantasyonu.
- Intel Corporation. 8255A Programmable Peripheral Interface teknik dokümantasyonu.
- Intel Corporation. iAPX 86/88 User's Manual. 1979.
- Intel Corporation. MCS-85 User's Manual. 1979.
- Jacob, B. ve diğerleri. “Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference.” CVPR, 2018.
- Patterson, D. A.; Hennessy, J. L. Computer Organization and Design RISC-V Edition: The Hardware/Software Interface. 2. baskı, Morgan Kaufmann, 2020.
- RISC-V International. RISC-V Ratified Specifications Library. https://docs.riscv.org/reference/home/index.html
- Warden, P.; Situnayake, D. TinyML. O’Reilly Media, 2019.
- Yiu, J. The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors. 3. baskı, Newnes, 2013.
- Arm. CMSIS-Core (Cortex-M): Interrupts and Exceptions (NVIC). https://arm-software.github.io/CMSIS_6/main/Core/group__NVIC__gr.html
- Arm. CMSIS-Core Documentation. https://arm-software.github.io/CMSIS_6/latest/Core/index.html
- Billingsley, J. Mechatronics Experiments with Machine Vision. Springer Nature Switzerland, 2026. DOI: https://doi.org/10.1007/978-3-032-11218-7.