Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

RTOS nedir ?

Başlatan muhittin_kaplan, 12 Ocak 2011, 21:08:27

mufitsozen

Alıntı yapılan: gerbay - 16 Kasım 2011, 18:45:27
hata direk priority inversion kaynaklı ve yazılımcı hatası..

zaten pathfinder ın da işletim sistemi olan VxWorks de bu durumu önlemek için mutex create ederken uygun parametreler var, eski sürümlerde de var;

mutexHandle = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE);


diyerek mutex semaphore oluşturmaları gerekiyordu ama aslında problem yazılımcı hatası.. Eğer mutex i yukardaki parametreler ile oluştursaydı bu durumda deadlock ın önüne geçmek için düşük priority li taskın kritik bölgede priority si yükseltilecekti ve bu şekilde deadlock a girilmeyecekti.. 
yani şu linkte anlatılan özellik kullanılarak bu durum önlenecekti;
http://en.wikipedia.org/wiki/Priority_inheritance

sonuçta olay yazılımcı hatası..

hayir degil, cunku sistem calismaya devam ediyor, bilgi kaybetmiyor. hatayi bulana kadar da bazi gunler verilen komutlari yerine getirmesede sistem calismaya ve haberlesmeye devam ediyor. Yoksa hem hatanin troubleshoot edilmesi hemde duzeltilebilmesi mumkun olamazdi.

Restart/reboot ederek sistemin hatadan en az zararla cikip tekrar operasyonel olmasini sagliyorsun. Hata durmunun neden kaynaklandigi, root cause vs baska birsey. Dusunku boyle birsey ucakta oldu, birkac  sn restart/reboot ediyor ve sistem yine operasyonel oluyor.

Marstaki cihaz bu hata durumunda bile dunya ile irtibatini kaybetmiyor, bilgi alip veriyor vede yeniden duzeltilmis programi veya corrective patch yuklenebiliyor. Buda sistemin error condition'i anlayip restart etmesi ile mumkun!
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

#76
Alıntı yapılan: gerbay - 16 Kasım 2011, 19:15:40
ya programcı aynı hatayı dünya ile iletişim yapılıp kodu alıp yükleyen kısımda yapmış olsaydı?

gerçi o durumda da rebootdan sonra belki aynı duruma düşmezdi..

watchdog ile yapmak bana daha uygun gibi geliyor

O zaman sende JPLde xalisip uzaya giden robotlar filan programlama!  ;)

;D

Saka bir yana bir cok kritik sistemde zaten reliability icin redundant birimler kullanilir ve bunlar active/standby yada active-active pairler halinde calisir. Dolayisi ile bir hata durumunda restart/reboot yapilirken bile digeri hemen oburunun islerini alir ve deam eder. Yoksa 3-5milyon LOC olan bir telefon santralinda senede 15 dakika downtime nasil yaparsin!

Bircok kereler printerdan error mesaji cikmasa sistemin active-standby switchover ettigini vs anlamazsin bile.

yani demem oki watchdog RTOS ile led yak, butona bas daha karisik ne olabilirki gibi bir arguman. Cok buyuk cok karisik sistemlerde hatadan cikmak, servisi her zaman saglamak icin cok karisik error handling mekanizmalari kurmak lazim. Pathfinderdada dikkat edersen error handler restart etti diyor. Yani bir cok subsistem var, ve bunlar dogru islem icin durmadan sagi solu kontrol ediyorlar. Haa, active/standby yada active-active pairler birbirileri ile durmadan heartbeat sinyalleri degis dokus ederek zaten bir cesit karisik watchdog mekanizmasi yapiyor ama, o bu konunun disinda
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Andromeda

sanırım  anladım..
RTOS bir programlama tekniği, donanım ile alakası yok...
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

DataDiver


z

Interrupt geldigini ve bunun kabul edildigini, interrupt rutininde Ornegin ADC den okunan degerin bir degiskene aktarilacagini varsayalim.
Fakat bu degisken daha onceki tasklardan birisi tarafindan kilitlenmis olsun.

