Thread overview
Gerçek Zamanlı Benzetim
Apr 15, 2012
Salih Dinçer
Apr 16, 2012
Salih Dinçer
Apr 16, 2012
erdem
Apr 18, 2012
Salih Dinçer
April 15, 2012

Merhaba,

Bir süredir PIC mikrodenetleyici üzerine kapsamlı ama basit adımlar ile ilerleyen bir çalışmaya kafa yoruyorum. Benim için eş zamanlı programlama adeta ilaç oldu. Tabi Zafer'in yönlendirmeleriyle; bu vesileyle teşekkür ederim kendisine...:)

Ancak zamanlama konusunda takıldığımı hissettim. Bu yüzeden projeden bağımsız denemeler (çeki düzen vereyim, çok yakında!) yapıyorum. Böylesi daha kolay oluyor çünkü her zaman geniş açı bakmak sorunu çözmüyor. Biraz daha küçük birimlere, gerekirse bir döngü içinde küçülen (fractal gibi) bir şekilde devam ediyorum. Neyse, çok uzattım ve böyle bir girişten sonra sormak isterim:

Acaba bir at gibi güçlü bilgisayarların hızını, tavşan süratinde zıplayarak kullanabilmek için Thread.sleep() haricinde akıllı araçlarımız var mı? Yani hassas ölçümlerden ve gerçek zamanlı benzetime "gerçekten" çok yaklaşmak istiyorum da. Bu konuda, Erdem'in şu başlığından (http://ddili.org/forum/thread/554) yararlanmaya çalıştım ve hala çalışıyorum...

Bu arada, herkese iyi haftalar dilerim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 16, 2012

Teşekkürler Ali hocam, yani kısaca:

Multitasking denen şeyler birden fazla çekirdekli işlemcilere rağmen hikaye ya da programcıya, hikayeyi gerçeğe dönüştürmek için fazla sorumluluk yüklüyor...:)

Yine de her geçen gün iyiye gidiyor ki eskiden donanım sürücülerinden (sonuçta onlar da bir yazılım) cevap gelmemesi durumunda, işletim sisteminin durması kaçınılmaz olurdu. En basit örneği disk okumaları ki Windows'un disket okuma (daha doğrusu okuyamama) hikayesi meşhurdur. Hoş hala optik disklerde de benzer hadiseler olabiliyor!

En iyisi biraz daha uygulama yapayım. Bu konuda kod paylaşacağım inşaallah...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 16, 2012

Alıntı (Salih Dinçer):

>

gerçek zamanlı benzetime "gerçekten" çok yaklaşmak istiyorum

Linux ve Windows gibi preemptive multitasking sistemlerimizde bunun kesin bir çözümü yok.

Bir kere işletim sistemi iş parçacıklarını zaman dilimlerinde işlettiği için hassasiyet o işletim sisteminin zaman diliminin uzunluğu ile sınırlı.

Zaten aklına gelmiştir ama bazen işlem yapma zamanımıza çok az kalmışsa elimizde bulunan program işleyişini sleep() ile işletim sistemine geçirmek yanlış olabilir. Ne kadar az bir süre beklemesini söylersek söyleyelim işletim sistemi bizim sleep() isteğimizi görünce bizi en az o kadar uyutacaktır.

O yüzden, öyle durumlarda işlemciyi meşgul ederek beklemek daha doğru olabilir:

   while (!zamanGeldi_mi) {
       // ... zamanı ölç ...
   }

Aynı mantığı std.parallelism'in spinForce()'u da uygular:

http://ddili.org/ders/d/kosut_islemler.html

Yani zaman gelmek üzereyse sleep() yerine while() gibi bir döngüde beklemek daha iyi olabilir. Tabii o da tam çözüm değil çünkü işletim sistemi biz while()'da dönerken de duraksatabilir.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 16, 2012

Mikrodenetleyici ile çalışıyorsan örneğin saat frekansını 400 kHz olarak ayarlarsan bu da 2.5 mikrosaniyelik bir peryoda eşittir. Yani mikro denetleyicinin saat sinyallerini kullanmak daha sağlıklı olmaz mı. Belki de tam olarak ne yapmak istediğini anlamamış olabilirim.

Bu aralar sadece misafir oyuncu olarak forumu takip edebiliyorum. MIT'nin 6.002x kursunu takip ediyorum. Gerçekten de dedikleri kadar varmış ;-)

Öyle sorular var ki hem yüksek matematik ("calculus") birinci, ikinci dereceden türevsel denklemler gerektiriyor hem de sayfalarca kağıt harcamak gerekiyor. Ama gene de zevkli olduğunu söyleyebilirim.

Elektronik konusunda çok çalışmam lazım çok :-p

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 16, 2012

Alıntı (Salih Dinçer):

>

Multitasking denen şeyler birden fazla çekirdekli işlemcilere rağmen hikaye

Öyle diyorsan öyle olsun. ;) Zaman dilimlerine hükmedemiyoruz diye mi öyle söylüyorsun? Bence çok az sayıda program için önemli olan bir konu o.

Alıntı:

>

ya da programcıya, hikayeyi gerçeğe dönüştürmek için fazla sorumluluk yüklüyor...:)

Sen nasıl olmasını isterdin? :) Bütün sorunlar olayın doğasından kaynaklanıyor. Örneğin iki iş parçacığının hem aynı anda aynı veriyle oynamalarını istiyoruz hem de bunun güvenli olmasını istiyoruz. Olabilir mi?

Aslında kullandığın işletim sisteminin real time (RTOS) olmamasından şikayetçisin. O zamam tamam, ve çözümü kolay: bir RTOS kur. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 18, 2012

@ali, RTOS üzerinde çok eskiden tek disketlik QNX'leri denemiştim. Ancak bu konuda herhangi bir uzmanlığım yok. Aslında Java gibi platformdan bağımsız şeylere ilgimi kayıyor. Bir şeylerin "universal" olması hoşuma gidiyor sanki...:)

Alıntı (erdem:1334601231):

>

Mikrodenetleyici ile çalışıyorsan örneğin saat frekansını 400 kHz olarak ayarlarsan bu da 2.5 mikrosaniyelik bir peryoda eşittir. Yani mikro denetleyicinin saat sinyallerini kullanmak daha sağlıklı olmaz mı. Belki de tam olarak ne yapmak istediğini anlamamış olabilirim.
Aslında mikrodenetleyicinin hızıyla koşut (parallel) yazılımlar bütünü üzerine çalışıyorum. Dolayısıyla dediğin gibi bir olay söz konusu olacak. Belki de her şey uyum, eş zaman (synchrone) meselesi ve zamanla oturacaktır. Bu kadar kafaya takmasam iyi olacak...

Alıntı (erdem:1334601231):

>

Elektronik konusunda çok çalışmam lazım çok :-p
Bir çok konuda böyle ama bence Elektronik gibi branşı çok mesleklerde uzmanlık dalı seçmek çalışmaya göre öncelikli olduğunu söyleyebilirim. Çünkü dipsiz bir kuyuyu oluşturan taşların arasındaki toz tanelerini araştırıyoruz. Mutlaka bir yönden itibaren aşağıya inerek taramalıyız. Yoksa kuyunun duvarlarını 360 derece taramak öyle bir vakit alır ki hala yüzeye çok yakın olduğumuz için kuyunun derinliği bizi ürkütebilir...:)

Tabi bir de olaya ters yönden bakmak da olası. Kuyu derinliklerine fazla inmeden yüzeye yakın yerde dolaşarak güvenli bir limana yakın olmak gibi. Biraz karışık oldu (betimlemenin betimlemesi!) ama anlayan anladı zannedersem?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]