Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

pic ile aynı anda iki işlem

Başlatan yusuffyk, 31 Temmuz 2012, 00:09:36

atioky_216

Alıntı yapılan: Allegro - 31 Temmuz 2012, 09:28:37
Öncelikle terminolojiye geçmiş doğru kelimeyi yakalamak lazım...
Bahsettiğin şey "Multitasking"  yani çok görevlilik diye geçiyor,

İlk zamanlarda yaptığım projelerde bu problemi birçok farklı şekilde yaşadım,

Bu konu ile ilgili olarak çok fazla kaynak old. düşünüyorum:

http://www.eetimes.com/design/automotive-design/4006764/Embedded-multitasking-with-small-MCUs-Part-1--State-Machine-Constructs
http://www.eetimes.com/design/automotive-design/4006771/Embedded-multitasking-with-small-MCUs-Part-2--Cooperative-vs-pre-emptive

Özellikle Part-1 kısmı senin için çok anlamlı olacaktır.
STATE MACHINE yapısını kullandığında problemlerinin büyük kısmını rahatlıkla çözeceğini söyleyebilirim.

Embedded Multitasking : Keith Curtis
http://www.4shared.com/office/rExIUNwQ/Embedded_Multitasking_with_Sma.html

Bu kadarcık iş için multitaskinge gerek var mı?
Bir kaç iş için C yazılımda (PC) kullanmışlığım vardı , bu iş için MPI (message parsing interface) kütüphanesi ile bazı döngüleri olsun işlemleri olsun çekirdeklere paylaştırıyordum. Arastırdığım kadarı ile çok cekirdekli ARM benzeri yapılar yada TI nın  telefonlarda kullanılan çok çekirdekli  OMAP benzeri işlemciler için multitasking programlamada buna benzer yapı ve kütüphaneler kullanılmakta..


Erol YILMAZ

Çok görevli uygulamaları geliştirmek için bir stratejiye ihtiyaç var. (Multitasking)

Sanırım başka şansı da yok arkadaşın...

Eren Eraslan

RTOS olayını araştır hocam .. Bu iş için ideal.. ve ccs de filan örnek çok kod var
insanın içine işleyen şarkılar ;  https://soundcloud.com/reeraslan

yusuffyk

#18
öncelikle yorum yapan herkese teşekkürler, de derdimi anlatamamışım ona yanıyorum
birincisi tamam aynı anda çalışmadığını ama küçük aralıklarla çalışarak gözde böyle bi algı oluştuğunu bende biliyorum, daaaa bunu söyleyince ne değişti onu anlamıyorum, bi ısrarla tekrar ediyorsunuz. tamam bizde biliyoruz, ama bi şekilde anlatımı yalınlaştırmak lazım, o an aklıma böyle anlatmak geldi.
ikincisi if ile yapmak istemediğimi iki kere söyledim, ben iki ledle başlayıp başka şeyler yapmak istiyorum dedim hala if diyorsunuz,
multitasking, rtos, interrupt bunları anaahtar kelime olarak alıp araştıracağım,
bu konularda elinde örnek kod olanlar varsa paylaşırsa da sevinirim.
başka tavsiye edeceğiniz birşey varsa memnuniyetle dinlerim, tavsiyelere açığım
tekrardan yardımcı olan herkese teşekkürler.
edit: ccs c ile programlamaya çalışıyorum, unutmadan ekleyeyim
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

yamak


cinque

if e neden karşısın?  :) İlerde düşündüğün prosesler için if in içine sadece on off kontrolün yanı sıra aralık kontrolü yada state kontrolü yapılabileceğini bildiğini düşünüyorum. Çok büyük projelerde paralel işlem fazla kullanacaksan farklı yapılar kullanman gerekir zaten(cpld fpga gibi). bunun haricinde PIC i geçtim yüksek hızlı mcular mevcut istedğin paralel çalışma gibi gösterme olayını rtos kullanarak yada interruptları kendin yazarak yapabilirsin. Ama duymak istediğin cevap tahminen şu; tek çekirdekle tek işlem yapılır sadece. Sen 2 işlemi aynı anda PICe yaptıramazsın.   

yusuffyk

FPGAyı araştırıyorum
yaw tamam arkadaş, eyvallah sağolasınız da aynı anda olmuyor ben de biliyorum, anlatamadık derdimizi
en yalın şekilde son kez açıklamak istiyorum.

