Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => RTOS Uygulamaları => Konuyu başlatan: serdararikan - 22 Nisan 2011, 18:14:00

Başlık: RTOS Sohbetleri!!
Gönderen: serdararikan - 22 Nisan 2011, 18:14:00
RTOS hakkında bilgi alış-verişi,bilgilendirme amaçlı aklımıza gelen soruları buraya yazıp öneri,bilgi...vb cevapları almak istiyorum.

RTOS hakkında bildiklerim;
* yapılacaklar (Task) olarak tanımlanıyor.ve herbir task'ın belirli bir sürede gerçekleşmesi gerekiyor.
* task belirlenen sürede gerçekleştirilemezse görev başarısız oluyor.
* taskların öncelik(priorty) durumları var.önceliği yüksek olan task diğer taskların işleyişini kesebiliyor.

Kafamı karıştıranlar;
* RTOS da kaç task bulunur?
* Sınırı varmıdır?
* Sınır donanıma bağlıdır mutlaka ama standart olarak belirlenmiş xxx kadar task genel işlemler için yeterlidir şeklinde bir kabul söz konusumudur?
* Öncelik durumu RTOS da nasıl değerlendirilir?
* RTOS' da kesme varmıdır?Varsa Kesmeler RTOS un işleyişini nasıl etkiler?
* RTOS da Delay işlemi nasıl yapılır?
* RTOS' lara LCD,keypad,sensorler...vb için driverler adapte edilirmi?Edilirse driver ile RTOS arasındaki kod uyumluluğu nasıl sağlanır?

yazdıklarım benim düşüncelerim.bildiklerimde yanılıyor veya yanlış biliyor olabilirim.Sorularımı bazıları saçma veya komik olabilir.Bilgi sahibi arkadaşlar cevaplarsa birçok kişiyede faydası olur.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 22 Nisan 2011, 19:42:33
Konuya hakim olmak için bilgi sahibi olmanız şart.
Bunun yolu da sanırım okumaktan geçiyor...

Multitasking çeşitlerini anlamalı öncelikle,
https://www.picproje.org/index.php/topic,25562.0.html

ve herhangibir RTOS'un kullanım kılavuzu ayarında metnini okumak gerekiyor...
http://www.keil.com/product/brochures/rl-arm_gs.pdf

Birçok genel kapsamlı sorunuza cevap bulacaksınız.

Misal task ta gecikme için KEIL RTX de os_dly_wait (20); kullanıyoruz.
Diğerlerinde de buna benzer şeyler...

Bu da OSA Rtos için bir şablon....



void main (void)
{
    //------------------------------------------------------------------------------
    //  Init PIC periphery
    //------------------------------------------------------------------------------

    Init();

    //------------------------------------------------------------------------------
    //  OSA initialisation
    //------------------------------------------------------------------------------

    OS_Init();

    //------------------------------------------------------------------------------
    //  Create all task with identical priority
    //------------------------------------------------------------------------------

    OS_Task_Create(0, Task_Sound);
    OS_Task_Create(0, Task_Button);
    OS_Task_Create(0, Task_Keyboard);

    //------------------------------------------------------------------------------
    //  Enable interrupts and run system
    //------------------------------------------------------------------------------

    OS_EI();
    OS_Run();
}

Çok yanlış anlaşıldığını düşündüğüm bi konu var.
"Verilen görevi istenilen sürede bitirmek zorunda" gibi birşeyler kalmış insanların aklında...
Olmazsa başarısız sayılır da diyenler var.

Oysa Askerlikte şöyle bir tabir vardır,

"Komutan, birliğinin yaptığı ve yapmadığı herşeyden sorumludur"

RTOS lar mı komutanımız yoksa biz mi? :)
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 23 Nisan 2011, 14:26:11
Alıntı yapılan: Allegro - 22 Nisan 2011, 19:42:33
Konuya hakim olmak için bilgi sahibi olmanız şart.
Bunun yolu da sanırım okumaktan geçiyor...

tabiki öğrenmek için okumak şart.Ama burası da bir forum.
Forum=Bilgi ve tecrübe paylaşımı

bilgi sadece okunarak öğrenilmez.öğrenmenin çok farklı yöntemleri vardır.Bu yöntemler kişinin zeka düzeyine.öğrenilecek konunun özelliğine,öğretim ortamına,öğretim araç-gereçlerine,öğrenim ihtiyaçlarına,hazır bulunuşluk düzeylerine göre....vb farklılıklar gösterebilir.

Siz okuyarak kendi kendinize (self learning) bir konuyu öğrenebilirsiniz.bu yöntem sizin için uygun bir yöntem olabilir.bende öğrenebilirim,ali de ahmet te...x,y z kişileride.

Ben forumların kitlesel öğrenim ortamları olduğuna inanırım.zaten paylaşımın da amacı budur.Eğer bir kitle herhangi bir konuda öğrenim ortamı oluşturacaksa kitledeki bireylerin mümkün olduğu kadar faaliyete katılımı öğrenim sürecini hızlandırır.

Forumda birçok arkadaşın RTOS konusu merak ettiğini ve öğrenmek istediğini düşünüyorum.bu amaçla bu başlığı açtım.zamanla katılımın artacağında da şüphem yok.Gerekli olan sadece ilk hareketi sağlamak.

http://webhome.csc.uvic.ca/~mcheng/466/handouts/RTOS/report/doxygen/html/index.html

bu sitede Atmel için yapılmış basit bir RTOS örneği var.buradaki gibi açık kod rtos'ları incelemeye başladım.incelemelerim ilerledikçe bu sonuçları paylaşacağım.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 23 Nisan 2011, 14:46:35
* yapılacaklar (Task) olarak tanımlanıyor.
DOĞRU

ve herbir task'ın belirli bir sürede gerçekleşmesi gerekiyor.
YANLIŞ

* task belirlenen sürede gerçekleştirilemezse görev başarısız oluyor.
YANLIŞ

* taskların öncelik(priorty) durumları var.önceliği yüksek olan task diğer taskların işleyişini kesebiliyor.
DOĞRU
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 23 Nisan 2011, 14:51:13
misal görevde birçok float işlem var ve bunlar 8 ms sürüyor.
biz de 6 ms de bitirmesini istiyoruz.
ne yapacaz ?

