![]() |
Görevci by Kozmotronik v2.1.1
Küçük gömülü sistemler için çoklu görev (multi-tasking) yönetimi uygulaması
|
Görevciyi edinmenin en kolay yolu, Görevciyi Githubdan clon etmek, sonra (varsa) uygulamak istediğiniz portun örnek projesini açıp gerekli değişiklikleri yaparak kullanmaktır. Alternatif olarak kaynak kodunu doğrudan indirip elle projenize dahil edebilirsiniz.
Görevci iki farklı kipte kullanılabilir:
Kip, projeye eklenecek gorevciypl.h adında bir başlık dosyası içerisinde grvCALISMA_KIPI
tanımlanarak seçilir. grvCALISMA_KIPI
0 olarak tanımlanırsa Görevci Hafif kip, 1 olarak tanımlanırsa Normal kip için yapılandırılacaktır. Kip olarak Hafif kip kullanıldığı durumda programcı, main
işlevi içinde görev yönetimini kendisi yapar. Her iki kipin kullanımı port demolarında örneklendirilecektir.
Bir görevin normal bir C işlevinden pek bir farkı yoktur, yalnızca biraz daha yapılandırılmıştır ve sürekli çalışması gereken görevler içlerinde bir sonsuz döngü içerir. Bir görevin temel yapısı şu şekilde olmalıdır:
Bir görevin bir olay beklemesi ya da gecikmesi gerekiyorsa CPU' yu boşuna meşgul etmemek, gerektiğinde beklemesi gereken görevi bloklayıp çalışmaya hazır başka bir görevin çalışmasını sağlamak Görevcinin temel amaçlarındandır. Ancak bu mekanizmanın düzgün bir şekilde işlemesi için görev bloğu içerisinde, klasik super-loop veya state-machine programlama mantığında kullanılan return
ve break
gibi dönüş ve döngü kırma komutları kesinlikle kullanılmamalıdır. Böyle yapmak görevin düzgün ve beklendiği gibi çalışmamasına neden olur. Bunun yerine aşağıdaki örnek durumlara uygun düşen API' ler kullanılmalıdır.
grvGECIK_MS()
- işletim sistemlerinde sleep()
işlevlerine benzergrvKOSULLU_GECIK_MS()
- işletim sistemlerinde sleep()
işlevlerine benzergrvBAYRAK_BEKLE()
- işletim sistemlerindeki wait()
işlevlerine benzergrvBAYRAK_IMLE()
- işletim sistemlerindeki signal()
işlevlerine benzerBazen bir görev kendi isteğiyle kontrolü çalışmak için bekleyen başka bir göreve vermek isteyebilir. Böyle bir durumda:
grvVAZGEC()
- işletim sistemlerindeki yield()
işlevlerine benzergrvKOSULA_DEK_VAZGEC()