ana program döngüsü düşün
bu program döngüsü işleniyor,
sıcaklık okunsun, lcd de tarih saat göstersin,
sonra iki buton ve bir de pot olsun,
butonlara basıldığında program devam ediyor ama butona basılınca ledi yakabilir, motor çalıştırabilir, birşey yapıyor yani
diğer butonda aynı şekilde
potla oynayıncada ana programla beraber başka bir işlem yapabilir, ledin şiddetini ayarlar, motorun devir hızını ayarlar falan

burdaki amaç ana program çalışırken ekstra işlemler yapıldığında programın kesintiye uğramadan devam etmesi
ve şimdi lütfen if demeyin bana :D
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

coco

picin interrupt pinlerini kullanilarak yapilabilr belki.

atioky_216

#23
Alıntı yapılan: yktronik - 01 Ağustos 2012, 18:18:53
FPGAyı araştırıyorum
yaw tamam arkadaş, eyvallah sağolasınız da aynı anda olmuyor ben de biliyorum, anlatamadık derdimizi
en yalın şekilde son kez açıklamak istiyorum.

ana program döngüsü düşün
bu program döngüsü işleniyor,
sıcaklık okunsun, lcd de tarih saat göstersin,
sonra iki buton ve bir de pot olsun,
butonlara basıldığında program devam ediyor ama butona basılınca ledi yakabilir, motor çalıştırabilir, birşey yapıyor yani
diğer butonda aynı şekilde
potla oynayıncada ana programla beraber başka bir işlem yapabilir, ledin şiddetini ayarlar, motorun devir hızını ayarlar falan

burdaki amaç ana program çalışırken ekstra işlemler yapıldığında programın kesintiye uğramadan devam etmesi
ve şimdi lütfen if demeyin bana :D

O zaman iş multitasking işi yanı ekrana 50 ms ile bastırıp bekleme süresi koymadan o bekleme suresinde bazı hesaplamalar yaptırılır vs.. Bunun için bol bol algoritma denemesi gerekiyor gibime geliyor ve bu iş te if"lerden geçiyor :D onları küçümsememeli. Yani bunu yapmak için mesela C ile çalısıyorsan extra kütüphanesinden bilmem nesine araştırmak yerine yaklaşım mantığını kapmalı..

drmp

eğer if kullanmamak istiyorsanız basit bir kod işinizi çözecektir
portx,y ;input port
porta,b;output port
c 'ye göre kendiniz uyarlayabilirsiniz

port a,b=port x,y

kolay gelsin

berat23

Alıntı yapılan: yktronik - 01 Ağustos 2012, 11:09:33
öncelikle yorum yapan herkese teşekkürler, de derdimi anlatamamışım ona yanıyorum
birincisi tamam aynı anda çalışmadığını ama küçük aralıklarla çalışarak gözde böyle bi algı oluştuğunu bende biliyorum, daaaa bunu söyleyince ne değişti onu anlamıyorum, bi ısrarla tekrar ediyorsunuz. tamam bizde biliyoruz, ama bi şekilde anlatımı yalınlaştırmak lazım, o an aklıma böyle anlatmak geldi.
ikincisi if ile yapmak istemediğimi iki kere söyledim, ben iki ledle başlayıp başka şeyler yapmak istiyorum dedim hala if diyorsunuz,
multitasking, rtos, interrupt bunları anaahtar kelime olarak alıp araştıracağım,
bu konularda elinde örnek kod olanlar varsa paylaşırsa da sevinirim.
başka tavsiye edeceğiniz birşey varsa memnuniyetle dinlerim, tavsiyelere açığım
tekrardan yardımcı olan herkese teşekkürler.
edit: ccs c ile programlamaya çalışıyorum, unutmadan ekleyeyim

bence sen derdini tanımlayamamışsın.

tek kod çalıştıran çekirdek bulunan işlemcilerde ne yaparsan yap nihayetinde aynı anda iki işlem yapamazsın,multitask burda yazılımda bitiyor.zaten multitasking de küçük aralıkla çalışıp,göze algı vermek gibi,if ten farkı yok. olurda birden fazla çekirdek olursa iş o zaman anlamlı oluyor,paralel progamming orda başlıyor. verdiğin örnekte if ile olur,yine multitaskinge gerek yok. zaten başka alternatifin yok,verdiğin örnekler yanlış.

interrupt bu derde deva değil.interrupt demek ilaç içmek için sürekli saati kontrol etmek yerine alarm kurup yatmak demek.bu sayede saati gelince uyarılıyorsun,o süreçte istediğini yap. doğrudan amacı paralel kod çalıştırmak değil.

