STM32F4 RTOS

Başlatan Farukc, 18 Temmuz 2013, 16:50:15

Kaanx

#15
Alıntı yapılan: camby - 19 Temmuz 2013, 15:02:15
işletim sistemi. N tane işin uyumlu bir şekilde bir arada çalışmasını sağlamak. Windows ortamında ctrl+alt+del e basınca listelenen işlemlerin bir arada uyumlu bir şekilde çalışmasını sağlayan işletim sistemdir. Önceliklerine göre sürekli ve sırayla bu işlemlerle ilgilenir.

Dezavantajları da var , düzgün kurgulanmamışsa mp3 çalarken yada tft'ye data yollarken task yöneticisi , sen bekle biraz da şurada daha önemli bir işim var diyebilir. Eski PC'lerde PC kastığında mp3 yavaşlıyordu diğer tasklar etkileniyordu vsvs.

Fakat işlerimde ben de RTOS kullanmadım henüz. DMA ve FSMC şu an için benim adıma sağa sola koşturuyor.

Sureklı donuyor ortalıkta Real Time Operating systemler Ben hawkboardla çalısıyorum bu aralar  linux Kernel debug işlemleri üzerindeyim Kernel yerine böyle RTOS kurup işlerimi yapabilir miyim amaç aynı olucak zaten sadece zamandan kazanc için ve tabi ne kadar stabil çalısabilir işlmeci üzerinde yapılandırmalarını denemk lazım bir uygulama üzerinde. Sanırım bu tarz RTOS lar daha düşük yapılı işler için. Hep aklıma takılır neden RTOS kullanırız bize sagladıgı nedir diye sanırım biraz oturmaya başladı. İlk başta biz biraz iteliyoruz bunu sonra alıp gidiyor. Arkada koşan tasklar bize yardımcı mı oluyor o zaman ? 

mesaj birleştirme:: 19 Temmuz 2013, 15:49:53

Alıntı yapılan: Farukc - 19 Temmuz 2013, 15:05:10
En önemlisi multi tasking özelliği çok hayat kurtarıcı bir olay yoksa bir kısır döngü içinde programı kontrol etmek zor oluyor. Örneğin ekrana bişey yazdıracaksınız mesala gelen voltaj önce voltaj okunur sonra yazdırılır. Ama rtos birazdaha farklı daha gelişmiş uygulamalarda mesela bir devrede ethernet, rs232, lcd vga gibi bir çok giriş çıkış var fakat sizin ethernettten gelen bilgiyi gelir gelmez okumanız lazım. Ama o sıradada Lcdye rs232 değerleri yazdırılacak işte bu noktada rtos süper bişey oluyor  ;D

mesaj birleştirme:: 19 Temmuz 2013, 15:07:20

Arkadaşlar bide bu kodları çalıştırabilmek için c:/keil/arm/board/st/stm32f4 discovery dizininde rtx bilinky adlı klasör var oradaki RTX_Conf_CM.c adlı dosyayı proje klasörünüze koplyalayıp projeye ekleyin yoksa çalışmaz.

Yani task lar arkada sureklı calısır konumda ve hazı bekliyorlar dediğiniz gibi rs232 den bir bilgi gelıyor onu lcd ye atıcam mesela o bölgede calısan tasklar anında onu alıp ekrana getırıyor ve bunu ekrana getırırkende demıyor mp3 caldırmayı durdur da ben sunu bi lcd ye yazayım aynı zamanda lcd ye yazı gelıyor hemde mp3 calıyor vs vs vs bir cok işlem olmaya devam ediyor. Yani bu task ları nasıl olusturuyoruz kernel dedikleri bize bunu saglıyor olmalı .

magnetron

hocam

bu yakın zamanda birçok linux çalıştıran SBC kart çıktı

burdaki linux sürümleri de RTOS mudur ?

yani Real Time OS midir ?

Farukc

Alıntı yapılan: magnetron - 19 Temmuz 2013, 16:25:08
hocam

bu yakın zamanda birçok linux çalıştıran SBC kart çıktı

burdaki linux sürümleri de RTOS mudur ?

yani Real Time OS midir ?
Demek istediğinizi anlamadım. Kusura bakmayın..

magnetron

gerbay hocamın verdiği cevabı sormuştum

benim başka bir sorum var

madem linux RTOS değil o zaman neden

bu beaglebone vesaire SBC ler ille de linux ile satılıyor

mis gibi RTOS olan WinCE neden desteklenmiyor  ?

Icarus

RTOS "verimli" demek değildir.
RTOS "cortex'lerin işletim sistemi" değildir.
RTOS "yüksek hızlı" demek değildir.
RTOS "kolay ve kompakt" kullanım demek değildir.
RTOS'un ne işe yaradığını bilmiyorsanız ihtiyacınız yoktur

hasankara

rtos hakkında pek bir bilgimin olduğu söylenemez. vermiş olduğunuz örnekleri inceleyince rtos hakkında kafamda birşeyler canlanmış durumda. bende kendi çapımda tek çekirdeği olan bazı mikrodenetleyiciler üzerinde multitasking yaptırabiliyorum, kendimce multitasking hakkında bazı standartlar edinmiş durumdayım. bunun üzerine bir kaç soru sormak istiyorum.

1. RTOS ta farklı "__task" lar arasında çekirdek nasıl bir geçiş sağlıyor ? bu rastgele mi oluyor? yani diyelim ki bir task içerisinde kritik bir kod işleniyor ve başka task lar arasında geçiş olmasını istemiyorsak, şeklinde düşünmeme sebep oldu bu soru.

