80 değişkeni, 1 değişken ile en hızlı karşılaştırma?

Başlatan Veli B., 17 Mart 2013, 21:35:57

Klein

Ne için Hız?

Karşılaştırma sonucunu en kısa sürede mi almak istiyoruz?
Bu işlemleri yaparken harcadığımız zamanı kısaltmak mı istiyoruz?
İkisi birden mi?

Veli B.

Karsilastirma sonucunu bulma kismini hizlandirmanin bir yolu olabilir mi?
Su an kullandigim yontemi yukarida acikladim. Index kontrollu bir dongu ile 80 deger icerisinden 0 dan buyuk olanlari SysTick ile karsilastiriyorum.

Klein

Karşılaştırma sonucunu karşılaştırma anında incelemeyeceksin sanırım. Sonuçlar bir yere kaydedilecek , karşılaştırma işlemleri bittikten sonra oradan alıp işleyeceksin. Yanlış anlaşılma yok değil mi?

Neden karşılaştırma işlemini SysTick verisini aldığımız anda yapamıyoruz?

Veli B.

İstenilen özellik saçma olunca, anlatması da problem oluyor.
Bir müşterimizin özel imalat 40 tane penceresinin 80 kanadı var ve bu kanatların motor kontrolleri var. Müşterimiz uçuk ve elektronikten anlıyor.
Kanatların kapanma şekline ve hızına göre ilave bildirimler/kontroller istiyor.

Olayı daha bizim dünyamıza uyarlamaya çalışayım.
80 tane buton düşünelim. Butonların her birisi farklı zamanlarda ve farklı sürelerde basılabiliyor.

Amacım;
Butonların basılı kalma sürelerini monitorize etmek ve belirleyeceğim set değerlerine göre bir işlem yapmak(motor hız ve/veya on/off kontrolü)
Mesela 1. buton herhangi bir anda basılmış ve o basılı iken bir süre sonra(atıyorum 200ms) 3. buton da basılmış, 100ms sonra 56. buton basılmış bir süre sonra ise 1. buton bırakılmış.... böyle bir senaryo...

Yapmak istediğim ise ;
1. buton basıldığı anda Bir timerdan değeri 1. dizi değişkene kopyalıyorum ve 1. flagı kuruyorum ki karşılaştırma aşamasında bu bite bakarak karşılaştırma yapıp yapmayacağıma karar veriyorum.

Olay aslında RTOS gibi ama bende yapısal çalışıyor.
MCU
hem SPI okuyacak,
Hem diziye, butonu  1 olan varsa Tımer mirror(butona ilişkili dizi hücresine örn: 5. buton için [4] e) yapacak,
Hemde aynı süreçte 80 değişkenden flagı 1 olanların içeriklerini set ettiğim değerle(örn if (Timer > ([5]+100))) karşılaştıracak.

Üzerinde durduğum kısım kalın fontlu olan son kısım.





mesaj birleştirme:: 20 Mart 2013, 00:20:01

Alıntı yapılan: Klein - 19 Mart 2013, 19:58:50
Neden karşılaştırma işlemini SysTick verisini aldığımız anda yapamıyoruz?

Şu an zaten böyle yapıyorum. Her SysTick Int oluştuğunda döngüye girip, Flagı 1 olanları if (Timer > ([5]+100)) gibi bir değerle karşılaştırıyorum.

ErsinErce

flag neden kuruyorsunuz birde ekstra ona vakit harcıyorsunuz. register la işiniz bitince sıfırlayın, register sıfırdan farklıysa işleme tabi tutun
systick değeri flag kurma işiyle uğraşırken değişmesin

birde 80 input + motor çıkışları vs birden çok mcu kullanırsanız daha iyi olur.
birbirleriyle haberleştirip aynı anda aynı değeri saydırtabilirsiniz. gerekirse merkezi bir noktadan hareketleri bildirirsiniz