bu task başarısız mı diyecez ? :D

Bak atalarımız ne demiş?
BaŞarısız TASK yoktur, Başarısız yazılımcı vardır.
TASK; programcısına göre kişner...


Bu arada yapmamız gereken float işlemleri sadeleştirmek yada azaltmak olacaktır.
Mümkünse INTEGER tercih etmeli...
Bunu zaten biliyorduk ama UC-OS yazarıda aynı şeyi diyor.

Ne kalitede olursa olsun bir RTOS bizim genel yazılım problemlerimizi çözemez.
Tecrübe ve düşünmeye dayalı pratik yöntemleri sonuna kadar kullanmalıyız...

Biraz kitap indirdim fırsat buldukça incelerim :)

(http://img541.imageshack.us/img541/3572/ebook.png)
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 23 Nisan 2011, 14:53:03
sizi tanıdığım kadarıyla bu rtos konusunda uzmansınız.O vakit bilgilerinizden faydalanalım

okuduğum dökümana göre(salvo user manual) 

semaphore--> bir task ın işleyişini kontrol eden yani çalışmasını durmasını sağlayan veya rtos tan task a bilgi göndermeye yarayan bayraklar(flag) veya bilgi kodlarıdır??   diyebilirmiyiz?

1 bit, 8 bit,16 bit 32 bit  gibi semaphore lar var diyor manualde.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 23 Nisan 2011, 15:10:40
Uzman değilim öncelikle, öğrenmeye çalışıyorum bende...

Semafor:
2 tane görev-task-thread var, Adları A ve B olsun..
A görevini yapabilmek için B'nin görevini bir yere kadar bitirmesine ihtiyacı var diyelim...
A bu yüzden B den gelecek Semafor u bekliyor olsun...

B, o noktada Semafor u SET ederse A bu noktada görevine devam edebilir sinyali olarak değerlendirir bunu.

Bu durumu (belki de daha başka birçok durumu) halledebilmek için semafor kullanıyoruz.

Çok görevli çalışmanın kendine göre durumları var bunun gibi...
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 23 Nisan 2011, 15:20:50
yani basitçe özetleyecek olursak semafor tasklar arasında iletişim sağlıyor.

multitasking olayına gelince;
https://www.picproje.org/index.php/topic,25562.0.html

burada yazdığınıza göre ve salvo da anlatılana göre 2 temel multitasking sistemi var

* cooperative ve preemptive olmak üzere.

birisinde kesme ile hemen yüksek öncelikli taska geçiliyor ve yüksek öncelikli task bitince yarıda bırakılan task tamamlanıyor--> preemptive
diğerinde ise kesme gelince normal task bitene kadar beklenip normal task tamamlandıktan sonra yüksek öncelikli taska geçiliyor.--> cooperative


bunların dışında kullanılan ne gibi multitasking çeşitleri var veya varmı?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 23 Nisan 2011, 15:37:58
Preemptive, Cooperative de öncelik-priority sıralaması takip ediliyor.

Diğer dediğin zaman:
Ayrıca SuperLoop gibi ultra-basit bir teknikle, her bir görevi, "State Machine"
içinde çalıştırarak Multitasking'e giriş yapılabilir.

Öncelik olmadan, bütün görevler sırası ile çalıştırılır.

Ve bu sırada toplam tarama periyodu 10ms'den fazla olmaz ise bence
en basit işlemcide bile çalıştırılabilecek bir Multitasking sistemi elde edilir.
Tabi bazı servislerle de desteklemek lazım durumu...
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 23 Nisan 2011, 15:49:20
aşağıdaki örnekte anladığım kadarıyla 5 adet task var

1- butona her basılışında counter değeri 1 er 1 er artırılıyor

2- zaman bilgisi

3- 10Hz lik bir sinyal üretiliyor

4- 200KHz lik bir sinyal üretiliyor

5- belirli periyotlar ile LCD de değerler görüntüleniyor

burada sanırım time,10Hz ve 200KHz lik frekans üretme işlemi öncelikli işlemler.özellikle en kritik işlem 200KHz lik sinyal. sonra time ve sonrada 10 Hz lik sinyal en son buton

Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 23 Nisan 2011, 15:52:36
200 khz değil 200 Hz olacak,

RTOS dediğimiz şey sihirli değnek değil yaw,
o da gariban koşturan bi kod işte :)))

Zamandan haberdar olmak için genellikle gördüğüm 10 ms lik TICK kullanıyor millet.
Cortex M3 lerde Systick Counter var misal bu iş için optimize edilmiş....
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 23 Nisan 2011, 15:55:36
evt 200Hz pardon.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: rree - 26 Nisan 2011, 19:47:27
iki sene önce yazmıştım.18f452 Timer0 kesmesini kullanarak dört tane program parelel çalıştırabilirmiyim diye(Elbettete sıralı çalışır). Yazdığım bu program hangi katagöriye girmiş bulunur. Fazla bir işe yaradığını söyleyemem çünkü hız 40 kat düşüyor.

    Device=18f452
    DECLARE LCD_DTPIN PORTB.4
    DECLARE LCD_ENPIN PORTB.3
    DECLARE LCD_RSPIN PORTB.2

    @CONFIG_REQ
    '@__CONFIG CONFIG1H, OSCS_OFF_1 & HS_OSC_1
    @__CONFIG CONFIG1H, OSCS_OFF_1 & HSPLL_OSC_1
    @__CONFIG CONFIG2L, BOR_OFF_2 & BORV_20_2 & PWRT_OFF_2
    @__CONFIG CONFIG2H, WDT_OFF_2 & WDTPS_128_2
    @__CONFIG CONFIG3H, CCP2MX_OFF_3
    @__CONFIG CONFIG4L, STVR_OFF_4 & LVP_OFF_4 & DEBUG_OFF_4
   
    '#fuses HS,WDT128,NOPROTECT,NOLVP

    XTAL  = 10
    Symbol TMR0ON T0CON.7'Tmro 1 aÇIP kAPATMA
    SYMBOL T0IE INTCON.5
    SYMBOL T0IF INTCON.2         
    SYMBOL TMR1ON T1CON.0
    SYMBOL TMR1IF PIR1.0
    SYMBOL TMR1IE PIE1.0
    SYMBOL GIEL INTCON.6
    SYMBOL GIE INTCON.7
     
   
   

   
