Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
Share Thread:
Çoklu görev ve C dili
#1
öncelikle merabalar arduino dünyasından buraya geldim. bildiğiniz gibi arduinoda loop içerisini sürekli tekrar eden bir yapı var. yani multitasking yok. kafamda bazı sorular var yardımcı olursanız sevinirim. 

1. raspberry pi 3 aldım. ve c dilini biliyorum. Araştırmalarımda wiringpi kütüphanesini buldum. bu yeterlimidir alternatifleri var mıdır kaynak olarak be tavsiye edersiniz. 

2. projemde her kod bloğu kendi işini yapsın yani çoklu görev istiyorum. Sallıyorum bir tarafta herhangi bir pibden led belli delay aralıklarıyla yanıp sönecek obur tarafta başja sensör diğer kodlar beklemeden ayrı çalışacak ve bunlar kendi aralarında değişken kullanabilecekler. wiring pi de bu nasıl olur acaba

mesela aşağıdaki kodda basit led yakma olayı var. ben bu kodlardan bağımsız çalışan başka bir iş daha yapmak istiyorum. ve dolayısıyla bu kodlardaki for döngüsü ve delay bekleme komutlarına takılmadan işimi yapmak istiyorum. Bu aradada program içerisinde değişkenleri ortak kullanmak istiyorum. Biraz uzun oldu ama derdimi anlatabilmişimdir umarım.

Kod:
#include <wiringPi.h>
int main() {
   wiringPiSetup ();
   pinMode(7, OUTPUT);     // 7 numaralı pini çıkıs olarak ayarladık
   for (short i = 1; i <= 5; i++) { // Bu kod blogunun 5 kere tekrarlanmasını saglıyoruz
       digitalWrite(7, HIGH);  // 7 numaralı pine baglı LED'i açıyoruz
       delay(1000);        // 1 saniye (1000 milisaniye) bekliyoruz
       digitalWrite(7, LOW);   // 7 numaralı pine baglı LED'i kapatıyoruz
       delay(1000);        // 1 saniye (1000 milisaniye) bekliyoruz
   }
   return 0;
}
Ara
Cevapla
#2
Merhabalar,

Bahsettiğin işlem multi-threading. Bununla ilgili aşağıdaki linkten inceleyebilirsin.
http://wiringpi.com/reference/priority-i...d-threads/

Kısaca bir örnekte açıklayacak olursak. 2 tane thread açtım ve bunların içerisine istediğin kodları yazabilirsin. Ana döngüde while a girmeden önce thread init yaparak tanımlama yapmalısın. sitesinden incelersen her thread in öncelik değerlerini de atayabilirsin.

Kod:
#include <stdio.h>
#include <wiringPi.h>



int main(int argc,char **argv)
{

    //Wiringpi init
    wiringPiSetup ();
    //multi-threading init
    piThreadCreate (thread_1);
    piThreadCreate (thread_2);
    //....

    while(1)
    {
        //ana döngü
    }
    return 0;
}

PI_THREAD (thread_1)
{
    while(1)
    {
        //islemler
    }
}

PI_THREAD (thread_2)
{
    while(1)
    {
        //islemler
    }
}
Ara
Cevapla
#3
(04-07-2017, 04:17 PM)umutk Nickli Kullanıcıdan Alıntı: Merhabalar,

Bahsettiğin işlem multi-threading. Bununla ilgili aşağıdaki linkten inceleyebilirsin.
http://wiringpi.com/reference/priority-i...d-threads/

Kısaca bir örnekte açıklayacak olursak. 2 tane thread açtım ve bunların içerisine istediğin kodları yazabilirsin. Ana döngüde while a girmeden önce thread init yaparak tanımlama yapmalısın. sitesinden incelersen her thread in öncelik değerlerini de atayabilirsin.

Kod:
#include <stdio.h>
#include <wiringPi.h>



int main(int argc,char **argv)
{

    //Wiringpi init
    wiringPiSetup ();
    //multi-threading init
    piThreadCreate (thread_1);
    piThreadCreate (thread_2);
    //....

    while(1)
    {
        //ana döngü
    }
    return 0;
}

PI_THREAD (thread_1)
{
    while(1)
    {
        //islemler
    }
}

PI_THREAD (thread_2)
{
    while(1)
    {
        //islemler
    }
}


Hocam çok teşekkürler. Peki bu iş parçacıklarını teoride en fazla kaça kadar kullanabilirim. Bunun bir sınırı var mı acaba?
Ara
Cevapla
#4
Teorik olarak sınır yok
Pratikte ise donanımımız sınırlı


Tapatalk kullanarak iPhone aracılığıyla gönderildi
Ara
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Raspberry pi de C dili için önerileriniz. raspikci 1 1,714 03-31-2017, 01:05 PM
Son Yorum: efecan

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi