Java API ile mikrodenetleyici


10

Donanım ekibim gelecekteki bir proje için bir Atmel AVR 8 bit mikrodenetleyici kullanmayı planlıyor.

Bildiğim kadarıyla, C'de programlanmalıdır. AVR için bir JVM buldum , ancak Atmel'in yerel C kütüphanelerinden daha sınırlı.

Bana Java'yı destekleyen 8 bitlik bir mikrodenetleyici önerebilir misiniz?

PS. C bilmiyorum ve mikroişlemci programlamasında deneyimsizim.


28
Birisinin büyük bir yüzen etek sattığını ve arabanızla gölde balık tutmaya gidebileceğinizi söyleyen bazı uzun direkler sattığını söyleyin. Takmak için üç gün boyunca mücadele ettikten sonra, arabanız geçip batmadan önce göle yaklaşık 15 metre girersiniz. Sen baban -gerçekçi- öfkelenecek. Güzel bir kano ile yerel tekne dükkanından geçtiniz. Kano, mikro C derleyicisidir ve çubuklu floaty araba, 8 bitlik bir mikro denetleyicide Java'dır. Neyse ki, bu olmadı ... Bize yüzenleri nerede bulabileceğini soruyorsun. Baban olarak, "Ne düşünüyorsun ?! Kano getir!"
darron

6
Floaty etek arabasını sopalarla görselleştirmekte sorun yaşıyorum. Hiç fotoğrafın var mı?
endolit

8
@darron - Bu , paketteki arabirimi big_floating_skirtuygulayan bir nesne ve şu anda hatırlayamadığım bir çeşit garip kalıtım desenine sahip nesneler olmamalı mı (UML'de açıkça tanımlanıyor)? boatorg.buoyantpolejava.net
Kevin Vermeer

2
@sterz: Mikroişlemci arka planı olmadan, 8 bitlik bir mikroda Java'nın gerçekte nasıl olduğunu fark etmemiş olabileceğinizi gerçekten anlaşılabilir. Benim ilk yorum sert geliyorsa üzgünüm ... Basit bir "Bunu yapma" çok zayıf görünüyordu.
darron

1
@darron: "bir top ile çekim kuşlar" benzetmesi için teşekkürler
sterz

Yanıtlar:


32

Mikroişlemci / mikrodenetleyici programlama alanında deneyiminiz yoksa, muhtemelen önce C'yi öğrenmelisiniz, böylece Java'nın çoğu mikrodenetleyici projesi için ne zaman ve neden kötü bir seçim olduğunu anlayabilirsiniz.

Bağladığınız JVM'deki kısıtlamaları okudunuz mu? Aşağıdaki sorunları içerir:

  • 512 bayt kadar az program belleği (KB değil ve kesinlikle MB değil)
  • 768 bayt kadar az RAM (değişkenleriniz nereye gider. Bu kısıtlamaya göre 768 karakter dizeyle sınırlısınız.)
  • 8 Mhz AVR'de saniyede yaklaşık 20k Java opcodu.
  • Yalnızca java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, bir JVM kontrol sınıfı ve yerel bir IO sınıfı içerir. Java.util dosyasını içe aktaramazsınız. *; ve bu listede olmayan tüm sınıfları alın.

Bu kısıtlamaların ne anlama geldiğini bilmiyorsanız, alan ve hız kısıtlamaları nedeniyle projeyi gerçekten Java ile yapamayacağınız ortaya çıkarsa, B planına sahip olduğunuzdan emin olun.

Hala Java ile gitmek istiyorsanız, belki de cihazın sadece Java'yı bilen birçok kişi tarafından programlanmasını beklediğiniz için, daha büyük bir donanım almanızı şiddetle tavsiye ederim, muhtemelen gömülü Linux çalıştıran bir şey. Gömülü JVM'yi çalıştırmak için çekilecek bazı özellikler için Oracle'ın bu sayfasına bakın , tartışmalarının SSS bölümünde en az 32MB RAM ve 32MB Flash öneriyorlar. Bu, RAM'in yaklaşık 32.000 katı ve baktığınız AVR'nin 1.000 katıdır. Oracle'ın Java Embedded Intro sayfası JVM'nin kısıtlamaları hakkında daha ayrıntılı bilgi vermektedir. Onların ses tonları, tahmin edebileceğiniz gibi, benimkinden daha fazla Java dostu. Bu tür bir donanımın tasarımının 8 bit AVR'den çok daha zor olduğunu unutmayın.

Bilgisayar bilimleri yanlısı olan bir bilgisayar mühendisliği öğrencisiyim. Üniversitemin CS departmanı Java Kool-yardımını içti, bu yüzden mühendislik programındaki birçok öğrenci sadece Java'yı (bir programcı için üzücü bir durum olan) bilmeye geliyor, en azından eğer bazı Python veya C ++ öğreniyorlar C ...) öğrenmek istiyorum, bu yüzden profesörlerimden biri Java deneyimi olan öğrenciler için bir Ch Cheat Sheet yayınladı . Sadece 75 sayfa; Karar vermeden önce okumanızı veya gözden geçirmenizi öneririm. Bence C, gömülü bir proje geliştirmenin en verimli, dayanıklı ve profesyonel dilidir.

Dikkate alınacak diğer bir alternatif Arduino çerçevesi. Bu kullanan bir versiyonun bir kablo nesne veya başlıkları olmadan C ++ gibi dil. Birçok AVR çipinde çalışabilir, kesinlikle donanımlarıyla sınırlı değildir. Size doğrudan C'ye atlamaktan daha kolay bir öğrenme eğrisi verecektir.

Sonuç olarak,
XKCD Altın Çekiç
Alt metin: Doğru olanı bulmak için bana beş deneme yaptı, ama sonunda - tekne olmasa da - gecemizi kurtarmayı başardım.


5
Benim en sevdiğim komik şeritler biri şimdiye kadar keyif aldık.
Kortuk

1
Mmm, soğukkanlı. +1
tyblu

JVM'nin birkaç on yıl önce mevcut olan "Java iButtons" ile nasıl karşılaştırıldığını merak ediyorum.
supercat

@kevin "C Hile sayfası" bağlantısı çalışmıyor! Lütfen güncelle!
charansai

6

Atmel AVR için en popüler programlama ortamı Arduino'dur . Arduino dili C ++ 'ın bir alt kümesidir.

Arduino "skeçleri" / programları sözdizimsel olarak Java'ya çok benzer görünür. Kablolama dil Arduino türemiştir gelen C ++ (içinde uygulamaları vardır Arduino ), Java ( İşleme ) ve Javascript ( processing.js ).

Her iki dil de Algol68'deki ortak ataları nedeniyle aynı bildirim stilini, döngü yapılarını ve aritmetik işleçleri paylaşır68. Tipik olarak, Arduino'daki tüm nesneler, Java gibi, üye işlevler .operatörle çağrılır (örn. LED.flash()).

Dil bir Java programcısına çok aşina olacak - ama daha da önemlisi, Arduino çizimleri tam donanım erişimi ile tam hızda çalışan yerel koda derlendi. Mikrodenetleyicinizden en iyi şekilde yararlanmak için bu çok önemlidir.

İşte API .

Arduino, gitmeniz gereken her şeyi sağlar: düşük maliyetli donanım, ücretsiz entegre geliştirme ortamı ve önyükleyici (böylece USB / seri üzerinden kod yükleyebilirsiniz).


3
Daha kesin olmak gerekirse, hobi uzmanları ile (büyük olasılıkla) en popüler programlama ortamıdır, ancak tüm AVR geliştiricileri üzerinde olması gerekmez.
pfyon

2
Arduino'nun en çok kullanıcı sayısı tarafından popüler olduğunu, ancak Arduino ürün yazılımı içeren sevk edilen ürün birimlerinin sayısına göre olmadığını iddia ediyorum. Orada çok sayıda Arduino kullanıcısı var
Toby Jaffey

1
"Eskizler" derlenmiş olsa da, IO erişim hızı C veya montaj kullanılarak büyük ölçüde geliştirilebilir.
tyblu

1
C ++ ve Java benim için çok farklı görünüyor. ("Arduino" sadece bazı teknik bitleri gizlemek için bazı tuhaf dahil yapısı ile C ++.)
Nick T

2
@Jason S "Arduino" çizimleri "/ programları Java'ya çok benziyor"
Toby Jaffey

4

Daha önce hiç kullanmadığımı açıklığa kavuşturmak istiyorum, ama bir yıl önce Javelin deniyordu. Parallax'ın bunları veya başka bir şeyi edinmiş olması mümkündür, çünkü ortaya çıkan tek şey "Cirit Damgası" dır. Yıllar önce, Velocity Semiconductor adlı bir şirket de vardı, bu da Tavşan Semiconductor'un çekirdek modülleri için (sözde) bir bırakma yedeği yaptı ve donanımda bir JVM vardı, ancak görünüşe göre ortadan kayboldu. Araştırmanda iyi şanslar!


4

Sun Microsystems, temelde gömülü bir java platformu olan Sun Spot adlı bir platform yapardı. Açıkçası Sun Microsystems artık etrafta değil (Oracle onları satın aldı), ancak yine de Sun Spots satın alabileceğiniz anlaşılıyor - http://www.sunspotworld.com/products/ . Java'yı gömülü bir ortamda (iş imho için yanlış soyutlama düzeyi) kullanma fikrinde büyük değilim ama bu Java için en doğal gömülü platform gibi görünüyor. Bu özelliklerin özelliklerine dikkat edin - ağır 180MHz / 512k RAM'dir ve bir başlangıç ​​kiti için 400 $ 'dan ucuz değildirler.

Bu yüzden bu soruya Arduino savunuculuğu yanıtlayanların ikinci ya da üçüncü olacağım. Yardıma ihtiyacınız olursa sizi destekleyecek bir topluluk cehennemi var. Çevresel donanıma ihtiyacınız varsa, Google'da "Arduino Shields" e bakın ve şaşırın - kontrol servo motorlarından doğru kalkan kombinasyonuyla 802.11 kablosuz ağa atlamak için her şeyi yapabilirsiniz. Biraz pratik yapmadan C'yi (işaretçi ne diyor !?) öğrenmek pratik değildir, ancak Arduino skeçlerini hemen yazmaya başlayabilirsiniz ... Ayrıca 30 $ ve klonlar (örneğin RBBB veya DorkBoard) 15 doların altında.


ah evet, bunu iki yıl önce Maker Faire'de gördüm! Oldukça havalı bir cihaz.
Dave

SunSpots'un katil özelliği Java değil, birbirleriyle iletişim kurmalarına izin veren yerleşik kablosuz öğelerdir. Birbirinin farkında olmak veya ana üsle kolay kablosuz iletişim kurmak istiyorsanız, bu çok, çok güzel.
Thorbjørn Ravn Andersen


2

Ajile sistemleri çeşitli yerleşik, gerçek zamanlı java yongaları ve değerlendirme panoları yapar.

Çıplak metal java çalıştırıyorlar. Çok hoş.

www.ajile.com fiş ve değerlendirme panolarını oluşturur.

www.systronix.com çeşitli gömülü java donanımı satmaktadır.

AJ-100'ü ajile'den zorlu işler için kullandım, çalışmak çok güzel. Ve hayır, bir avr kadar ucuz değiller ama düşük uçlu bir pentium gibi verileri işliyorlar.

Ajiles çipleri 1 mikrosaniyenin altındaki kesintilere (kesme gecikmesi) yanıt verir.


'Bunu asla gömülü bir C sisteminde yapmayın' ??? Ne yap? 1 uS gecikme süresi? Yüksek hız? Zorlukla. Bence 1GHz + DSP'leri, birçok ARM ve diğer birkaçını unutuyorsun. Birçok kişi bunlar için sadece çıplak metal C (OS, vb.) İle yazma. Bu tür şeylerin Java'yı gömülü olarak (tam bir Linux ölçekli işletim sistemi dışında) kullanmanın yarı rasyonel bir yolu olduğunu söyleyeceğim ... Systronix'e hızlı bir şekilde baktıktan sonra, bu küçük rahatlık için iyi bir prim. Kesinlikle gömülü ARM'ye giderdim. Ayrıca, Systronix dışındaki bu projelere bağlantıların çoğu öldü.
darron

Oh, ve TINI delicesine aptal. 8051'de ROM'da JVM. Kolay Ethernet istediğimde aptalca bir şekilde geri döndüm ve C'de bile normal bir kurumsal LAN'ın yayın trafiği ile doluydu. Parallax'ın Temel Damgaları gibi pazarlarlarsa iyi bir ürün olurdu, ama yapmazlar. Hobi olmayan bir amaç için uygun değildir.
darron

1
Bu çipler birkaç yüz megahertz'de çalışıyor. 1uS gecikme süresi, bu cihazlardan 100 kat daha yavaş çalışan bir işlemcide C olarak programlandığında mümkündür. Eşdeğer işlemcilerle (iPad'ler ve Droid telefonlar gibi) bazı harika şeyler yapabilirsiniz, ancak bunu 8 bitlik AVR'ye alternatif olarak göndermek, bir elma-elma karşılaştırması değildir.
Kevin Vermeer