2.
main(){
hazirlik();
timer_aktif();

        // __task 1
      while(1){

      }

        // __task 2
      while(1){

      }

      .
      .
      .

        // __task n
      while(1){

      }
}
 interrupt timer(){
for(k=30; 0<k; k--)ProgramHafizasi[task][k]=CallStack[k]; // mevcut task için yığın kaydet

if(task<n)task++; else task=0; // sonraki taska geçiş yap

for(k=30; 0<k; k--)CallStack[k]=ProgramHafizasi[task][k]; // geçiş yapılan task yığınlarını yükle
}


şeklinde bir yapı oluştursak buna rtos demek doğru olur mu?

Yuunus

kritik olan işleme öncelik sağlayabiliyorsunuz.

Kaanx

Sonuc olarak arkada çalışan ve sistemi yoran bir sürü task olucak dimi hocam ? hasan arkadaşımızın verdiği 2. örnek gibi işler durumda mı oluyor ?

Yuunus

Evet arkada denetlenen birsürü task olacak ancak diğer tasklar çekirdeği ne kadar yoruyor bu da önemli harıl harıl çalışan bir işlemciyi yönetmek kolay değil karşına birton sorun çıkabilir bir de işin içine interruptlar girerse işler iyice çığrından çıkıyor. tasklar arasında öncelik olduğu gibi intrpr lar arasındada öncelikler var biri diğerinin işini bozabilir. çalıştığınız kitin manuelini iyice hatmedip sonra yazacapınız kodları ona göre yönetmeniz daha akıllıca. ingilizceniz varsa stm nin "Building Applications with RL-ARM ( linkini bulamadım)" isminde bir dokumanı var onu incelerseniz ve bol bol örnek yaparsanız size daha faydalı olur.

Kaanx

Bu kadar işlem yerine sabahtan beri direttğim kernel yuklemek daha mantıklı degıl mı ?yada u-boot yapmak ?

Yuunus

...tercih meselesi tabiki ama kullanmayı öğrendikten sonra vazgeçmekte zor oluyor özellikle kritik işlemlerin varsa! şunuda unutmamak gerek kernel yükleyerek kodlarını başka yazılımlara emanet ediyorsun ama rtos ile kendi kontrolun altında oluyor. Belki kernelde de task yönetimi vardır, bilmiyorum denemek gerek.

Kaanx

Dediğinizde haklısınız hocam kernelden sonra bir dosya sistemi koşturmak gerekiyor ama koşan tasklar kernelde mi yoksa o sonradan başlayan dosya sisteminde mi koşuyor bilmiuorum ?

Tagli

Dosya sistemi koşan birşey değildir, yazılımlar, daha doğrusu process'ler veya thread'ler koşar. Yazılımlar ise kernel bölgesinde veya kullanıcı bölgesinde çalışabilir. Normalde uygulama yazılımları kullanıcı bölgesinde çalışır, aynı bilgisayardaki genel yazılımlar gibi. Bunlar process (süreç) olarak adlandırılır. Bunun dışında, process'ler de kendi içlerinde thread (bunun karşılığı Türkçe terimi unuttum) adı verilen ufak parçalardan oluşuyor olabilir. Linux kernel'inin bakış açısına göre bu ikisinin çalışması arasında pek fark yok ama özellikle hafıza paylaşımı konusunda bazı farklar bulunuyor.

Linux kernel'inin real time versiyonları da var. Ama korkarım bu konudaki bilgim sadece var olduklarını bilmekle sınırlı. Bu kernel'ler derlenirken, kernel konfigürasyonu sırasında task switching ile ilgili bölümde real time çalışma istendiğinin belirtilmesi gerekiyor. Uygulama programlamasının nasıl olacağı ile ilgili hiçbir fikrim yok.
Gökçe Tağlıoğlu

Kaanx

Kernel üzerinde yaptıgım compile işlemlerinden sonra kısaca sunu anladım hocam boş bir cihazı u-boot luyoruz daha sonra kernel ı bir filesystemla attach ediyoruz ve bundan sonra işlemlerimiz koşmaya başlıyor. bu sırada dediğiniz gibi bu olay bize tam bir RTOS sağlamıyor. DSP işlemcilerle koşulması daha iyi sonuçlar cıkardıgını duydum. Örneğin Ti in SYS/BIOS yapıları yada starterware yazılımı basit bir  RTOS sanırım tabi burada DSP işlemcininde özelliği işe hız katıyor sanırım anladıgım kadarıyla. Kernel derlenirken lınux üzerinde cross compıler kullanarak olusturuyoruz vmlinuxla start dosyalarını olusturms oluyoruz. Derleme işlemi make menuconfig ten yapılıyor burada kernelin kullanacagı özellikleri ve cihazlarla olan baglantıları var kısaca hersey orada tanımlanıyor örnegın usb bırımını eth bırımını buradan acıyoruz. Sımdı bu durumda actıgım bu birimlerin koşması için mi tasklar arkada devam ediyor.mesela suan bilgisayara baglı hiç bir usb yok ve o birimden herhangi bir cıktı almıyorum ama bagladıgımda usb için olana driver tetiklenip o bölüme ait task mı bunu bize getiriyor ? Ve bu kosulan threadler veya gelen interruptlar neye göre belirleniyor. ? işlemcilere göre mi yoksa bunlar zaten hali hazırda olan işlemci buna göre mi yapılandırıyor kendi ni ?