Görevci by Kozmotronik v2.1.1
Küçük gömülü sistemler için çoklu görev (multi-tasking) yönetimi uygulaması
Yüklüyor...
Arıyor...
Eşleşme Yok
Unsigned Char Kuyruk Yönetimi

Dosyalar

dosya  uckuyruk.c
 

Makrolar

#define NULL
 

Typedef'ler

typedef struct uckuyruk uckuyruk_t
 Kolaylık sağlaması için uckuyruk tür tanımı.
 
typedef uckuyruk_tpuck_t
 uckuyruk_t yapısı için başvuru türü (okunaklılığı iyileştirmek için)
 

Fonksiyonlar

void uckuyrukIlkle (const unsigned char kapasite, puck_t kuyruk, unsigned char *tampon)
 
char uckuyrukKuyrukla (puck_t kuyruk, const unsigned char deger)
 
unsigned char uckuyrukCokluKuyrukla (puck_t kuyruk, const unsigned char *kaynak, const unsigned char nicelik)
 
unsigned char uckuyrukBastakiOge (puck_t kuyruk)
 
unsigned char uckuyrukKuyruktanAl (puck_t kuyruk)
 
unsigned char uckuyrukCokluAl (puck_t kuyruk, unsigned char *hedef, const unsigned char nicelik)
 
char uckuyrukKuyrugaAktar (puck_t kaynak, puck_t hedef)
 
unsigned char uckuyrukKuyrugaCokluAktar (puck_t kaynak, puck_t hedef, const unsigned char nicelik)
 
char uckuyrukKuyrugaKopyala (puck_t kaynak, puck_t hedef)
 
unsigned char uckuyrukKuyrugaCokluKopyala (puck_t kaynak, puck_t hedef, const unsigned char nicelik)
 
void uckuyrukBosalt (puck_t kuyruk)
 
void uckuyrukNBosalt (puck_t kuyruk, unsigned char n)
 
unsigned char uckuyrukDoldur (puck_t kuyruk, const unsigned char deger, const unsigned char nicelik)
 
unsigned char uckuyrukOgeSayimi (puck_t kuyruk)
 
char uckuyrukDolu (puck_t kuyruk)
 
unsigned char uckuyrukKalanKapasite (puck_t kuyruk)
 
char uckuyrukBos (puck_t kuyruk)
 
unsigned char uckuyrukKapasite (puck_t kuyruk)
 

Ayrıntılı tanımlama

Görevci için ardışıl (serial) FIFO modelinde bir kuyruk kütüphanesi.

uckuyruk unsigned char kuyruk kısaltması olarak kullanılmıştır. Bu modülün amacı statik olarak tanımlanacak unsigned char türünde bir dizinin referansını tutup o dizi üzerinde FIFO (İlk giren ilk çıkar) türünde bir kuyruk yönetimi yapmaktır. Modül, uckuyruk_t türünde bir yapıya sınırlı kapasiteye (en fazla 255) sahip statik bir unsigned char dizisi bağlamak koşuluyla, tek bir uygulama içerisinde birden çok FIFO kuyruğu yönetimi yapabilecek şekilde yazılmıştır. Özellikle seri portlar veya LCD ekranlar gibi görece yavaş çalışan donanımlara birden çok ardı ardına veri yazılması gereken durumlarda bu kuyruğu kullanmak çok avantajlıdır. Bu FIFO kuyruğu kullanıldığı takdirde, bu tür yavaş aygıtların veriyi byte-byte göndermesini beklemek yerine kuyruğa yazıp sonra ilgili donanım göndermeye her müsait olduğunda, kuyruktan alınıp ilgili donanıma verilebilir. Böylece CPU zamanı yavaş donanımların işini bitirmesini beklemek için boşuna harcanmaz.

Kullanımı oldukça basittir:

// Önce statik bir dizi tanımlanır:
#define DIZI_KAPASITE 48
unsigned char dizi[DIZI_KAPASITE];
// Dizi tanımlandıktan sonra bir uckuyruk_t tanımlanır:
uckuyruk_t kuyruk;
// Tanımlanan kuyruk ilgili parametrelerle ilklenir:
uckuyrukIlkle(DIZI_KAPASITE, &kuyruk, dizi);
// Kuyruk bir kez ilklendi mi artık kullanıma hazırdır:
// Kuyruklamak için:
if(uckuyrukKuyrukla(&kuyruk, 25) == 0) {
// Kuyruklama başarısız; kuyruk dolu.
// Burada farklı yeniden deneme stratejileri uygulanabilir.
}
else {
// Kuyruklama başarılı.
}
// Kuyruktan almak için:
if(uckuyrukBos(&kuyruk)) {
// Kuyruk boş, alınacak bir şey yok.
// Burada farklı bekleme stratejileri uygulanabilir.
}
else {
// Kuyruktan veri var, alınabilir.
unsigned char veri = uckuyrukKuyruktanAl(&kuyruk);
}
char uckuyrukKuyrukla(puck_t kuyruk, const unsigned char deger)
Definition uckuyruk.c:59
void uckuyrukIlkle(const unsigned char kapasite, puck_t kuyruk, unsigned char *tampon)
Definition uckuyruk.c:50
unsigned char uckuyrukKuyruktanAl(puck_t kuyruk)
Definition uckuyruk.c:98
char uckuyrukBos(puck_t kuyruk)
Definition uckuyruk.c:289
Definition uckuyruk.c:37

Eğer kuyrukta char türünde veriler saklanmak istenirse tek yapılması gereken; veriyi kuyruktan alırken char türüne dönüştürmektir (type casting). Önceki örneği char türü için güncellemek istersek yalnızca kuyruktan alma işleminde değişiklik yapmamız gerekir:

// Kuyruklamak için:
if(uckuyrukKuyrukla(&kuyruk, 'A') == 0) {
// Kuyruklama başarısız; kuyruk dolu.
// Burada farklı yeniden deneme stratejileri uygulanabilir.
}
else {
// Kuyruklama başarılı.
}
// Kuyruktan almak için:
if(uckuyrukBos(&kuyruk)) {
// Kuyruk boş, alınacak bir şey yok.
// Burada farklı bekleme stratejileri uygulanabilir.
}
else {
// Char türünde veriyi almak için tek yapılması gereken casting
// işlemidir.
char veri = (char) uckuyrukKuyruktanAl(&kuyruk);
}

Basit tekli kuyruklama ve kuyruktan almaya ek olarak çoklu kuyruklama ve çoklu kuyruktan alma API'leri de vardır. Bunlar:

Bu kadarla da sınırlı değil! Çeşitli ardışıllaştırma (serializing) teknikleri kullanarak byte ırmağına dönüştürülmüş daha büyük türde ve yapıda veriler de kuyruklanabilir. Aynı kuyruktan veri eski haline döndürmek için; kuyruklamadan önce uygulanan ardışıllaştırma tekniğinin tersi bir teknik ile istenen tür ve yapıdaki veri byte ırmağı halinde kuyruktan alınıp özgün yapısına dönüştürülebilir.

Makro Dokümantasyonu

◆ NULL

#define NULL

include sorunlarına önlem olarak NULL tanımlaması.

Fonksiyon Dokümantasyonu

◆ uckuyrukBastakiOge()

unsigned char uckuyrukBastakiOge ( puck_t kuyruk)

Bir kuyruğun en başındaki veriyi gösterir (peek).

Gösterilen veri kuyruktan çıkarılmaz, veriyi kuyruktan çıkarıp almak için uckuyrukKuyruktanAl() işlevini kullanınız. kuyruk parametresi NULL verilirse bu işlev hep 0 değerini döndürecektir. 0 Değeri de unsigned char türünden kuyruklanabilir bir değerdir. Dönen değerin doğrulanması veya ayrımının yapılması programcının sorumluluğudur. Bunu yapmanın en kolay yolu bu işlevi kullanmadan önce kuyruğu; uckuyrukBos() işlevini kullanarak yoklamaktır.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
Döndürdüğü değer
kuyruk NULL ise hep 0, yoksa kuyruğun başındaki veri.
Ayrıca Bakınız
uckuyrukKuyruktanAl()

◆ uckuyrukBos()

char uckuyrukBos ( puck_t kuyruk)

Bir kuyruğun boş olup olmadığını yoklar.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
Döndürdüğü değer
Kuyruk NULL veya boşsa 1 (true), değilse 0 (false) döndürür.

◆ uckuyrukBosalt()

void uckuyrukBosalt ( puck_t kuyruk)

Bir kuyruğu tamamen boşaltır (flush).

Bu işlem önce tamponu 0 değeri ile doldurur ve ardından kuyruk yönetim değişkenlerini sıfırlar.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
Ayrıca Bakınız
uckuyrukNBosalt().

◆ uckuyrukCokluAl()

