Soru:
Arduino ile çoklu okuma
Omar Hussein
2015-12-09 04:18:51 UTC
view on stackexchange narkive permalink

C ++ ile multithreading kavramını yeni öğrenmeye başladım ve hemen genel olarak mikrodenetleyicilerle ve özel olarak Arduino ile multithreading kullanma olasılığı hakkında bir dizi soru aklıma geldi.

Öyle mi? herhangi bir Arduino kartında multithreading kullanmak mümkün mü?

Çok iş parçacıklı derken eşzamanlı mı demek istiyorsunuz? Bunu yapmazsanız, bir zamanlayıcı tarafından eşit aralıklarla tetiklenen Kesme rutinleri, AVR işlemcilerdeki birçok benzer işlevi kapsayabilir.
Bu kütüphaneyi deneyebilirsiniz https://github.com/mikaelpatel/Arduino-Scheduler
Dört yanıtlar:
Mikael Patel
2015-12-09 05:54:51 UTC
view on stackexchange narkive permalink

Cosa 'da eşzamanlı programlama için aşağıdaki desteği bulabilirsiniz:

  1. Olaylar, arayüz kesinti hizmeti rutinleri
  2. İşler, gecikmeli, periyodik veya bizimle alarm işlevleri, ms ve saniye seviyesi zamanlayıcılar (Watchdog, RTT veya RTC).
  3. FSM, nesne-durum fonksiyonu
  4. ProtoThreads, nesne-durum işaretçisi
  5. Threads, Semaforlar, vb., çoklu yığınlar
  6. UML Kapsüller ve Bağlayıcılar, bağımlılık odaklı programlama

Nasıl kullanılacağına dair birçok örnek vardır bunlar. İyi bir başlangıç ​​noktası, Blink çizimleridir. LED'i açıp kapatan bir iş parçacığı ve yanıp sönme süresini periyodik olarak değiştiren bir denetleyici iş parçacığı içeren bir çoklu iş parçacığı Yanıp Sönme örneği bile vardır. İş parçacığı yığın boyutu yalnızca 64 bayttır ve bir ATtiny üzerinde bile çalışır.

Tüm AVR dahili donanım modülleri ile (SPI, TWI, UART, vb.) eşzamanlılık için birçok fırsat vardır.

Arduino çekirdeği için bir Zamanlayıcı kitaplığı da mevcuttur. Bu, Cosa İpliklerinin bir limanıdır. Daha fazla ayrıntı için lütfen github'a bakın.

Şerefe!

Cosa'nın bellek yükü hangi sıradadır? 100 KB flaş ve 20 KB RAM?
Ne kullandığınıza / içerdiğinize bağlıdır. Genel olarak "ek yük", benzer işlevsellik için Arduino çekirdeğinden daha azdır. Öğrenmenin en iyi yolu, bazı örnek eskizleri çalıştırmaktır.
dlu
2015-12-09 04:36:05 UTC
view on stackexchange narkive permalink

Gerçekten hızlı cevap "belki" dir - "Arduino" ile ne demek istediğinize ve "ileti dizisi" ile ne demek istediğinize bağlıdır. Cevap, AVR tabanlı Arduino'lar (Uno ve diğerleri) ile ARM tabanlı Arduinos (Due ve diğerleri) için farklı olabilir - ARM işlemcilerdeki "gerçek" iş parçacıkları için çok daha iyi donanım desteği olmasını beklerdim. . Cevaplamak isteyeceğiniz bir diğer soru da "neden diziler?" Soyutlamanın kodunuzu düzenlemenize yardımcı olmasını ister misiniz? Yoksa gerçekten "gerçek" iş parçacığına mı ihtiyacınız var?