'Multi Taskingde Kullanılan Değişkenleri belirt
    Dim MTsayac As Word
   
    Dim MTDIN As Dword
    Dim MTD0 as MTDIN.Byte0
    Dim MTD1 as MTDIN.Byte1
    Dim MTD2 as MTDIN.Byte2
    Dim MTD3 as MTDIN.Byte3

    Dim MT0AD as Dword
    Dim MT1AD as Dword
    Dim MT2AD as Dword
    Dim MT3AD as Dword
    Dim MT4AD as Dword
   
    IntCon=%00100000'Tmro en,Int0 En
     T0CON=%11000000  'xxx.7 RD16
     'T1CON=%00000110
      'PIR1=%00000000
      'PIE1=%00000001
      'IPR1=%00000000  'xxx.0?
   
   
Basla:
   
    TrisA=%00000000
    TrisB=%00000000
    TrisC=%00000001
   
   
    'TMR1L=0
    'TMR1H=0
    Tmr0L=0
    TMR0H=0
' Multitasking Alt Etiket adreslerini al   
    MT0AD=MTASK0
    MT1AD=MTASK1
    MT2AD=MTASK2
    MT3AD=MTASK3
    MT4AD=MTASK4
   
    Goto Ana   
    ON_INTERRUPT goto Kesme
'------------------><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Kesme:
T0IF=0
TMR0L =211 'iki komut işleyecek süredir
'StAyar=$01
' Döndüğün yere kaydet Dikkat Select Case Deyimi Yerine Asemblerde Program Yaz
' Boyutlarına karşılaştır.
Select Case MTsayac
Case 0
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT0AD=MTDIN

Case 1
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT1AD=MTDIN

Case 2
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT2AD=MTDIN

Case 3
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT3AD=MTDIN

Case 4
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT4AD=MTDIN
End Select

MTsayac=MTsayac+1
if MTsayac >=5 Then MTsayac=0
YUKGIT:
' Multitasking adreslerini yükle ve git
Select Case MTsayac
Case 0
  MTDIN=MT0AD
  TOSL=MTD0
  TOSH=MTD1
  TOSU=MTD2
Case 1
  MTDIN=MT1AD
  TOSL=MTD0
  TOSH=MTD1
  TOSU=MTD2
Case 2
  MTDIN=MT2AD
  TOSL=MTD0
  TOSH=MTD1
  TOSU=MTD2
Case 3
   MTDIN=MT3AD
   TOSL=MTD0
   TOSH=MTD1
   TOSU=MTD2
Case 4
   MTDIN=MT4AD
   TOSL=MTD0
   TOSH=MTD1
   TOSU=MTD2
End Select


Retfie Fast
'-----------------------------------------------------------
Ana:
TMR0H=0
TMR0L=0
T0IF=0
TMR0ON=1
TMR1ON=1
GIE=1
'GIEL=1
'-><<<<------<<<-------<<<-------<<<-------<<<--------------
Ana1:

Goto Mtask0
   
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask0:
     gie=0
     Cls
     Print At 1,1, "Task1"
     Delayms 100
     gie=1


Goto Mtask0
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask1:
Toggle PortC.1
gie=0
Print At 1,1, "Task2"
Delayms 100
gie=1



Goto Mtask1
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask2:

Toggle PortC.2
gie=0
Cls
Print At 1,1, "Task3"
Delayms 100
gie=1

Goto Mtask2
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask3:
  Nop
  NOP
  NOP
  NOP
  NOP

'Toggle PortC.3





Goto Mtask3
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask4:


Toggle PortC.4




Goto Mtask4
'->>-------->>>------->>>------->>>-------->>>----->>------


Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 26 Nisan 2011, 22:56:02
Alıntı yapılan: rree - 26 Nisan 2011, 19:47:27
iki sene önce yazmıştım.18f452 Timer0 kesmesini kullanarak dört tane program parelel çalıştırabilirmiyim diye(Elbettete sıralı çalışır). Yazdığım bu program hangi katagöriye girmiş bulunur. Fazla bir işe yaradığını söyleyemem çünkü hız 40 kat düşüyor.

    Device=18f452
    DECLARE LCD_DTPIN PORTB.4
    DECLARE LCD_ENPIN PORTB.3
    DECLARE LCD_RSPIN PORTB.2

    @CONFIG_REQ
    '@__CONFIG CONFIG1H, OSCS_OFF_1 & HS_OSC_1
    @__CONFIG CONFIG1H, OSCS_OFF_1 & HSPLL_OSC_1
    @__CONFIG CONFIG2L, BOR_OFF_2 & BORV_20_2 & PWRT_OFF_2
    @__CONFIG CONFIG2H, WDT_OFF_2 & WDTPS_128_2
    @__CONFIG CONFIG3H, CCP2MX_OFF_3
    @__CONFIG CONFIG4L, STVR_OFF_4 & LVP_OFF_4 & DEBUG_OFF_4
   
    '#fuses HS,WDT128,NOPROTECT,NOLVP

    XTAL  = 10
    Symbol TMR0ON T0CON.7'Tmro 1 aÇIP kAPATMA
    SYMBOL T0IE INTCON.5
    SYMBOL T0IF INTCON.2         
    SYMBOL TMR1ON T1CON.0
    SYMBOL TMR1IF PIR1.0
    SYMBOL TMR1IE PIE1.0
    SYMBOL GIEL INTCON.6
    SYMBOL GIE INTCON.7
     
   
   

   
'Multi Taskingde Kullanılan Değişkenleri belirt
    Dim MTsayac As Word
   
    Dim MTDIN As Dword
    Dim MTD0 as MTDIN.Byte0
    Dim MTD1 as MTDIN.Byte1
    Dim MTD2 as MTDIN.Byte2
    Dim MTD3 as MTDIN.Byte3

    Dim MT0AD as Dword
    Dim MT1AD as Dword
    Dim MT2AD as Dword
    Dim MT3AD as Dword
    Dim MT4AD as Dword
   
    IntCon=%00100000'Tmro en,Int0 En
     T0CON=%11000000  'xxx.7 RD16
     'T1CON=%00000110
      'PIR1=%00000000
      'PIE1=%00000001
      'IPR1=%00000000  'xxx.0?
   
   