unsigned char uckuyrukCokluAl ( puck_t kuyruk,
unsigned char * hedef,
const unsigned char nicelik )

Bir kuyruktan istenen nicelikte veri alır.

Kuyruğun başındaki verileri kuyruktaki sırasıyla, hedef belleğe belirtilen, nicelikte alır. Kuyruktan alınan veriler kuyruktan çıkarılır. Kuyruktan alınacak veriyi saklayacak kadar yere sahip bir hedef sağlamak programcının sorumluluğudur. Aksi takdirde veriler kaybolabilir veya gereken kapasiteye sahip bir yer sağlanmamışsa verilerin hedefe sığan bölümü alınırken kalanı kaybolabilir. Hedefe aktarma işlemi başarılıysa aktarılan veri niceliği döndürülür. Diğer yandan; kuyruk veya hedef parametrelerinin biri NULL ise veya nicelik 1'den küçükse veya kuyrukta istenen nicelikte veri yoksa 0 değeri döndürülür.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
[out]hedefKuyruktan alınan verilerin saklanmak istediği konuma referans.
[in]nicelikBaşlangıcı verilen veriden kaç tanesinin kuyruğa alınacağı.
Döndürdüğü değer
Kuyrukta istenen nicelikte veri yoksa 0, hedefe aktarım başarılıysa aktarılan verilerin niceliği.

◆ uckuyrukCokluKuyrukla()

unsigned char uckuyrukCokluKuyrukla ( puck_t kuyruk,
const unsigned char * kaynak,
const unsigned char nicelik )

Bir kuyruğa belirtilen nicelikte veri ekler.

Veriler kuyruğun en sonuna eklenir ve kuyruklanan verinin niceliği döndürülür. kuyruk veya kaynak parametreleri NULL verilirse veya nicelik 1'den küçükse veya kuyrukta; kuyruklanmak istenen verileri alacak kadar yer yoksa işlem sürdürülmez ve kuyruklamanın başarısız olduğunu ifade eden bir 0 değeri döndürülür.

Parametreler
[in,out]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
[in]kaynakVeriyi içeren dizideki verinin başlangıç adresine referans.
[in]nicelikBaşlangıcı verilen veriden kaç tanesinin kuyruğa alınacağı.
Döndürdüğü değer
kuyruk veya kaynak NULL ise veya kuyrukta yeteri kadar boş yer yoksa 0, kuyruklama başarılıysa nicelik.

◆ uckuyrukDoldur()

unsigned char uckuyrukDoldur ( puck_t kuyruk,
const unsigned char deger,
const unsigned char nicelik )

Bir kuyruğu belirtilen sayıda aynı veri ile doldurur.

İşlem başarılıysa kuyruğa doldurulan nicelik döndürülür. kuyruk NULL ise veya kuyrukta doldurulacak nicelikte yer yoksa veya nicelik 1'den küçükse hep 0 değeri döndürülür.

Parametreler
[in,out]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
[in]degerKuyruğa doldurulacak unsigned char türünde veri.
[in]nicelikVerilen verinin kuyruğa çoğaltılma sayısı.
Döndürdüğü değer
Kuyruk doluysa veya belirtilen nicelikteki verileri alacak kadar boş yer yoksa verileri kuyruğa almaz ve 0, işlem başarılı olursa kuyruklanan verilerin niceliğini döndürür.

◆ uckuyrukDolu()

char uckuyrukDolu ( puck_t kuyruk)

Bir kuyruğun dolu olup olmadığını yoklar.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
Döndürdüğü değer
Kuyruk NULL veya doluysa 1 (true), değilse 0 (false) döndürür.

◆ uckuyrukIlkle()

void uckuyrukIlkle ( const unsigned char kapasite,
puck_t kuyruk,
unsigned char * tampon )

Bir kuyruğu ilk kullanıma hazırlar.

Kuyruk veya tampon parametrelerinin biri NULL ise işlem sürdürülmez.

Parametreler
[in]kapasiteKuyruğun 1 - 255 aralığında kapasitesi, sizeof ile unsigned char türüne cast edilerek verilebilir.
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
[in]tamponUygulamada tanımlanan bir unsigned char türünde dizi.

◆ uckuyrukKalanKapasite()

unsigned char uckuyrukKalanKapasite ( puck_t kuyruk)

Bir kuyruğun kalan kapasitesini verir.

Kuyruğun kapasite niceliğini yani kuyruğun daha kaç öğe alabileceğinin sayısının bilgisini verir.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
Döndürdüğü değer
Kuyruğun kalan kapasitesi, kuyruk NULL ise hep 0.

