Haberler:

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

Ana Menü

C de iki işlem

Başlatan muat, 11 Mart 2007, 02:31:01

muat

C de iki işlemi aynı anda nasıl yaptırabilirim. Bi arkadaş thread denen bi olay sayesinde yapabileceğimi söyledi ama ben bulamadım, ve ayrıca bunu bir atmega32 ile yapıp yapamayacağımı da tam olarak bilmiyorum. Aslında benim yapmak istediğim şey çok basit, bir yandan bir sayıyı değiştirirken, diğer yandan adc yi kullanmak. Örnek bir parça kod verebilir misiniz acaba bu konuda?

Macera

Sadece c de değil diğer dillerdede mcu ya birden fazla iş yaptırabilirsin.
MCU daki kesmeleri incelersen sorunun cevabını alabilirsin.
Mesela program çalışırken PIC 16F877 ADC çevrimi , sayma işlemi , seri port işlemi yada EEPROM yazma işlemini yapar vede bittiğinde MCUya kesme ile haber verir.
"Art without engineering is dreaming; engineering without art is calculating." -- Steven K. Roberts

Klein

malesef öyle bir şansın yok. MCU iki işlemi aynı anda yapamaz. Çift çekirdek değilse tabi. Eğer mcu tek çekirdekli ise sadece 1 işlem yapar. Ancak kesmeleri kullanarak işlem sırasını yönetebilirsin. Fakat kesmeleri de kullansan işlem bitmeden kesme hizmet programına dallanmaz. Sadece bir yordam bitmeden ,  yordamın herhangi bir noktasından başka bir yordama geçiş yaparsın ve o yordam tamamlandığında kaldığın yere dönersin.

Klein

Tabi macera arkadaşın söylediklerinde haklılık payı var. Ancak eksik. Bahsedilen adc çevirimi , seri port haberleşmesi vs... gibi şeyler mcu çekirdeğinden bağımsız olarak yürür. Örneğin MCU bir işlemle uğraşırken UART donanımı gelen 8 bitlik veriyi alabilir. Ancak bu veriyi biryerlere atmak veya kullanmak için yine o an yaptığınız operasyonu durdurup veriyi gerekli kaydedicilere yönlendirip yine kaldığınız yerden devam etmeniz gerekir.

muat

Bu thread olayı mikrodenetleyicilerde çalışmıyor mu?

Klein

thread  mcu da da çalışır. ancak bu olay aynı anda iki işlem yapma demek değil.  kanal çalışmasında işlemler zamanda paylaştırılır.  zamanlama bilgisi geldiğinde yapılan işlem durdurulur ve bilgiler yığına atılır. diğer işlemler yürütülmeye başlar.  Her zamanlama bilgisi geldiğinde bu işlemler  böylece sürer gider. Eğer işletim sistemi kullanmıyorsanız kesmeleri kullanarak yapabilirsiniz.

muat

kesme kullanmama gerek yok, çünkü sayı değiştirme işlemini  hiç durmadan yapmam gerekiyor, adc yi ise 100 kez yapmam gerekiyor. bu nedenle kesmeler işe yaramaz diye düşünüyorum.
Artık adc işlemini sayı değiştirme işleminin arasına sokarım, belki bu şekilde olabilir.

Klein

neden kesmelerin işine yaramayacağını düşündüğünü anlamadım.  Aksine tam böyle bir iş için

muat

öncelikle ilginiz için teşekkür ederim.
sayı değiştirme işlemi belirli aralıklarla olmalı, ve bu aralık değişmemeli, ve adc ise 100 kez olacak fakat zaman önemli değil.
ben öncelikli işlem olarak sayı değiştirmeyi düşünüyorum, ve ondaki herhangi bir değişiklik sonucu çok fazla etkileyecektir. eğer sayı değiştirme işleminin 250 mikrosaniyede bir yapılması sorun çıkartmayacak olursa, bunu daha test etmedim, adcyi iki sayı değiştirme işleminin arasına koyabilirim. (adc nin en fazla 250 mikrosaniye sürdüğünü varsayarak)
çarşamba günü toplanıp deneyeceğiz, belki bu kısım gerekmeyebilir de, arkadaşlar devamlı program için gerekli şeyleri değiştiriyorlar..