Arduino / İşleme mi Mikro Mikro Çerçeve mi? En iyi dil? En iyi donanım?


10

Bir süredir Arduino ile uğraşıyorum ve başlangıçtan orta seviyeye geçiyorum. Performans ve donanım kullanılabilirliği açısından .NET Micro Framework hakkında bazı görüşler almak istiyorum .

Ben bir .NET programcısıyım, ancak Arduino için İşleme'nin neredeyse sıfır sürtünme olduğunu gördüm ... C # 'a o kadar yakın ki yapmak istediğim her şey belgelere bir gezi bile gerektirmiyor.

Her neyse, hangisi daha iyi?


Bu soruya da bakınız (C ++ ile ilgili): chiphacker.com/questions/3027/…
Kevin Vermeer

Yanıtlar:


17

Başlangıç ​​seviyesinden orta seviyeye geçmek istiyorsanız, öğrenmeniz gereken dil C'dir. Tüm Windows kilitleme tartışmalarını bir kenara koyarsanız bile, bir bilgisayarda kaliteli çalışma yapabilmek için C'de programlama konusunda çok iyi olmanız gerekir. .NET Micro veya C ++ gibi daha üst düzey bir dilde mikro denetleyici.

Gömülü sistemler bir bilgi piramidinden oluşur ve gerçekten iyi bir tasarımcı olmak için her adımın en azından bir kısmını bilmeniz gerekir:
^ Kullanıcı kodu
^^ İşletim sistemleri
^^^ C dili
^^^^ Montaj dili
^^^ ^^ Mikrodenetleyici mimarisi
^^^^^^ Dijital tasarım ^ ^ ^ ^ ^ ^ ^
Yarıiletkenler ^ ^ ^ ^ ^ ^ ^ ^
Temel elektronik (Ohm yasası)

Arduino çerçevesi, hobiler için C dili ve bir işletim sistemi arasında bir yere piramidin içine uygun bir kanca sağlar.

.NET Micro Framework sorunuza özel olarak, Hakkında diyor:

Tipik .NET Micro Framework aygıtı, harici bellek yönetim birimi (MMU) olmayan 32 bit işlemciye sahiptir ve 64K kadar rasgele erişimli bellek (RAM) içerebilir.

Ayrıca, broşür Windows Mobile , Windows Embedded , CE 6.0 ve .NET Compact Framework'ten ayırır ve Linux, Gerçek Zamanlı, Java ve özel işletim sistemleriyle karşılaştırır. Bu, Arduino / Processing çerçevesinden büyük bir sıçrama.

Arduino'nuzun 1k RAM'e sahip 8 bit işlemcisi var. 8 bit ve 32 bit güç kaybına ek olarak, listelenen işlemcilerin çoğunun yarısından daha hızlı çalışır. Sizi 32 bit işlemciye geçmekten vazgeçirmesem de, orta ve ileri düzey bir hareket olarak öneriyorum.

C # veya C ++ 'da birkaç gigahertz'de gigabayt RAM ile çalışan bir çift çekirdekli işlemcide önemsiz olan, ancak gömülü bir cihazda büyük bir fark yaratabilecek birkaç satırla çok fazla zaman ve bellek kullanmak gerçekten çok kolay . Montaj dili ve / veya C veya C # veya C ++ 'da bir guru olana kadar, gömülü programlama için kullanmanızı tavsiye etmem.

Bu yüzden, WinAVR'ı indirmeye başlarım ve C'de basit bir LED yanıp sönme rutini programlıyorum. C sizin için tamamen kafa karıştırıcıysa, PC'nizde biraz yerel kod ("Merhaba Dünya") yapın ve ardından mikrodenetleyici, ancak bu gerekli olmamalıdır. Ardından, UART üzerinden iletişime geçin, kesintileri kullanmaya başlayın ve C'deki Arduino projelerinizden bazılarını tekrarlayın. Ardından, farklı bir mikrodenetleyici, belki bir PIC veya ARM ve bazı yeni bir geliştirme kartı bulun (veya yapın!) LCD ekran, Ethernet, SD kart veya istediğinizi seçin ve yeni bir sistem öğrenmeye çalışın. Oraya vardığınızda, nereye gitmek istediğinizi daha iyi bilirsiniz.

Size yardımcı olmak için burada olacağız!


6
Montajcı ve C bilgisinin önemli olduğunu kabul etmiyorum. Mikrodenetleyicilerin nasıl çalıştığını anlamak çok önemlidir . Öğrenen toplayıcı (c, daha az) kesinlikle bu anlayışa giden bir yoldur, ama tek değildir.
Connor Wolf

4
@ Sahte İsim: Tabii, bu yüzden "en azından bir kısmı" dedim. C'den montajdan hex'e kadar basit bir programın ardından her adımı anlamanız sizi çok daha iyi bir programcı yapacaktır. Daha sonra isterseniz sihrinin işini yapmasına izin verebilirsiniz, ancak birlikte çalıştığınız makinenin yeteneklerini anlamanız gerekir.
Kevin Vermeer