◆ uckuyrukKuyrugaAktar()

char uckuyrukKuyrugaAktar ( puck_t kaynak,
puck_t hedef )

Kaynak kuyruğun başındaki ögeyi hedef kuyruğa kuyruklar.

Kuyruktan kuyruğa bir öge aktarımı başarılı olursa 1 değeri döndürülür. Kaynak veya hedef kuyrukların referanslarının herhangi birinin NULL olması durumunda işlem sürdürülmez ve 0 değeri döndürülür. Kaynak kuyrukta hiçbir öge yoksa işlem sürdürülmez ve 0 değeri döndürülür. Hedef kuyrukta 1 öge alacak kadar yer yoksa işlem sürdürülmez ve 0 değeri döndürülür.

Parametreler
[in]kaynakKaynak kuyruğa referans.
[in,out]hedefHedef kuyruğa referans.
Döndürdüğü değer
Aktarma başarılıysa 1, değilse 0.
Ayrıca Bakınız
uckuyrukKuyrugaCokluAktar(), uckuyrukKuyrugaKopyala().

◆ uckuyrukKuyrugaCokluAktar()

unsigned char uckuyrukKuyrugaCokluAktar ( puck_t kaynak,
puck_t hedef,
const unsigned char nicelik )

Kaynak kuyruktan hedef kuyruğa birden çok öge aktarır.

Kuyruktan kuyruğa aktarım başarılı olursa aktarılan ögelerin sayımı döndürülür. Kaynak veya hedef kuyrukların referanslarının herhangi birinin NULL olması durumunda işlem sürdürülmez ve 0 değeri döndürülür. Kaynak kuyrukta aktarılmak istenen nicelik kadar öge yoksa işlem sürdürülmez ve 0 değeri döndürülür. Hedef kuyrukta aktarılmak istenen nicelik kadar öge yoksa işlem sürdürülmez ve 0 değeri döndürülür. Aktarılmak istenen nicelik değeri 0 verilirse işlem sürdürülmez ve 0 değeri döndürülür.

Parametreler
[in]kaynakKaynak kuyruğa referans.
[in,out]hedefHedef kuyruğa referans.
[in]nicelikAktarılmak istenen öge sayısı.
Döndürdüğü değer
Aktarma başarılıysa aktarılan öge sayımı, değilse 0.
Ayrıca Bakınız
uckuyrukKuyrugaAktar(), uckuyrukKuyrugaCokluKopyala().

◆ uckuyrukKuyrugaCokluKopyala()

unsigned char uckuyrukKuyrugaCokluKopyala ( puck_t kaynak,
puck_t hedef,
const unsigned char nicelik )

Kaynak kuyruğun başından itibaren nicelik kadar ögeyi hedefe kopyalar.

uckuyrukKuyrugaCokluAktar() İşlevinden farkı kaynak kuyruktan hedef kuyruğa kopyalanan ögelerin kaynak kuyruktan silinmemesidir. Böylece aynı ögeler hem kaynak kuyrukta hem de hedef kuyrukta bulunur. Kopyalama işlemi başarılı olursa hedef kuyruğun sayımı nicelik kadar (kopyalanan ögeler kadar) artarken, ögeler kaynak kuyruktan çıkarılmadığı için kaynak kuyruğun sayımı olduğu gibi kalır ve baştaki öge değişmez. Kuyruktan kuyruğa aktarım başarılı olursa aktarılan ögelerin sayımı döndürülür. Kaynak veya hedef kuyrukların referanslarının herhangi birinin NULL olması durumunda işlem sürdürülmez ve 0 değeri döndürülür. Kaynak kuyrukta aktarılmak istenen nicelik kadar öge yoksa işlem sürdürülmez ve 0 değeri döndürülür. Hedef kuyrukta aktarılmak istenen nicelik kadar öge yoksa işlem sürdürülmez ve 0 değeri döndürülür. Aktarılmak istenen nicelik değeri 0 verilirse işlem sürdürülmez ve 0 değeri döndürülür.

Parametreler
[in]kaynakKaynak kuyruğa referans.
[in,out]hedefHedef kuyruğa referans.
[in]nicelikAktarılmak istenen öge sayısı.
Döndürdüğü değer
Aktarma başarılıysa aktarılan öge sayımı, değilse 0.
Ayrıca Bakınız
uckuyrukKuyrugaKopyala(), uckuyrukKuyrugaCokluAktar().

