R T O S _ H a k k ı n d a

Başlatan Erol YILMAZ, 13 Temmuz 2009, 01:07:50

Erol YILMAZ

İşletim Sistemi:

Korkulacak birşey midir ?

Bize fazla mı gelir ? :D

Nasıl kurulur ?

Nasıl devreye alınır ?

Mantığı nedir ?

Biz yazabilirmiyiz ?

Standartları var mıdır ?


Hepimiz kod yazıyoruz.
ASM,
Basic,
C,
Parsic...

Değişik Mcu larda.
PIC
8051
ARM
AVR...

Peki Semaphore nedir ?
Aslında kullanıyoruz ama yazılım literatürüne yüzyıllar öncesinden girmiş bu kelimeyi direk olarak tanımıyoruz.


Round Robin
Multi-Tasking
Real Time
Preemptive
Non_Preemptive
Cooperative
Posix
???


bunları tanıyalım.


Salvo
http://www.pumpkininc.com/

uSmartX
http://usmartx.sourceforge.net/

PICOS18
http://www.picos18.com/

Novo Rtos
http://www.sourceboost.com/Products/NovoRtos/Overview.html

Şu sayfayı lütfen inceleyin,
http://embeddedplc.com/rtos_1.htm

Bunu da :D
http://en.wikipedia.org/wiki/Real-time_operating_system

Logan

Allegro, RTOS konusu için çok güzel bir başlangıç yapmışsın. En altta bulunan linkte yapılan açıklamalar incelenecek olunursa, bizim genel olarak kullandığımız yöntemin "Spaghetti code" olarak adlandırıldığını görebiliriz :)

Gelişmeleri yakından takip ediyorum...
İmza.

Erol YILMAZ

#2
Cooperative Multitasking nasıl çalışır ?

Görüldüğü üzere eldeki görev bitirilir ve diğer göreve ondan sonra geçiş yapılır...



Erol YILMAZ

#3
Preemptive Multitasking in çalışmasını özetleyen akış şeması da aşağıdaki gibi...

Görev değişimini sağlayan rutin  <schedular veya dispatcher>, SYS_INT te ve görevden (delay gibi) bir şekilde ayrıldığımızda çalışıyor,,,


Erol YILMAZ


emrahmrcn

Bildiğimiz anlamda İŞletim sistemleri mcu üzerinde şu işlemleri yapar, (Örneğin bir programın çalıştırılması ve yüklenmesi)
- Öncelikle işletim sistemi çalışacak programın kodlarının hafızanın neresinde bulunduğunu bilmesi lazım
- Diyelim hafızada, çalışacak programımızın kodları 0x100 adresinden başlıyor
- İşletim sistemi , mcu nun PC sini 0x100 adresine yönlendirir, bundan sonra programımız execute(işlenmeye-çalışmaya) başlar
- İşletim sistemi belirli bir zaman bu kodları çalıştırmayı sürdürür taki atomic time denilen kesme zamanı(1-10mS) geldiğine değin, bundan sonra dispatcher diğer programı çalıştırmak için gerekli işlemleri yapar(yarım kesilen programın durum bilgilerinin kaydedilmesi vb.)
- İşletim sistemi tekrar yeni programın adresini PC ye yükler ve olaylar bu şekilde devam eder

Burda çok şey eksik kalmış olabilir, kabaca anlatmaya çalıştım, bence resmin büyüğü görülmeden diğerlerine geçmemek lazım. Buralar anlaşıldığında zaten ilerideki konularda anlatılacak noktalar kendiliğinden soru olarak geliyor, örneğin MMU gibi

İyi Çalışmalar
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

Erol YILMAZ

Merhaba emrahmrcn;
Bir üstteki grafikte gösterilen Preemptive Multitasking çalışmada
Yüksek Öncelikli Görevin "atomic time"  ın yarısı kadar gecikmiş görünüyor... Bu mümkün mü ?

Bir şeyi yanlış mı anlıyoruz ?

emrahmrcn

