gomulu programlama

gomulu programlama

  • main fonku icinde yapilan her sey background process.

  • diyelim ki 2 gorevimiz var. 1.‘si DAC cikisina bir sinyal verilmesi, 2.‘si I2C ile haberlesme. bu 2 gorevin interrupt priority’lerini ayarlama ile ilgili 2 durum olabilir. ya 1.‘si ya da 2.‘si oncelikli olmali.

    • DAC cikisindan belli bir analog deger cikisi yapmamiz gerekiyor ve I2C haberlesmesi bu du-rumu yarida kesebilecek ise yani DAC’tan cikan sinyali bozma ihtimali varsa oncelikli interrupt DAC cikisi veren interrupt olmalidir.
    • DAC cikisindan I2C’den gelen bilgiye gore degisen bir analog deger cikilacak ise I2C haberlesmesine bakan interrupt oncelikli olmali.
  • butun interrupt process’leri kisa tutulmali.

  • sik calisacak olan interrupt’lar oncelikli olmali. cunku diyelim ki seyrek calisan interrupt’larin onceligi sik calisanlardan daha onde. ve diyelim ki seyrek calisan interrupt’lardan biri calisirken sik calisan interrupt da calisti. bu durumda islemci sik calisan interrupt’i yapamaz. once seyrek calisani yapar. fakat bu sirasinda sik calisandan bir kac tane arkasi arkasina gelirse sik calisan interrupt’larin sonradan gelen 2. 3. 4. gelenleri 1.‘den once yapar. bu da sorun olusturabilir.

1

  • yukaridaki case 1 yanlis olan teknik, case 2 ise dogru olan teknik.

    • soyle ki: diyelim ki case 1’de while icine girerken command degeri 2 olsun. fakat tam “else if (command == 2)” satirindaki kontrolu yaparken interrupt ile command degiskeni 1’e degistirilirse if bloklari ne 1 kontrolune ne de 2 kontrolune girecektir, gidip else kontrolune girecektir. cunku en basta 1 mi diye kontrol eder, 2 oldugundan ilk if’e girmez. 2’mi diye kontrol ettigi sirada command 1’e cevrildiginden 2’ye de girmez. her ikisine de girmediginden else’e girer. halbuki 2’ye girmesi gerekirdi.
    • simdi de case 2’dekine bakalim. case 1’deki senaryo aynen gecerli. localcmd while baslangicin-da 2 olsun. yani if bloklarindan 2’ye girmesi lazim. 1 mi diye kontrol etti fakat 2 oldugundan 1’e girmedi. tam “else if (Localcmd == 2)” satirindaki kontrolu yaparken interrupt ile command degiskeni 1’e degistirilse de if blogundaki kontrol hic etkilenmez cunku interrupt ile degisen Command degiskeni iken kontrol edilen degisken Localcmd degiskenidir.
  • yani kisacasi if kontrol lerini offline data uzerinden yapmak lazim. online yani her an degisen datalar uzerinden degil.


  • 8 bitlik mcu’larda 32 bitlik datalarin aktarim isleri byte byte yapilacagi icin aktarim isleri sirasinda interrupt’larin kapatilmasi lazim.

2

  • I2C hizinin (100 khz) MCU hizina (100 mhz) gore cok dusuk oldugu durumda yukaridaki anlati-lan data bozulmasi olmaz. sebebi anlasilmadi ???

  • yukaridaki gibi kritik durumlarda interrupt’larin kapatilip acilmasi durumu kurtarmaya yetmeyebilir. sistemde birden fazla interrupt oldugunu dusunelim.

kaynak_0

kaynak_1