Basla:
   
    TrisA=%00000000
    TrisB=%00000000
    TrisC=%00000001
   
   
    'TMR1L=0
    'TMR1H=0
    Tmr0L=0
    TMR0H=0
' Multitasking Alt Etiket adreslerini al   
    MT0AD=MTASK0
    MT1AD=MTASK1
    MT2AD=MTASK2
    MT3AD=MTASK3
    MT4AD=MTASK4
   
    Goto Ana   
    ON_INTERRUPT goto Kesme
'------------------><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Kesme:
T0IF=0
TMR0L =211 'iki komut işleyecek süredir
'StAyar=$01
' Döndüğün yere kaydet Dikkat Select Case Deyimi Yerine Asemblerde Program Yaz
' Boyutlarına karşılaştır.
Select Case MTsayac
Case 0
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT0AD=MTDIN

Case 1
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT1AD=MTDIN

Case 2
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT2AD=MTDIN

Case 3
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT3AD=MTDIN

Case 4
  MTD0=TOSL
  MTD1=TOSH
  MTD2=TOSU 'MT0AD  Donduğü adresi MT0AD Kaydet
  MT4AD=MTDIN
End Select

MTsayac=MTsayac+1
if MTsayac >=5 Then MTsayac=0
YUKGIT:
' Multitasking adreslerini yükle ve git
Select Case MTsayac
Case 0
  MTDIN=MT0AD
  TOSL=MTD0
  TOSH=MTD1
  TOSU=MTD2
Case 1
  MTDIN=MT1AD
  TOSL=MTD0
  TOSH=MTD1
  TOSU=MTD2
Case 2
  MTDIN=MT2AD
  TOSL=MTD0
  TOSH=MTD1
  TOSU=MTD2
Case 3
   MTDIN=MT3AD
   TOSL=MTD0
   TOSH=MTD1
   TOSU=MTD2
Case 4
   MTDIN=MT4AD
   TOSL=MTD0
   TOSH=MTD1
   TOSU=MTD2
End Select


Retfie Fast
'-----------------------------------------------------------
Ana:
TMR0H=0
TMR0L=0
T0IF=0
TMR0ON=1
TMR1ON=1
GIE=1
'GIEL=1
'-><<<<------<<<-------<<<-------<<<-------<<<--------------
Ana1:

Goto Mtask0
   
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask0:
     gie=0
     Cls
     Print At 1,1, "Task1"
     Delayms 100
     gie=1


Goto Mtask0
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask1:
Toggle PortC.1
gie=0
Print At 1,1, "Task2"
Delayms 100
gie=1



Goto Mtask1
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask2:

Toggle PortC.2
gie=0
Cls
Print At 1,1, "Task3"
Delayms 100
gie=1

Goto Mtask2
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask3:
  Nop
  NOP
  NOP
  NOP
  NOP

'Toggle PortC.3





Goto Mtask3
'->>-------->>>------->>>------->>>-------->>>----->>------
Mtask4:


Toggle PortC.4




Goto Mtask4
'->>-------->>>------->>>------->>>-------->>>----->>------




sanırım yazdığınız kod "State Machine" kategorisine giriyor.İşe yaramak kısmına gelince anladığım kadar ile; hız 4 te birine düşüyor diye bir olay yok.RTOS mantığında bir işin ne kadar sürede bitirilmesi gerektiği bellidir.iş o süre yapılır ve bitirilir.eğer belirli aralıklarla yapılacaksan görev zamanı geldiğinde tekrar başlatılır tekrar bitirilir.süreç böyle devam eder.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 26 Nisan 2011, 23:12:05
Alıntı yapılan: serdararikan - 26 Nisan 2011, 22:56:02...RTOS mantığında bir işin ne kadar sürede bitirilmesi gerektiği bellidir...

Söylediğiniz bu süre işi için bir kaynak gösterebilir misiniz ?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 26 Nisan 2011, 23:23:22
gösteremem çünki bu bil bilgi değil.Bu yüzden cümleye "anladığım kadarı ile"  diyerek başladım.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 26 Nisan 2011, 23:41:56
şu kadar sürede bitirecen diye bişi olamaz da ondan diyorum :)
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 26 Nisan 2011, 23:43:03
bak ne güzel yanlış bildiğimiz noktaları aydınlatıyorsunuz.teşekkür ederiz
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: muuzoo - 26 Nisan 2011, 23:56:26
Şu süre mevzusuna takıldım biraz. Diyelim ki bir sistemimiz var. Bu sistemde rtos kullanıyoruz. Dışarıdan tetikleme geldiğinde o tetiklemeye bağlı işin mutlaka 10ms içinde bitirilmesi gerekiyor diyelim. Yani o iş için belirlenmiş azami bitirme süresi 10ms olsun. 10ms'nin altındaki herhangi bir süre bizim için kabul edilebilir olsun. Bu durumu, bu şartı ne olursa olsun sağlayabilen sistemi rtos olarak adlandırabiliriz değil mi? Yani bir iş için belirlediğimiz azami süre içerisinde herhangi bir anda işini bitirebiliyor. Bu durumda dolaylı da olsa bir iş için süre belirtmiş olmuyor muyuz?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: EMG81 - 27 Nisan 2011, 00:02:23
Ben daha RTOS un tam anlamıyla ne olduğu ve neler yapabildiğini anlamış değilim arkadaşşşş..lar.!
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 27 Nisan 2011, 00:12:39
Alıntı yapılan: EMG81 - 27 Nisan 2011, 00:02:23
Ben daha RTOS un tam anlamıyla ne olduğu ve neler yapabildiğini anlamış değilim arkadaşşşş..lar.!