Boyle bir durumda ne olur? RTOS'larin bir cozumu varmidir?

Olaylarin bu sekilde gelismesi kullanicinin programi yanlis bir mantikla yazmis olmasindan mi kaynaklanir?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

Alıntı yapılan: bunalmis - 17 Kasım 2011, 15:02:22
Interrupt geldigini ve bunun kabul edildigini, interrupt rutininde Ornegin ADC den okunan degerin bir degiskene aktarilacagini varsayalim.
Fakat bu degisken daha onceki tasklardan birisi tarafindan kilitlenmis olsun.

Boyle bir durumda ne olur? RTOS'larin bir cozumu varmidir?

Olaylarin bu sekilde gelismesi kullanicinin programi yanlis bir mantikla yazmis olmasindan mi kaynaklanir?

@bunalmis hocam, normalde interrupt handler ile alinan degerler asenkrondur. Dolayisi ile baska bir taskin onu bloke etmesi yanlis bir tasarim olur. dogrusu, degere erismek isteyenler degerin alinip alinmadigini bir semaphore yada mutex ile bekler. ISR deger gelince bunu mutex yada semaphore arayicilig ile taska bildirir. Yani bloke olan tasktir. Eger gelen deger cok sik ise, ve boyle basit bir mekanizma ile bilgi aktarimi saglanamiyorsa bir queue, mailbox vb mekanizma ile ISR degerleri FIFO Q'ya push eder, task(ler)de gelen degerleri pop eder. Boylece asenkron bir eventi/degeri tasklar ile senkron yapabilirsiniz. 

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

tuggy


Erol YILMAZ


z

En yüksek öncelikli taskımız aşağıdaki gibi ve çalışıyor olsun.

void Task1()
{
}

Önceliği düşük diğer tasklar geçmişte bir şekilde çalışmış, yarıda kalmış, bir olayları başlatmış vs olsun.

Yukarıdaki çalışan yüksek öncelikli taskın işletimi yarıda kesilip, daha düşük öncelikli taskların çalışması mümkünmüdür?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

vsalma

Sistem preemptive ise, yüksek öncelikli task mutex beklemeye sleep e vs girmediyse yaptığı iş kesilmez. Interruptlar kesebilir tabi.

z

#85
Kusura bakmayın while içinde yazacaktım unutmuşum. While var varsayarak tekrar ele alırmısınız?

void Task1()
{
       while(1);
}
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

controller

"priority boosting" ile mümkün. round robin öncelik seviyesi aynı tasklar arasında geçiş yapar.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

z

Alıntı yapılan: gerbay - 18 Kasım 2011, 17:39:37
@vsalma  hocamın yazdığı gibi eğer preemptive ise sürekli olarak o task çalışır interrupt lar dışında.. eğer round robin ise diğer task lara da geçilir..

Peki preemptive ve round robin den hangisi daha iyidir yada ne zaman hangisi tercih edilir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mufitsozen

Alıntı yapılan: gerbay - 18 Kasım 2011, 18:08:18
RTOS lar preemptive olmalı.. zaten ciddi RTOS lar default olarak preemptive çalışırlar..

sevgili @gerbay, bu tam olarak dogru degil. RTOS kullanirken temel prensip tasklarin tepki zamanlarinin predictable olmasidir. Eger sistem cok karisik degilse (task sayisi az ise, ve zamanlamalardaki kisitlar cok keskin degilse) priorityli round-robinde problem cikartmayabilir.

yani su yada bu metodun iyiligi degil, sistemin uygulamanin kisitlarina uygun olup olmadigi onemli. illa preemptive olacak vs diye gereksiz buyukluk ve komplex bir sistem tasarlamayada gerek yok.


Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

z

Preemptive calisan sistem neden daha buyuk ve komplex oluyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com