@reemrevnivek: OP'nin Java'yı istediği göz önüne alındığında, Ajile parçasının gömülü Java'yı (tam bir Linux işletim sistemi veya başka bir şey dışında) çalıştırmanın tek makul yollarından biri olduğu için uygun olduğunu düşünürdüm. Eğer son paragraf ve TSTIK bitleri orada olmasaydı, onu bile iptal edebilirdim.
Aralık'ta darron

2

Kişisel deneyimim, AVR ile programlamak ve başlamak için C kodunun oldukça kolay olması, java yapmanın uzun yıllarından geliyorum ve arduino taslaklarını kullandıktan yaklaşık 2 ay sonra çevreyi bıraktım ve avr-gcc, siteler için gittim avrfreaks gibi yaygın sorunlara cevap bulmayı kolaylaştırır. (Hala güvenilir Arduino Duemillenove'umda her şeyi yapıyorum)

Başka bir IDE ile uğraşmak zorunda olmadığım için derleme ve "dağıtmak" yani çip yazmak için tutulma kullanmak da güzel

Aslında kafanızı kayıtlar, 16 bit kayıtlar etrafında almak ve bunları uygun sırayla, kesintileri, zamanlayıcıları, donanım PWM'yi programlama dilinin kendisinden okumak daha zordur.


1

Genel olarak, gömülü çalışmanın söz konusu olduğu "C öğren ve işlemcilerin gerçekte ne yaptığını anlayın" kampında olsam da, küçük bir kol yongasının bir AVR'den çok daha pahalı olmadığını ve neredeyse mantıklı olduğunu belirtmek gerekir. basit görevleri bir jvm üstünde işlemek için konum.


1

NanoVM , 8-bit AVR mikrodenetleyicileri üzerinde çalışmak üzere tasarlanmış bir Java Sanal Makinesi'dir.

(ana sayfadan)

Tam özellikli bir Java VM değildir ve asla olmayacaktır. Her zaman java dilinin küçük bir alt kümesi ve standart java kütüphaneleri ve uygulamaya özgü birkaç yöntemle sınırlı olacaktır. Ayrıca, mikro denetleyicileri programlamanın standart yolu olarak C'nin değiştirilmesi amaçlanmamıştır. C veya montaj programlarına göre daha az esnektir ve daha düşük performansa sahiptir.

NanoVM, mikrodenetleyici tabanlı bir cihaza sınırlı fakat kontrol edilebilir bir programlama arayüzü sağlamanın bir yoludur. Donanıma özgü kodların çoğu NanoVM'nin kendisinin bir parçası olduğundan, kullanıcı uygulamanın kendisine odaklanabilir. Bir kullanıcıya NanoVM ile donatılmış bir cihaz verilirse, donanımın kendisini düşünmesi gerekmez. Ayrıca, herhangi bir hedefe özel derleyiciye veya benzerine ihtiyacı yoktur. Tek ihtiyacı olan standart bir java derleyicisi ve java ile yazılmış NanoVMTool. Bu nedenle, tüm geliştirme zinciri bir java derleyicisine sahip olan ve java kodunu çalıştırabilen herhangi bir cihazda çalışır. NanoVM'nin sağladığı donanım soyutlamasıyla, kullanıcının hedefin dayandığı mikrodenetleyici türünü bile önemsemesi gerekmez.


1

Oldukça Java değil - 8 bit, ancak Espruino adı verilen düşük güçlü ARM Mikrodenetleyicileri için bir Javascript yorumlayıcısı var .

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.