bende onu anlamaya çalışıyorum.ama en önemli fonksiyonu multitasking heralde.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Veli B. - 27 Nisan 2011, 00:26:32
Olaya kurumsallık ve usta çırak mantığı ile çalışmak olarak bakmak lazım sanıyorum. RTOS kurumsal, yapısal programlama ise belirli bir iş için çalışan kodlar. Kurumsallık dediğim anda güzel ülkemin kurumları geliyor ya neyse:) Öyle ise bulaşmamak lazım bu işe...
Kritik bir haberleşme fonksiyonu yazdığımızı düşünelim. Donanımsal olmasın. Bu durumda TimeOut belirlenmedi ise bu fonksiyonda çakılırız ta ki sonuç alıncaya kadar.
Bu durumu RTOS üzerinde yapmak istersek nasıl olacak? INT ile fonksiyonu kestik ve çıktık diyelim; sonrasında neler yaşanabilir? Biz çıktıktan 30 us sonra data gelirse kaçar mı?  İş tamamen donanımsal destekle mi yürür? İç içe kesme desteği ne kadar etkin çalışır?
Hemen aklıma gelenler...
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 27 Nisan 2011, 00:33:58
bu tarz bir problemin kesmeye belirlenecek önceliklerle giderilebileceğini düşünüyorum.haberleşme kesme daha öncelikli belirlenirse olabilir.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: controller - 27 Nisan 2011, 01:07:22
RTOS ların normal OS lardan farkı deterministik olmasıdır. Yani sistemin işleyişinde sürpriz olmaz.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: EMG81 - 27 Nisan 2011, 01:46:55
Benim halen aklımda RTOS nedir sorusu var. Çok derinden giriyorsunuz konuya.(kimse kusura bakmasın.herkes öyle) Biraz yüzeysel takılsak daha iyi gibi.

Ne bu RTOS. WinCE gibi birşeymi? Yoksa compiler gibi birşeymi? Yoksa adamlar bir yığın kod yazmış bize 1 satırda bunların tamamını kullanma şansımı vermiş? Yoksa yoksa yoksa . Durdurun artık şu yoksalarımı.  :-\
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Maxim - 27 Nisan 2011, 08:22:08
aynen bende katılıyorum
nedir bu rtos ?
bir yöntemmidir ?
multitasking mi yaratıyor ?
donanımda olmayan bir şeyi yazılım sayesindemi yapıyor ?
başka derleyicilerle bunu yapmak neden imkansız ?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 27 Nisan 2011, 11:21:43
herkes bu konuyu merak ediyor ama ortlıkta bir kod yok.acaba hazır bir rtos ile uygulama yapmayı denemekmi lazım yoksa ufaktan başlayıp,örneğin multitasking yapabilecek bir kod yazarak olaya giriş yapmak mı lazım?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: emrahmrcn - 27 Nisan 2011, 12:01:59
Nedir bu RTOS ?
RTOS kod topluluğu, fakat belirli bir disipline göre şekillenmiş, yoksa bildiğiniz yazdığınız kodlardan ne farkı olabilir !
Normal de biz RB0 = 1 yap dediğimiz de hemen rb0 1 oluyor haliyle, fakat rtos da ise bu rtos a rb0 ı 1 yap demekle oluyor yani rtos donanımı kontrol altında tutuyor kendi başımızla donanımla oynayamıyoruz. RTOS dediğimiz şey yine kod parçacıkları unutmayalım.Mesala rtos da OSportb( 1, 1) diye fonksiyon vardır portları kontrol eden ancak bunla portlara müdahale edebiliriz, peki niye rb0 = 1 demiyoruz çünki rtos aynı anda 5 programı kontrölünde tutması gerek heryerde portu kafamıza göre değiştirirsek direkt anlamda(rb0 =1 gibi) bu 5 programı kontrol etmek zorlaşır. Şimdilik bu kadar konu açıldıkça soru geldikçe en basit anlamda anlatmaya çalışacağım.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: serdararikan - 27 Nisan 2011, 12:30:45
Alıntı yapılan: emrahmrcn - 27 Nisan 2011, 12:01:59
Şimdilik bu kadar konu açıldıkça soru geldikçe en basit anlamda anlatmaya çalışacağım.
emrah hocam açıklamalar için teşekkür ederiz.benim merak ettiğim konu hazır yazılmış bir RTOS elbette kodlarının test edilmiş defalarca denenmiş eksiklikleri giderilmiş olduğundan kullanışlıdır.fakat hazır bir RTOS u anlamak için oturup onun tüm manualini okumak,çok sayıda örnek yapmak gerekir.RTOS konusuna yeni başlayanlar için olaya bi yerden başlamak lazım.bu ilk başlangıç konusunda yardımcı olabilirmisiniz?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: emrahmrcn - 27 Nisan 2011, 19:34:57
Alıntı yapılan: gerbay - 27 Nisan 2011, 13:48:42
Alıntı yapılan: emrahmrcn - 27 Nisan 2011, 12:01:59
Nedir bu RTOS ?
RTOS kod topluluğu, fakat belirli bir disipline göre şekillenmiş, yoksa bildiğiniz yazdığınız kodlardan ne farkı olabilir !
Normal de biz RB0 = 1 yap dediğimiz de hemen rb0 1 oluyor haliyle, fakat rtos da ise bu rtos a rb0 ı 1 yap demekle oluyor yani rtos donanımı kontrol altında tutuyor kendi başımızla donanımla oynayamıyoruz. RTOS dediğimiz şey yine kod parçacıkları unutmayalım.Mesala rtos da OSportb( 1, 1) diye fonksiyon vardır portları kontrol eden ancak bunla portlara müdahale edebiliriz, peki niye rb0 = 1 demiyoruz çünki rtos aynı anda 5 programı kontrölünde tutması gerek heryerde portu kafamıza göre değiştirirsek direkt anlamda(rb0 =1 gibi) bu 5 programı kontrol etmek zorlaşır. Şimdilik bu kadar konu açıldıkça soru geldikçe en basit anlamda anlatmaya çalışacağım.

hocam donanımı RTOS kontrol altında tutuyor ya da turumuyor olayı başka bir olay. Diyelim ki siz kernel mode da çalışıyorsunuz, o zaman donanıma istediğiniz gibi erişebilirsiniz. İster direk erişin ister RTOS üzerinden erişin. Eğer user mode da çalışıyorsanız bunu yapamazsınız, kernel mode da çalışan bir driver üzerinden yapmanız gerekir. Bu normal PC lerde çalıştırdığımız işletim sistemlerinde de böyle RTOS larda da..  Bu olay tamamen farklı bir olay..