Atomic Time INT ı oluşana kadar scheduler yapılamayacağından beklemek zorunda kalıyor..

Alıntı yapılan: Allegro - 02 Nisan 2011, 14:14:01
Merhaba emrahmrcn;
Bir üstteki grafikte gösterilen Preemptive Multitasking çalışmada
Yüksek Öncelikli Görevin "atomic time"  ın yarısı kadar gecikmiş görünüyor... Bu mümkün mü ?

Bir şeyi yanlış mı anlıyoruz ?
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

EMG81

#8
Bana bikaç Rtos örnekleri gösterebilirmisiniz ?


mesela Rtos ile 18f,24f,32f serisi kullanarak VGA dan çalış alabilirmiyim ?

Yada Rtos tam olarak nedir? konuları En başlarından beri okudum ama şuan kafamda çok soru işareti var.

Erol YILMAZ

Sana süper bir RTOS örneği aktarıyorum,
Olayı abartmamak gerektiğini ve küçümsememek gerektiğini görebilirsin  :D
Mod'a Not: Kodu bir arada görmek için CODE TAG kullanmadım.


#include <RTL.h>

OS_TID task1;
OS_TID task2;

U16 counter1;
U16 counter2;

__task void job1 (void);
__task void job2 (void);

__task void job1 (void) {
  task1 = os_task_create (job1,1);
  task2 = os_task_create (job2,1);

  while (1) {
    counter1++;
    os_dly_wait (10);
  }
}
       
__task void job2 (void) {
  while (1) {
    counter2++;
    os_dly_wait (20);
  }
}

int main (void) {

  os_sys_init (job1);
}


VGA sürmek, Motor sürücü yapmak, sıcaklık sensörü okumak RTOS içinde yapılacak bi iştir.
Ve RTOS la pek alakası yoktur... RTOS bu hizmetleri "KOLAYCA" yapacak bir ortam sağlar sadece...
...Geri kalanlar ise tamamen size bağlı...

mufitsozen

#10
Alıntı yapılan: Allegro - 02 Nisan 2011, 14:14:01
Merhaba emrahmrcn;
Bir üstteki grafikte gösterilen Preemptive Multitasking çalışmada
Yüksek Öncelikli Görevin "atomic time"  ın yarısı kadar gecikmiş görünüyor... Bu mümkün mü ?

Bir şeyi yanlış mı anlıyoruz ?

Evet!

Kendisine RTOS diyecek kadar saygi duyan hemen her RTOS
(preemtptive scheduling vb yapan),

en azindan sistemdeki her task icin bir TCB (task-control-block) tutar ve
bunuda yarattigi sirada oyle bir sekilde 'initialize' ederki,

o task'e ait 'context' degerleri taskin bir interrupt tarafindan kesildigini gosterir,
boylece TCBdeki PC uzerinden isi run ettiginizde bir sonraki INT(kesme)ye kadar task run eder.

Kesme oldugunda sistem TCByi yine ayni sekilde tutacak gibi degerleri yazar.

Bundan dolayi RTOSlarda kullanirken 'interrupt latency' diye bir olcutden bahsedilir.
Daha sonra kesmeden donuldugunde isletim sistemi,

son kesilen isi devam ettirebilecegi gibi, dahada iyisi o anda bekleyen tasklarin icinde
daha yuksek oncelikli bir is var ise (bir mutex yada semafor bekleyen) onuda kosturabilir.
(cunku kesme icinde mutex yada semafor degerleri degismis olabilir) boylece yuksek oncelikli isler kesmeden sonra tekrar timer-tick interruptina kadar kosarlar.

Yani bu scheduling (zamanlama) meselesi, timer-tickle bir isten oburune degisir gibi basit ve duz mantik değildir.

Bu konuda PIC (eger 24/33 serisi filan değilse) gercek bir RTOS kullanmak mumkun değildir (illede arm, illede arm), ancak multitasking kernel vb basit duzeneklerden bahsedilebilir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.