Hata! "Bazıları" kaçırdı.
Connor Wolf

7

".NET Micro Framework" ile ilgili hiçbir deneyimim yok, ancak düşük güçlü gömülü platformlarda sanal bir makine çalıştırmayı içeren herhangi bir şeyden oldukça şüpheliyim. Benim için bir israf gibi görünüyor. Yerel makine koduyla derlenen daha özel bir platform çalıştırmakla aynı etkiyi elde etmek için daha fazla güç işlemcisine, daha fazla belleğe, daha fazla güç tüketimine ihtiyacınız var. Muhtemelen neden bir sanal makine (JVM'ye benzer) çalıştıran 528MHz Android telefonum, yerel makine kodu için derlenmiş uygulamaları çalıştıran önceki birkaç yıllık 312MHz Palm Treo'mdan daha yavaş geliyor.

Hızlı bir bakış açısından, .NET MF, Arduino'da kullanılan 8 bitlik ATMega yongalarının güç ve karmaşıklığında bir adım olan bir ARM işlemci gerektirir.

Benim önerim, eğer Arduino istediğinizi yaparsa, buna bağlı kalın. Değilse, daha güçlü ATMega veya ATXmega yongalarına ve üstündeki ekstra .NET çeviri katmanı olmadan ARM ile doğrudan C / C ++ 'da çalışır.


2
İçtenlikle katılıyorum, ama bunun olduğunu sanmıyorum. Ben IL konuşlandırıldığında makineye özel koda çevrilir düşünüyorum. İşte bu varsayımı çürüten bir bağlantı: microsoft.com/downloads/… Arduino ile şu ana kadar oldukça mutluyum ... Sanırım beni ikna edebilecek tek şey tinyclr.com'da oldukça etkileyici bir kalkan seçimi bulduğum .. Arduino için bu kadar kapsamlı bir kalkan seçimi görmedim.
Chris B. Behrens

1
Programcıya yönelik çaba dengesi, masaüstü bilgisayarlarımızın neden 5 veya 10 yıl önce kullandığımız bilgisayarlar kadar önyükleme ve başlatma süreleri kadar uzun sürdüğüdür.
Kevin Vermeer

@Chris - Sorun, makine kodunu çalıştırmaması değil, bir sürü soyutlama ile çalıştırması değil. Soyutlama, nesneler, genel kütüphaneler, modülerlik vb. Programlamayı basitleştirmeleri açısından iyidir, ancak zaman ve yer kaplarlar.
Kevin Vermeer

Evet, ama soyutlama katmanlarının geliştirme makinesinde sadece (veya en azından çoğunlukla) var olduğunu düşünüyorum. Ama elbette, bu sadece ihtiyacım olan bilgi.
Chris B. Behrens

2
@Chris - Soyutlamalar makine koduna kadar yayılır. Sonunda, makine adresler üzerinde işlemler gerçekleştirir: Yükleme, depolama, ekleme, koşullu dal, vs. Montaj, makine kodunun bire bir çevirisidir ve C, ona nispeten yakın eşleşir. Bununla birlikte, daha üst düzey dillerin yapacak çok işi vardır, çünkü herhangi bir işlemcinin talimat setinde deneme / yakalama talimatı yoktur. Bir istisna işleyici uygulamak için gereken makine kodu önemsiz değildir.
Kevin Vermeer

4

Eğer orta seviyeye geçmek istiyorsanız Arduino çevresi dışında bir platform denemelisiniz. Seçilecek çok şey var, Atmel MCU ile bile 8 bitte kalabilir veya başka bir satıcıdan birine geçebilirsiniz. Bir IDE kullanın, C kodu yazın, bir MCU'nun nasıl çalıştığını anlayın, kendi bootloader kodunuzu yazın veya devre içi bir programlayıcı kullanın ve hareket etmeye devam edin.

Ancak mikro denetleyiciler için C # yazmayı gerçekten denemek istiyorsanız, şunu deneyin: http://www.trygtech.com/products/sh7619_evb.php

Çok daha büyük bir MCU kullanır, tipik .NET alanı yaklaşık 512K flash bellek ve 256k RAM'dir.


2
Bu sistem .NET Micro çerçevesini kullanır. Tam olarak Chris'in görüşlerini aradığı bir sistem.
Kevin Vermeer

4

Sadece sizin için ilginç bir uzlaşma olabilecek Netduino'yu gördüm . Sistem özellikleri veya ayrıntıları hakkında hiçbir fikrim yok ama en azından bu çerçeveyi denemek için iyi bir yol gibi geliyor bu yüzden .NET Micro kullanmak gibi görünüyor.


3

Processing / Arduino ile benim için en büyük sorun, iyi bir hata ayıklayıcı olmaması. Bir AVR ejderham var, ama bu çok yardımcı olmuyor çünkü (a) AVR Studio'nun hata ayıklayıcısı yavaş ve buggy veya (b) Eclipse'de hata ayıklama sadece yavaş ve daha az olsa da hala buggy. WinAVR'da denemek için bir şansım olmadı, ancak listede bir sonraki var.

Arduino IDE'de elbette hata ayıklayıcı yok.

Basit uygulamaların dışına çıkıp kablolu ve kablosuz ağ düzeyinde yer alması gereken uygulamalar oluşturmaya başladıktan sonra oldukça sinir bozucu. Bu nedenle, .NET MF'ye ciddi bir şekilde bakıyorum - SDK ile oynuyor ve yakında bazı donanımları açıyorum.


Hata! Konsantrasyonda hızlandırılmış! Ben ediyorum kullanarak ;-) Tutulma ile WinAVR toochain