Tabiki bu da OS in bir parçası, ben parça parça OS içeriğinden örnek veriyorum yoksa RTOS bu anlattığım olay değil sadece , insanların kafasında somut şeyler oluşması lazım buda en bilindik örneklerle olabilir. Şimdi siz yeni bir noktaya temas ettiniz KERNEL mod ve USER mod yada Çekirdek modu ve kullanıcı modu, bunlarda bellek yönetimi (MMU) bilindikten sonra oturacak konular.
Öncelikli olarak soru sormak lazım ki akılda bir şeyler oluşsun? Niye bizim RTOS lara ihtiyacımız var? Zaten biz kodları bildiğimiz gibi yazıyoruz sorun olmuyor ! Peki aynı anda çalışıyormuş gibi görünen programlar yazdınızmı ? Bir kod kümeniz olsa , her yeni işlemcide portları değiştirmek için bir çok ayar yerine hep aynı fonksiyonları(API) kullansanız işleriniz daha da hızlanmazmı, ve tabikide uzun zaman değişik ortamlarda test edilmiş kod kümesi sizin yeniden yazacağınız kodların güvenirliliğinden ne kadar yüksek olur ?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Erol YILMAZ - 27 Nisan 2011, 19:47:32
Alıntı yapılan: serdararikan - 27 Nisan 2011, 11:21:43
herkes bu konuyu merak ediyor ama ortlıkta bir kod yok.acaba hazır bir rtos ile uygulama yapmayı denemekmi lazım yoksa ufaktan başlayıp,örneğin multitasking yapabilecek bir kod yazarak olaya giriş yapmak mı lazım?

Öncelikle bu konuya hassasiyet gösteren arkadaşların SADECE TÜRKÇE kaynakları taraması,
example klasörünü, User Manuali okumaması neticesi, kesin olarak BAŞARISIZLIKTIR.

Kod yok diyen arkadaşım,
Bak kod yazmışım senin için,

https://www.picproje.org/index.php/topic,25562.0.html


Gelelim şimdi Salvo RTOS user manualine:
https://rapidshare.com/files/459459470/e-book_Salvo_User_Manual.pdf

Adam konu başlığı açmış:
Chapter 2 • RTOS Fundamentals
Basic Terms

Sayfa 43...
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: rree - 27 Nisan 2011, 22:44:29
Pic18f452 Multi tasking programında yaşanan problemler şunlardı.Dört tane program parelel çalışsın tasarlamıştım.Bunları Mtask0,Mtask1,Mtask2,Mtask3 label etiketi altında timer0 atanan zaman kadar kotları işliyor.Zaman bitince diğerine atlıyor. 
-Zamana baglı bir program var kulanıldı ise o program düzgün çalışmıyor. Çalışması için kesmeyi kapatmam
tasking işlemini durdurmam gerekiyor.
-  Kesme çok sık tekralandığı için Status ,W  Durum kayıtcılarını yedeklemek  tekrar geri vermek için  çok
zaman kaybediliyor.
- Öyle durum oluyorki komutun işlendiğini belirten   buna bağlı kesme lazım oluyor.Pic de öyle bir şey yok.
- Delay komutu tasking programında hesaplanan değerlerde çalışmıyor
- Serial soft vare programlarıda

  Bu problemler rtos ile  donanımsal ve yazılımsal  çözülmüş sanırım yavaş yavaş anlamaya çalışacağım.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: EMG81 - 23 Temmuz 2011, 08:24:57
Arkadaşlar Rtos için 1 günümü harcadım. Mikro C ile sabahladım ve sonuç: Artık bende Rtos un içerisindeyim. ! :)

Şu an 3 adet Task oluşturdum. Bu taskların içine de herkesin yaptığı gibi belirli zamanlarla pinlerin bitlerini değiştirip sonsuz döngü koydum. Mükemmel bi şekilde çalışıyor. Biraz dinlendikten sonra Akşama Rtos ile Edüstriyel bir iş yapıcam.

Ayrıca RTos hakkında merak eden, sorun yaşayan herkese yardımcı olabilirim.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: t2 - 23 Temmuz 2011, 11:52:01
Alıntı yapılan: EMG81 - 23 Temmuz 2011, 08:24:57
Ayrıca RTos hakkında merak eden, sorun yaşayan herkese yardımcı olabilirim.
Ben merak ediyorum hiç bir denemem olmadı. Örnek proje yayınlarsanız sevinirim.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: SERRO EFE - 23 Temmuz 2011, 13:24:53
fxdev in sayesinde bende osartos ile bişeyler karaladım avr için 4 task grafik ekran adc giriş çıkışlar felan gayet kolaylaştırıyo işleri.. programa takla attırmak zorunda kalmıyorum..
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: EMG81 - 23 Temmuz 2011, 18:21:14
OSA .


@T2

Rtos için C kullanmak lazım. Senin için Hemen bir örnek kod yayınlıyorum.

/* RTOS deneme
       23.07.2011
*/


#include <osa.h>

//******************************************************************************
// 
//      Constants
//
//******************************************************************************

//------------------------------------------------------------------------------
#if     defined(P18F252) || defined(P18F258) || defined(P18F242) || defined(P18F248)
//------------------------------------------------------------------------------

    #define PORTA_CONST     0x00
    #define TRISA_CONST     0x01
   
    #define PORTB_CONST     0x00
    #define TRISB_CONST     0x01

    #define PORTC_CONST     0x00
    #define TRISC_CONST     0x00

    #define NUMBER_OF_LEDS  8
    #define TABLE_MASK      7

//------------------------------------------------------------------------------
#elif   defined(P18F452) || defined(P18F458) || defined(P18F442) || defined(P18F448)
//------------------------------------------------------------------------------

    #define PORTA_CONST     0x00
    #define TRISA_CONST     0x01

    #define PORTB_CONST     0x00
    #define TRISB_CONST     0x01

    #define PORTC_CONST     0x00
    #define TRISC_CONST     0x00

    #define PORTD_CONST     0x00
    #define TRISD_CONST     0x00

    #define PORTE_CONST     0x00
    #define TRISE_CONST     0x00

    #define NUMBER_OF_LEDS  8
    #define TABLE_MASK      7