Donanım iş parçacığı desteği olmadan önce (örneğin, 80'lerin ortaları) kullanıcı iş parçacığı uygulamaları vardı, bunların bir AVR. Bunun bir proje olmasını beklerdim.

Protothreads adında ilginç olabilecek bir iş parçacığı paketi var. Açıklamada, "Protothreads ciddi şekilde bellek kısıtlaması olan sistemler için tasarlanmış son derece hafif sapsız iş parçacıklarıdır" diyor. Protothreads'in basit kullanımı hakkında sorulan başka bir soru buldum, bu yüzden paketin başka kullanıcılarını bulabileceğiniz anlaşılıyor.

Bu Yığın Değişiminde de bazı yararlı bilgiler bulabilirsiniz ileti dizileriyle ilgili soru, "C kullanıcı ileti dizileri" için hızlı bir arama, bu uygulamayı ilk sayfada buldu - ve eminim çok daha fazlası vardır.

"Arduino konuları" üzerinde yapılan bir arama, daha ilginç görünen birkaç bağlantı buldu:

Yalnızca iş parçacıkları, küçük ve ucuz bir anakart ve I / O pinleri istiyorsanız, bir Raspberry Pi düşünmeye değer olabilir - Linux iş parçacığı desteğine sahiptir.

İyi cevap. Ayrıca, donanım iş parçacığı desteğiyle bile, bir işletim sisteminin veya en azından bazı yazılımların katmanların iş parçacıklarını yönetmesi ve planlaması gerekeceğini belirtmekte fayda var.
@Mlagma: Anladığım kadarıyla, bu yanıttaki her bağlantı, kullanıcının programına statik olarak derlenen evrelerin bir uygulamasını gösteriyor. Arduino sadece bu programı çalıştırır. Kullanıcı programı dışında bir işletim sistemi veya başka bir yazılım katmanı örneği verebilir misiniz?
@Mlagma,, coroutinler ve kesmeler gibi bir şey kadar basit olabilir. Belki de basit bir zamanlayıcı uygulayan bir kitaplığın ötesinde bir şey bulmayı beklemiyorum - ama bunu bile bulamadım.
dda
2017-01-16 15:43:11 UTC
view on stackexchange narkive permalink

Çok çekirdekli olduğu için kesinlikle çoklu iş parçacığını etkinleştirebilecek Arduino benzeri bir ürün var: Shield Buddy TC275.

Core setup and loop functions

Yani temelde üç setup () işlevine ve üç loop () işlevine sahipsiniz. Gerçek çoklu iş parçacığı.

Bunu bulmak için +1. Mükemmel tahta, ama ucuz değil. Ancak, [AeroQuad] 'a (http://aeroquad.com/) yeni bir yaşam süresi verecektir ..!
Evet, bir süredir radarımdaydı ama maliyet ... Umarım Çinli klon yapımcıları yakında bulur :-)
Şu anda apaçık olan nedenlerden ötürü, başlangıçta düşündüğüm kadar uyumlu değil. Basit bir yeniden derleme yeterli olmayabilir. Kodun karmaşıklığına, yani assembler kullanılıp kullanılmadığına bağlı olacaktır. Bkz. [Herhangi biri RAMPS 1.4 ana bilgisayar kartı olarak Shield Buddy (Arduino Mega2560 yerine) kullandı mı?] (Http://3dprinting.stackexchange.com/questions/3410/has-anyone-used-a-shield-buddy -en-of-a-arduino-mega2560-as-the-rampalar-1-4)
Evet, ASM bir sorun olabilir. Ayrıca, kodu 3 çekirdekli bir ortama ayarlamak, ASM olmadan bile biraz çalışma gerektirir. Ama yeni bir proje için gerçekten ilginç olabileceğini düşünüyorum.
Flanker
2017-01-18 02:40:46 UTC
view on stackexchange narkive permalink

Atmega128'de Atomthreads kullanıyorum, minimum ek yük ile çok hafif. Görev zamanlayıcı, muteks, semaforlar ve kuyruğa sahip olun. Kod taşınabilir, ancak Arduino IDE ile kullanmak için bazı yapılandırma gerektirebilir (Atmel Studio kullanıyorum). Öncelikle görev zamanlayıcı kullanıyorum, hiç sorun yaşamadım. Az önce kontrol edildiğinde, geliştirme hâlâ aktif.

Re: * "çok hafif" *. Bunu ölçebilir misin? 8 KB flash ve 600 bayt bellek mi?


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...