◆ uckuyrukKuyrugaKopyala()

char uckuyrukKuyrugaKopyala ( puck_t kaynak,
puck_t hedef )

Kaynak kuyruğun başındaki ögeyi hedef kuyruğa kopyalar.

uckuyrukKuyrugaAktar() İşlevinden farkı kaynak kuyruktan hedef kuyruğa kopyalanan ögenin kaynak kuyruktan silinmemesidir. Böylece aynı öge hem kaynak kuyrukta hem de hedef kuyrukta bulunur. Kopyalama işlemi başarılı olursa hedef kuyruğun sayımı bir artarken, öge kaynak kuyruktan çıkarılmadığı için kaynak kuyruğun sayımı olduğu gibi kalır ve baştaki öge değişmez. Kuyruktan kuyruğa bir öge kopyalama başarılı olursa 1 değeri döndürülür. Kaynak veya hedef kuyrukların referanslarının herhangi birinin NULL olması durumunda işlem sürdürülmez ve 0 değeri döndürülür. Kaynak kuyrukta hiçbir öge yoksa işlem sürdürülmez ve 0 değeri döndürülür. Hedef kuyrukta 1 öge alacak kadar yer yoksa işlem sürdürülmez ve 0 değeri döndürülür.

Parametreler
[in]kaynakKaynak kuyruğa referans.
[in,out]hedefHedef kuyruğa referans.
Döndürdüğü değer
Aktarma başarılıysa 1, değilse 0.
Ayrıca Bakınız
uckuyrukKuyrugaCokluKopyala(), uckuyrukKuyrugaAktar().

◆ uckuyrukKuyrukla()

char uckuyrukKuyrukla ( puck_t kuyruk,
const unsigned char deger )

Bir kuyruğa veri ekler.

Veri kuyruğun en sonuna eklenir ve kuyruklamanın başarılı olduğunu belirten 1 degeri döndürülür. kuyruk parametresi NULL verilirse veya kuyruk doluysa işlem sürdürülmez ve kuyruklamanın başarısız olduğunu ifade eden bir 0 değeri döndürülür.

Parametreler
[in,out]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
[in]degerKuyruğa alınacak unsigned char türünde veri.
Döndürdüğü değer
Kuyruk NULL veya doluysa 0, kuyruklama başarılıysa 1.

◆ uckuyrukKuyruktanAl()

unsigned char uckuyrukKuyruktanAl ( puck_t kuyruk)

Bir kuyruğun en başındaki veriyi alır.

Kuyruktan alınan veri kuyruktan çıkarılır. Kuyruğun en başındaki değere onu kuyruktan çıkarmadan bakmak için uckuyrukBastakiOge() kullanılır. kuyruk parametresi NULL verilirse bu işlev hep 0 değerini döndürecektir. 0 Değeri de unsigned char türünden kuyruklanabilir bir değerdir. Dönen değerin doğrulanması veya ayrımının yapılması programcının sorumluluğudur. Bunu yapmanın en kolay yolu bu işlevi kullanmadan önce kuyruğu; uckuyrukBos() işlevini kullanarak yoklamaktır.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
Döndürdüğü değer
kuyruk NULL ise hep 0, yoksa kuyruğun başındaki veri.
Ayrıca Bakınız
uckuyrukBastakiOge(), uckuyrukBos().

◆ uckuyrukNBosalt()

void uckuyrukNBosalt ( puck_t kuyruk,
unsigned char n )

Bir kuyruktan n kadar veriyi boşaltır.

Boialtılmak istenen miktar n parametresi ile verilir. Boşaltma işlemi başarılı olursa; en baştaki ögeden itibaren n kadar öge kuyruktan silinir, silinen ögelerin konumları 0 değeri ile doldurulur. Kuyruk parametresi NULL ise veya kuyrukta silinmek istenenden daha az öge varsa veya n değeri 0 verilirse işlem sürdürülmez.

Parametreler
[in,out]kuyrukİşlem yapılacak kuyruğa referans.
[in]nBoşaltma miktarı.
Ayrıca Bakınız
uckuyrukBosalt().

◆ uckuyrukOgeSayimi()

unsigned char uckuyrukOgeSayimi ( puck_t kuyruk)

Bir kuyrukta bekleyen öğe niceliğini döndürür.

Parametreler
[in]kuyrukUygulamada tanımlanan bir uckuyruk_t yapısına referans.
Döndürdüğü değer
Kuyrukta bekleyen öğe niceliği, kuyruk NULL ise her zaman 0.