FreeRTOS Interrupt Service & BareMetalSystem FreeRTOS Entegrasyonu

Başlatan kageja, 27 Ekim 2015, 11:18:06

kageja

Merhaba Arkadaslar,

RTOS uzerine calismalarima devam ediyorum. Ayni anda birden cok konuda yurudugum icin bazi noktalarda size danismak istedim.
BareMetalSystem uzerine kurdugum bir programim var. Ancak FreeRTOS'a gecis yapacagim. BareMetalSystemdeki interruptlari mi service routin'leri mi modifikasyon yapmadan FreeRTOS'da da kullanabilir miyim yada ne gibi modifikasyonlar yapmak gerekecek.
BareMetalSystemde yazdigim kodlari oldugu gibi terk etmek istemedigim icin kolayca bir entegrasyon yolu ariyorum.

Saygilarimla iyi calismalar.

X-Fi

Söylediğiniz şey mümkün değil FreeRTOS interrupt servis rutinlerine dahil edilmeli çünkü sistem çalışırken max priority opsiyonunu interruptlardan önde tutar. Servis rutinlerini tasklara implement etme işi çok kolay değil. Yazılımı görmek tasklara parçalamak gerekir. Ezbere konuşulacak bir iş değil.

Bana sorarsanız projeye baştan başlayın RTOS ve özellikle FreeRTOS yazılım akışı ile state machine yazılımlar arasında uçurum oluştu ben bile doğru kullandığımdan şüpheliyim. Öğrenme aşamasını basite almayın.

İyi çalışmalar.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

kageja

Oh my god korktugum sey basima mi geldi yoksa.

Simdi soyle anlatayim benim baremetalsystemde yazdigin kod zaten tasklara bolunmus durumda her task kendi icinde interruptin set ettigi flaglari kontroller ediyir.

En azindan ISRleri FreeRTOS'a dahil etsem, tasklarin kendisini ve driverlarinida projeme dahil etsem bir butunluk olusturamaz miyim, Cunku su anda zaten FreeRTOS ile baska kaynaktan gelen driverlari  kullaniyorum, o driverlarinida ve tasklar calisiyorsa benim driver ve tasklarimda calisir tek nokta ISR'leri FreeRTOS rutinine dahil etsem lazim yanlis mi dusunuyorum.

Cevabiniz icin cok tesekkur let saygilarimla.

Burak B

   ISR' leri öyle kafana göre RTOS' a dahil edemezsin. Global variable kavramını RTOS ile kullanmak cesaret ve bilgi gerektirir. Bunun yerine Semaphore, Mutex, Queue, Mailbox, Event, Timer v.b. kavramları iyice incelemeli ve ne olduklarını çok iyi anlamalısın. Ayrıca basitçe kullandığın RTOS' un nasıl task switch yaptığını ve heap ve stack yönetimini en basit haliyle bile olsa bilmende fayda var.

   Bir diğer hususta ISR' ler içerisinden üst katmanlara sinyal vermek dikkat gerektiren bir husustur. Interrupt oluşturan her çevre birimi için bir driver yazman doğru olacaktır. Bu driver içerisinde semaphore oluştururken eğer varsa ISR' ler için olanları kullanmalısın. Diğer yandan RTOS kullanacaksan şunu unutma eğer işlemcinin tasjk switch yapmasına izin vermezsen işlemcin gereksiz yere çok yorulur hatta donar.

   Basitçe eğer herşeyi doğru yaparsan 72 Mhz bir Cortex-ARM ile aynı anda Ethernet, CAN, UART, I/O Scan v.b. gibi çevrebirimlerden veri alman ve basitçe işlemen MCU' nun yaklaşık %5-%10 arası bir zamanını harcar ve geriye %90 IDLE time oluşur. Buda başka işler için gayet yeterli bir süre.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

kageja

Hocam Cok Tesekkur Ederim Gayet Aciklayici konustunuz RTOS konusunda henuz daha yeniyim arastirmaya nerden baslayacagim konusunda cok degerli KeyWordler verdiniz bunlar benim icin cok onemliydi.

Yapicagim is uart'tan veri geldikce geri paket gondermek ve surekli olarak i2c'den data okumak. Bunlar icin soyle bir sema dusunmustum ayni anda bu 3 servis surekli calistiririm diye dusunuyordum. ISR flaglari set/unset edicek. Tasklar'da ona gore isleyecek.
Heap ve stack olayi icin scatter file'da bir seyler duzenlememe gerek yok galiba RTOS onu hallediyor herhalde RTOS Config'lerini yaptiktan sonra. Ben daha once 8 MB external flash hafiza kullanmistim scatter file icinde size'ini ve adresini belirtiyordum alloc ile otomatik heap'den yer ayirmasi icin ama yine baremetalsystemdi RTOS degildi.
Queue,Mutex,Semaphore bunlari daha once hic duymadim hocam ne yalan soylim. Arastiracagim, hizli ogrenme acisindan bildiginz turkce kaynaklar varsa guzel olur literatur taramasi kismini hizli atlamis olurum.

Saygilarimla.


Burak B

Türkçe kaynak arayışına pek girmediğim için bildiğim Türkçe kaynak yok. Ancak aşağıdaki linklerden bazı konulara açıklık getirebilirsin.
FreeRTOS FAQ - Memory Usage, Boot Times & Context Switch Times
FreeRTOS Customisation
Quick Start Guide
Inter-Task Communication

Queue
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

kageja

Tekrardan Tesekkur ederim hocam az cok aydinlandim.

Yapi olarak altta belirttigim sekilde ve sizin dikkat etmem gerektigi konularda isi duzgun yaparsam oluru var diyorsunuz.
Dereyi gormek lazim ki pacalarimiz islanmasin :) :)

Saygilarimla.