mesela ilk aklıma gelen örnek dma olmadan sinyal işlemek.mikrofondan ses belirli aralıklarla örneklenecek,o aralıklarda diyelim mp3 olarak kodlanıp,biryere aktarılacak/kaydedilecek. bu işte adc den gelen veri geldiği zaman ramde saklanacak,diğer veri gelme süresinde ise encode edilecek,sonra yazılacak.bu biraz gerçek zamanlı oldu ama kabaca anlatır. veya bilgisayar gibi düşün,mp3 çalarken internette geziyorsun. işletim sistemi hangi kodun ne zaman ne kadar çalışacağını belirliyor.mesela işlemler aksadığı zaman ses kesiliyor,kilitleniyor.bu da işin zaman kısmı,neyse.

yani senin aslında sormak istediğin çok basit birşey değil.

fpga ise konu ile alakası olmayan birşey,boşuna bakma.fpga paralel iş yapmaz,işe uygun donanım tasarlar.bahsi geçen sıralı kod çalıştırma ile alakası olmayan birşey.

Erol YILMAZ

#26
Alıntı yapılan: yktronik - 01 Ağustos 2012, 18:18:53

ana program döngüsü düşün
bu program döngüsü işleniyor,
sıcaklık okunsun, lcd de tarih saat göstersin,
sonra iki buton ve bir de pot olsun,
butonlara basıldığında program devam ediyor ama butona basılınca ledi yakabilir, motor çalıştırabilir, birşey yapıyor yani
diğer butonda aynı şekilde
potla oynayıncada ana programla beraber başka bir işlem yapabilir, ledin şiddetini ayarlar, motorun devir hızını ayarlar falan

Aynı şeyleri tekrarlayıp durmadan önce cevapları iyi oku.

Sorunu tekrarlamana karşılık bende cevabımı yineliyorum:

Multitasking ne demek? Düşündün mü ?

Multitasking konusunu araştır öncelikle...

Bunun başka çözümü yok.

Yada daha basit  PLC ler nasıl çalışıyor ? Benim için çok faydalı olmuştu :)

Maxim

Alıntı yapılan: yktronik - 01 Ağustos 2012, 18:18:53
FPGAyı araştırıyorum
yaw tamam arkadaş, eyvallah sağolasınız da aynı anda olmuyor ben de biliyorum, anlatamadık derdimizi
en yalın şekilde son kez açıklamak istiyorum.

ana program döngüsü düşün
bu program döngüsü işleniyor,
sıcaklık okunsun, lcd de tarih saat göstersin,
sonra iki buton ve bir de pot olsun,
butonlara basıldığında program devam ediyor ama butona basılınca ledi yakabilir, motor çalıştırabilir, birşey yapıyor yani
diğer butonda aynı şekilde
potla oynayıncada ana programla beraber başka bir işlem yapabilir, ledin şiddetini ayarlar, motorun devir hızını ayarlar falan

burdaki amaç ana program çalışırken ekstra işlemler yapıldığında programın kesintiye uğramadan devam etmesi
ve şimdi lütfen if demeyin bana :D

sizin yapmanız gereken tek şey INTERRUPT kullanmak başka birşey değil.
yukarıdaki verdiğiniz örneğe bakalım mesela
normal program işliyor
ama arkada bir tane buton ve 1 adc girişi var değilmi ?
tamam işte sizin kullanmanız gereken şey
mesela PIC18F serisi bir işlemci için
1- portb.0 girişindeki INT0 interruptı buton girişi için
2-adc interruptı, analog okuma yapmak için
bu kadar...
program aksamadan yürür.


neden diğer arkadaşlar ile anlaşmazlık var ?
çünkü "AYNI ANDA" dedinmi işler değişir
gerçekten aynı anda olmaz
ama interrupt kullanınca ana porgramda çok çok acayip bir zamanlama hesaplama yapılmıyorsa sorun çıkmaz
saat veya lcd ye bilgi göndermek , led yakmak falan sorunsuz devam eder.

coco

bende interrupt yazmıştım ama sizden başka kimse nedemek istediğimi anlamamış :)

z

Bende çoklu işleri interrupt rutini içinde yapıyorum. Timer int ve state machine mantığı ile pek çok işlem paralel yürüyor.
Zaten geçmişte de böyle yapılıyordu. Kodlamanın ve hata oluştuğunda bulmanın ne kadar zor olduğu bilindiği için multitasking diye bir şey icad edildi.

Multitasking'i yürüten çekirdek kodların ilkel benzerlerini zaten timer + state machine mantığında kendimiz yazmak durumunda kalıyoruz.

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