//------------------------------------------------------------------------------
#endif
//------------------------------------------------------------------------------
// Timers
//------------------------------------------------------------------------------

// Timer0 used as a counter for software PWM

#define T0CON_CONST     0x41        // prs = 4 (period = 256 * 4 * 0.2us = 200 us)
                                    // 8-bit mode

// TImer2 used for system ticks

#define T2CON_CONST     0x25        // post = 8, period = 250*4*5* 0.2 us = 1 ms
#define PR2_CONST       (250-1)     
#define ms              / 1         //


//******************************************************************************
//
//      LED's brightness table
//
//******************************************************************************


//------------------------------------------------------------------------------
#if     NUMBER_OF_LEDS == 4
//------------------------------------------------------------------------------
    const char Brightness[] = {31, 11,  4,  0};
//------------------------------------------------------------------------------
#elif   NUMBER_OF_LEDS == 8
//------------------------------------------------------------------------------
    const char Brightness[] = {31, 20, 11,  7,  4, 2, 1, 0};
//------------------------------------------------------------------------------
#else
//------------------------------------------------------------------------------
    #error "Incorrect NUMBER_OF_LEDS constant value (should be 4 or 8)"
//------------------------------------------------------------------------------
#endif
//------------------------------------------------------------------------------


//******************************************************************************
// 
//      Global variables
//
//******************************************************************************

char   m_cSpeed;        // Rotation speed
char   m_cPosition;     // Current rotation phase (position of brightness value in
                        // Brightness table)
char   m_cDirection;    // Rotation direction (-1, +1)


//******************************************************************************
// 
//      Function prototypes
//
//******************************************************************************

void    Init (void);
void    Task_Control1 (void);
void    Task_Control2 (void);
void    Task_Control3 (void);




/********************************************************************************
*                                                                              *
*  Function:       main                                                        *
*                                                                              *
*------------------------------------------------------------------------------*
*                                                                              *
********************************************************************************/

// Tell to linker that these functions will be called indirrectly