1
İtiraf edeceğim ... her iki sistemde de pim 13 dışında bir hata ayıklayıcı olacağı hiç aklıma gelmedi. Bu kesinlikle Netduino'ya ikinci bir bakış gerektiriyor ...
Chris B. Behrens

Evet; Arduino uygulamalarının yukarıda belirtilen iki ortam üzerinden çip üzerinde hata ayıklaması yapmak için daha küçük ATMeg'lerde DebugWire ve daha büyük yongalarda (sanırım 1280 ve üstü) JTAG kullanabilirsiniz. Bununla birlikte, bunu yapmak için donanımınız olması gerekir ve benim için 50USD civarında Ejderha iyi bir satın aldı

Ancak, bahsettiğim gibi, her iki seçenek de en iyi deneyimlerde ortalama gibi görünüyordu. Ben geldim netduino ile hata ayıklama karşılaştırma yapmak için sabırsızlanıyoruz.

1
Bu konuda bir güncelleme - bir netduino artı birkaç gün önce aldı ve onunla oynuyor. Kutudan çıkmış deneyiminin Arduino'daki mevcut oyun durumuna kıyasla inanılmaz olduğunu söylemeliyim. Hiçbir şey fantezi - sadece görsel stüdyo (ücretsiz 'ekspres' sürümünü kullanabilirsiniz) ve bir usb kablosu ve bir anda anında yerleşik hata ayıklama ile çalışıyor. Tüm intellisense şeyler IDE'de çalışıyor ve şunu söylemeliyim - diğer platformlarda c / c ++ çalışması yaptım, .NET kullanarak

2

Netduino'ya göz atmak isteyebilirsiniz . Arduino düzeni ve pinleri ile uyumlu olacak şekilde üretilmiştir ve .NET Micro Framework'ü çalıştırır. Böylece C # ile kodlayabilir ve hatta Visual Studio'da hata ayıklayabilirsiniz!

Şimdiye kadar çalışmanın çok iyi ve kolay olduğunu gördüm. Çok fazla öğretici bulamamış olsam da, Arduino'nun bir çoğunu taşıyabileceğinizi düşünüyorum. Beni yeni bir varlık olarak, kolayca bir Arduino öğretici bir fotodirenç / fotosel kurulum ve kod başardı.


1

Birkaç açık kaynak projesinden biriyle STM32'de (ARM M3) Arduino tarzı C geliştirme yapmayı düşünebilirsiniz. LeafLabs ve xduino'nun her ikisi de çalışan donanım ve Arduino tabanlı takım zincirlerine sahiptir. 32bit mikrodenetleyiciye ihtiyacım olduğunda, düzenli Atmega çiplerine kıyasla Leaflabs Maple panosunu kullanıyorum


1

Atmel için IDE'yi kullanmak için güzel bir kolay olan http://www.hpinfotech.ro/html/cvavr.htm'ye bakabilir ve biraz CI bunu profesyonel olarak kullandınız ve çok iyi, daha fazla rahatlık düzeyi gibi IDE'lerden Visual Studio gibi. Eclipse satın aldığınız kadar kaygan değil Android geliştirme için biraz tıknaz olmak.

Eğlenmek için bir Tricopter kontrol sistemi uyguladığım Netduino'm var, ki bu çok gerçek zamanlı ve Visual Studio 2010 ile C # ile yazılmış, güvenilir bir şekilde çalışıyor. Cihazdaki hata ayıklama genellikle mükemmel, otomatik olarak veri senkronizasyonu yapıyorum wifi ve uçakta küçük bir HTTP sunucusu var.


0

Üretim uygulamalarında (hassas ölçüm cihazları) .NET Micro Framework kullanıyoruz. İyi çalışıyor.

Bugünkü mikroişlemciler, 'profil-gör-değiştir-gör-gör ...' paradigmasını kullanabileceğiniz duruma geldi. Bellek miktarları şimdi oldukça büyük ve ucuz, bu yüzden büyük olasılıkla bellek yetersiz koşullarla yığınlamayacaksınız.

Ve bir C # geliştiricisi olarak, istenen bir koşula ulaşmak için yeterli profil oluşturmanın, kodunuzu (ve belki de değil) biraz daha hızlı hale getirmek için kodunuzu oluştururken ne yapmanız gerektiğini ve daha karmaşık olduğunu tahmin etmekten daha iyi bir yol olduğunu biliyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.