void main (void)
{
    Init();                             // Init periphery

    OS_Init();                          // Init OS

    OS_Task_Create(0, Task_Control1);    // Create tasks.
    OS_Task_Create(0, Task_Control2);
    OS_Task_Create(0, Task_Control3;
                                        // Starting values:
    m_cPosition  = 0;                   // rotation phase
    m_cDirection = 1;                   // dircetion

    OS_EI();                            // Enable interrupts

    OS_Run();                           // Running scheduler

}


/********************************************************************************
*                                                                              *
*  Function:       Init                                                        *
*                                                                              *
*------------------------------------------------------------------------------*
*
*  description:    Makes periphery initialization:
*                  - I/O ports
*                  - ADC
*                  - timers
*                  - interrupts
*
*  parameters:     void
*
*  on return:      void
*
********************************************************************************/

void Init (void)
{

    //------------------------------------------------------------------------------
    //  I/O ports configuration
    //------------------------------------------------------------------------------
   
    Porta=0;
    Portb=0;
    Portc=0;

    TrisA=0;
    TrisB=0;
    Trisc=0;


    //------------------------------------------------------------------------------
    //  ADC
    //------------------------------------------------------------------------------


    ADCON0 = 0xC1;                  // Channel 0
                                    // ADON = 1
                                    // Fosc/32
   
    ADCON1 = 0x0E;                  // Use only one analog input AN0 (RA0)
                                    // Left justify

    //------------------------------------------------------------------------------
    //  Timers init
    //------------------------------------------------------------------------------
   
    T0CON = 0x80 | T0CON_CONST;

    T2CON = T2CON_CONST;
    PR2 = 250-1;

    //------------------------------------------------------------------------------
    //  Interrupts
    //------------------------------------------------------------------------------
   
    INTCON = 0;
    T0IE_bit = 1;
    PEIE_bit = 1;
    TMR2IE_bit = 1;
}

/********************************************************************************
*
*  Interrupts service routine
*
********************************************************************************/

void interrupt (void)
{
   
    if (T0IF_bit && T0IE_bit)
    {
        T0IF_bit = 0;

    }


    if (TMR2IF_bit)
    {
        TMR2IF_bit = 0;
        OS_Timer();
    }

}

/********************************************************************************
*                                                                              *
*  TASK:           Task_Rolling                                                *
*                                                                              *
*------------------------------------------------------------------------------*
*
*  description:    Perfors rotation of brightesses for each LED
*
********************************************************************************/

#pragma funcall main Task_Control1
void Task_Control1 (void)
{
   for(;;){
       Portb.B7 = 1;
       OS_Delay(500 ms);
       Portb.B7 = 0;
       OS_Delay(500 ms);
   }
}

#pragma funcall main Task_Control2
void Task_Control2 (void)
{
   for(;;){
       Portb.B6 = 1;
       OS_Delay(250 ms);
       Portb.B6 = 0;
       OS_Delay(250 ms);
   }
}

#pragma funcall main Task_Control3
void Task_Control3 (void)
{
   for(;;){
       Portb.B5 = 1;
       OS_Delay(100 ms);
       Portb.B5 = 0;
       OS_Delay(100 ms);
   }
}
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: yamak - 23 Temmuz 2011, 19:02:53
Bu komut ile oluşturulan taskların öncelik sırası mı belirleniyo.Mesela bu uygulamada port.5 portb.6 portb.7 deki ledler aynı anda yanıp sönüyo mu?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: EMG81 - 23 Temmuz 2011, 19:16:00
Öncelik sırasını belirleyebileceğin gibi, ledleri aynı anda yakıp söndürebilirsin ama 1. derece önceliğe sahip iş bitmeden kesilip 2. 3. 4. 5. 6. işler yapılamaz. 6. derece iş bitmeden kesilip 5. 4. 3. 2. 1. işler yapılabilir.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: yamak - 23 Temmuz 2011, 19:32:21
Bir işin bitmesi tam olarak ne oluyo bütün tasklarda sonsuz döngüler var.mesela 3. task oluştursak ve herbirindeki işlemleri sonsuz döngüler içine koysak ve öncelik sıralarını belirlesek rtos nasıl bir ol izler. sonuçta hepsi sonsuz döngü içinde.Taklardan birindeki işini bitirmesi nasıl oluyo yani.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: fatihinanc - 23 Temmuz 2011, 19:49:29
Taskların birbiri arasındaki geçiş işlemi o task için ayrılan sürenin dolmasıyla belirleniyor diye biliyorum.
Bunu da timer kesmesi kontrol ediyor.

Tasklar arası geçiş kurallarını ise tasklarin önceliği belirliyor diye biliyorum...
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: EMG81 - 23 Temmuz 2011, 20:18:43
Alıntı yapılan: fatihinanc - 23 Temmuz 2011, 19:49:29
Taskların birbiri arasındaki geçiş işlemi o task için ayrılan sürenin dolmasıyla belirleniyor diye biliyorum.


O zaman Real Time çalışma olur mu ? Rtos un çalışma mantığını anlatan bikaç grafik koyuyorum buraya. (Not: Bu grafikler daha önce forumda paylaşıldı.)

(http://i54.tinypic.com/2elbcjo.png)
(http://i53.tinypic.com/1239mkn.png)
(http://i51.tinypic.com/2dm61l3.png)
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Tagli - 10 Ağustos 2011, 15:23:20
OSA'nın dökümantasyonunu inceledim, hatta biraz da kaynak koduna baktım. Ancak henüz bir uygulama denemesi yapmadım.

Benim aklıma takılan sorular, RTOS'un kullanımından çok dahili işleyişi ile ilgili.

Örneğin, normalde görev değişimi (context switch) sırasında, o görevin yığını (call stack) bir yere kopyalanmalı ki o görevin çağırdığı fonksiyonlardan geriye dönüş mümkün olsun. PIC16 ve PIC12 de yığına erişim mümkün değil. Bu durumda görevler içinde fonksiyon çağırmak mümkün olmuyor mu? Ayrıca kaynak kodunda PIC18 için olan bölümde de yığının saklanması ile ilgili bir bölüm göremedim, bilmiyorum belki de benim gözümden kaçmıştır. Sanki sadece program counter ve bazı register'lar saklanıyor gibi gözüküyor.

Ayrıca bir de C18'in kendi yazılımsal yığını var. Görev değişimi sırasında bunun da saklanması ve değiştirilmesi gerekebilir. Bu olay nasıl çözülmüş onu da anlamadım.

Dediğim gibi, ben kullanımından çok RTOS'un dahili işleyişini merak ediyorum. OSA'nın kaynak kodu güzel yazılmış, ama yine de sadece koda bakarak olayın bütününü görmek çok zor, veya ben bir türlü başaramadım. Bunu görsel veya sözel olarak anlatacak bir doküman var mıdır?
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: mcan - 12 Ekim 2011, 00:48:00
RTOS a bir task koyalım ve bu taskın sadece tek komutu getc(); olsun ,kullandığımız mikrokontrolörde donanımsal 1 byte hafıza tutabilen usart donanımı için
9600 bps ile haberleşebilmek  demek, aşşağı yukarı saniyede 1200 byte alıyoruz yada yolluyoruz demek, 1/1200 = 833ns ediyor. Yani veri kaybı olmaması açısından 833 ns de bir gidip usart donanımından ,datayı işleyeceksek, başka bir yere almak gerekiyor. Yani hiç bir işlemi işin içine kaymassak ve  usartdan alıp hafızaya atmak işemi de 1 ns olsun, düzgün veri iletişimi için her 833 ns de, 1 ns bu task a ayırmak gerekiyor .

Doğru mu anlamışım acaba.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: Veli B. - 12 Ekim 2011, 01:07:12
Alıntı yapılan: mcan - 12 Ekim 2011, 00:48:00
...9600 bps ile haberleşebilmek  demek, aşşağı yukarı saniyede 1200 byte alıyoruz yada yolluyoruz demek, 1/1200 = 833ns ediyor...

1/1200 baud 833us yapar. RTOS ları fazla incelemiş değilim fakat INT oluştuğunda zaten ilgili rutinde bir tampona atılma işlemi yazılımsal olarak programmer tarafından  yapılmıştır diye düşünüyorum. Task esnasında ilgili buffer veya flag kontrol edilip, görev varsa icra edilmeli, yoksa devam edilmeli diye düşünüyorum. Bu durumda bahsettiğiniz olaya gerek kalmaksızın, taskın kendisini INT rutini gibi kullanmış olursunuz ki oldukça da etkin olur. Yanlışım/hatam varsa konuyu bilen arkadaşlar düzeltir, bende öğrenmiş olurum.
Başlık: Ynt: RTOS Sohbetleri!!
Gönderen: mcan - 12 Ekim 2011, 15:53:27
Alıntı yapılan: katana - 12 Ekim 2011, 01:07:12
1/1200 baud 833us yapar. RTOS ları fazla incelemiş değilim fakat INT oluştuğunda zaten ilgili rutinde bir tampona atılma işlemi yazılımsal olarak programmer tarafından  yapılmıştır diye düşünüyorum. Task esnasında ilgili buffer veya flag kontrol edilip, görev varsa icra edilmeli, yoksa devam edilmeli diye düşünüyorum. Bu durumda bahsettiğiniz olaya gerek kalmaksızın, taskın kendisini INT rutini gibi kullanmış olursunuz ki oldukça da etkin olur. Yanlışım/hatam varsa konuyu bilen arkadaşlar düzeltir, bende öğrenmiş olurum.
Önerdiğim task interrupt tarzında bir task değil, normal task olarak düşünelim, yani interrupt kullanmadan düzgün veri akışı sağlamk istiyorsak 833 us de bir  taskı işlememiz lazım değil mi?

Alıntı YapTask esnasında ilgili buffer veya flag kontrol edilip, görev varsa icra edilmeli, yoksa devam edilmeli diye düşünüyorum
Buradan anladığım getc için düşünürsek uart modülünün flaglarını başka tasklarda kontrol mü edicez ?