Mikrokontroler dengan Java API

10

Tim perangkat keras saya berencana untuk menggunakan mikrokontroler Atmel AVR 8-bit untuk proyek mendatang.

Sejauh yang saya tahu, itu harus diprogram dalam C. Saya telah menemukan JVM untuk AVR, meskipun lebih terbatas daripada perpustakaan C asli dari Atmel.

Bisakah Anda menyarankan saya mikrokontroler 8-bit yang mendukung Java?

PS. Saya tidak tahu C dan saya tidak berpengalaman dalam pemrograman mikroprosesor.

sterz
sumber
28
Katakanlah seseorang menjual rok terapung besar dan beberapa tiang panjang yang mereka katakan bisa Anda gunakan dengan mobil Anda untuk memancing di danau. Setelah berjuang selama tiga hari untuk memakainya, Anda mendapatkan sekitar 15 kaki ke dalam danau sebelum mobil Anda terbalik dan tenggelam. Kau ayah akan benar-benar marah. Anda telah melewati toko perahu setempat dengan sampan yang bagus. Sampan adalah kompiler C mikro, dan mobil ringan dengan tongkat adalah Java pada mikrokontroler 8-bit. Untungnya, ini tidak terjadi ... Anda bertanya kepada kami di mana Anda dapat menemukan pelampung. Jadi, sebagai ayahmu, izinkan saya mengatakan, "Apa yang kamu pikirkan ?! Dapatkan kano!"
darron
6
Saya mengalami kesulitan memvisualisasikan mobil rok ringan dengan tongkat. Apakah Anda punya foto?
endolith
8
@dronon - Bukankah itu seharusnya big_floating_skirtobjek yang mengimplementasikan boatantarmuka dalam org.buoyantpaket, dan poleobjek, yang memiliki semacam pola pewarisan aneh dengan java.netyang saya tidak ingat sekarang (tetapi jelas dijelaskan dalam UML)?
Kevin Vermeer
2
@sterz: Saya pikir tanpa latar belakang mikroprosesor, dapat dimengerti bahwa Anda mungkin tidak menyadari betapa tidak tepatnya Java pada mikro 8-bit. Maaf jika komentar pertama saya terdengar kasar ... "Jangan lakukan itu" sepertinya terlalu lemah.
darron
1
@dronon: terima kasih atas analogi "menembak burung dengan meriam"
sterz

Jawaban:

32

Jika Anda tidak berpengalaman dalam bidang pemrograman mikroprosesor / mikrokontroler, Anda mungkin harus belajar C terlebih dahulu, sehingga Anda dapat memahami kapan dan mengapa Java adalah pilihan yang buruk untuk sebagian besar proyek mikrokontroler.

Apakah Anda membaca batasan pada JVM yang Anda tautkan? Ini termasuk masalah-masalah berikut:

  • Memori program sekecil 512 byte (bukan KB, dan jelas bukan MB)
  • Hanya 768 byte RAM (di mana variabel Anda pergi. Anda dibatasi hingga 768 karakter string dengan batasan ini.)
  • Tentang 20k Java opcodes per detik pada AVR 8 Mhz.
  • Hanya menyertakan java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, kelas kontrol JVM, dan kelas IO asli. Anda tidak akan dapat melakukan impor java.util. *; dan dapatkan semua kelas yang tidak ada dalam daftar ini.

Jika Anda tidak terbiasa dengan arti pembatasan ini, pastikan Anda memiliki paket B jika ternyata Anda tidak dapat benar-benar melakukan proyek dengan Java karena batasan ruang dan kecepatan.

Jika Anda masih ingin menggunakan Java, mungkin karena Anda mengharapkan perangkat diprogram oleh banyak orang yang hanya mengenal Java, saya sangat menyarankan untuk mendapatkan perangkat keras yang lebih besar, kemungkinan sesuatu yang menjalankan Linux tertanam. Lihat halaman ini dari Oracle untuk beberapa spesifikasi yang akan diambil untuk menjalankan JVM yang tertanam, di FAQ diskusi mereka, mereka merekomendasikan minimal 32MB RAM dan 32MB Flash. Itu sekitar 32.000 kali RAM dan 1.0000 kali Flash AVR yang Anda lihat. Halaman Java Embedded Intro Oracle menjelaskan lebih detail tentang batasan JVM. Nada suara mereka, seperti yang Anda duga, jauh lebih ramah-Java daripada saya. Sadarilah bahwa jenis perangkat keras ini jauh lebih sulit untuk dirancang daripada AVR 8-bit.

Saya seorang mahasiswa teknik komputer dengan minor ilmu komputer. Departemen CS universitas saya telah meminum Java Kool-aid, jadi banyak siswa dalam program teknik hanya mengetahui Java (yang merupakan keadaan menyedihkan bagi seorang programmer, setidaknya mempelajari beberapa Python atau C ++ jika Anda tidak ingin belajar C ...), jadi salah satu profesor saya menerbitkan C Cheat Sheet untuk siswa dengan pengalaman Java selama satu tahun. Hanya 75 halaman; Saya sarankan Anda membaca atau membaca sepintas lalu sebelum membuat keputusan. Menurut pendapat saya, C adalah bahasa yang paling efisien, tahan lama, dan profesional untuk mengembangkan proyek tertanam.

Alternatif lain untuk dipertimbangkan adalah kerangka kerja Arduino . Ini menggunakan versi dilucuti dari bahasa Wiring , yang seperti C ++ tanpa objek atau header. Itu dapat berjalan pada banyak chip AVR, itu pasti tidak terbatas pada perangkat keras mereka. Ini akan memberi Anda kurva belajar yang lebih mudah daripada melompat langsung ke C.

Kesimpulannya,
Palu Emas XKCD
teks Alt: Butuh lima kali mencoba menemukan yang tepat, tetapi saya berhasil menyelamatkan malam kami - jika bukan kapal - pada akhirnya.

Kevin Vermeer
sumber
5
Salah satu komik favorit saya yang pernah saya nikmati.
Kortuk
1
Mmm, keren-ajudan. +1
tyblu
Saya ingin tahu bagaimana JVM dibandingkan dengan "Java iButtons" yang tersedia beberapa dekade yang lalu?
supercat
@kevin tautan "C Cheat sheet" tidak berfungsi! Perbarui!
charansai
6

Lingkungan pemrograman yang paling populer untuk Atmel AVR adalah Arduino . Bahasa Arduino adalah bagian dari C ++.

Arduino "sketsa" / program muncul secara sintaksis sangat mirip dengan Java. Bahasa Wiring yang berasal dari Arduino memiliki implementasi dalam C ++ ( Arduino ), Java ( Processing ) dan Javascript ( processing.js ).

Kedua bahasa memiliki gaya deklarasi, konstruksi loop, dan operator aritmatika yang sama karena nenek moyang mereka yang sama di Algol68. Biasanya, semua objek di Arduino dideklarasikan secara global atau di stack, jadi seperti Java, fungsi anggota dipanggil dengan .operator (mis. LED.flash()).

Bahasa ini akan sangat akrab bagi seorang programmer Java - tetapi, yang penting, sketsa Arduino dikompilasi ke dalam kode asli yang berjalan dengan kecepatan penuh dengan akses perangkat keras penuh. Ini sangat penting untuk mendapatkan hasil maksimal dari mikrokontroler Anda.

Ini APInya .

Arduino menyediakan semua yang Anda butuhkan untuk memulai: perangkat keras berbiaya rendah, lingkungan pengembangan terintegrasi gratis, dan bootloader (sehingga Anda dapat memuat kode melalui USB / serial).

Toby Jaffey
sumber
3
Untuk lebih tepatnya, ini adalah (kemungkinan besar) lingkungan pemrograman paling populer dengan para penghobi, tetapi tidak harus di atas semua pengembang AVR.
pfyon
2
Saya akan menegaskan bahwa Arduino paling populer dengan jumlah pengguna, tetapi tidak dengan jumlah unit produk yang dikirim yang berisi firmware Arduino. Ada banyak pengguna Arduino di luar sana
Toby Jaffey
1
Meskipun "sketsa" dikompilasi, kecepatan akses IO dapat sangat ditingkatkan menggunakan C atau rakitan.
tyblu
1
C ++ dan Java terlihat sangat berbeda bagi saya. ("Arduino" hanya C ++ dengan beberapa struktur aneh termasuk untuk menyembunyikan beberapa bit teknis.)
Nick T
2
@Jason S "Arduino" sketsa "/ program tampak sangat mirip dengan Java"
Toby Jaffey
4

Saya ingin menjelaskan bahwa saya belum pernah menggunakannya sebelumnya, tetapi dulu ada satu tahun yang lalu yang disebut Javelin. Mungkin saja Parallax telah mengakuisisi mereka atau sesuatu, karena sekarang satu-satunya yang muncul adalah "Stempel Javelin". Bertahun-tahun yang lalu ada juga yang dulu bernama Velocity Semiconductor, yang membuat penggantian (untuk) drop-in untuk modul inti Rabbit Semiconductor, dan memiliki JVM di perangkat keras, tetapi perusahaan itu tampaknya telah menghilang. Semoga berhasil dalam pencarian Anda!

Dave
sumber
4

Sun Microsystems digunakan untuk membuat platform yang disebut Sun Spot yang merupakan platform java tertanam pada dasarnya. Sekarang jelas Sun Microsystems sudah tidak ada lagi (Oracle membelinya), tetapi sepertinya Anda masih dapat membeli Sun Spots - http://www.sunspotworld.com/products/ . Saya tidak terlalu suka dengan ide menggunakan Java di lingkungan yang tertanam (level abstraksi yang salah untuk pekerjaan imho), tetapi ini tampaknya merupakan platform yang paling alami untuk Java. Perhatikan spesifikasi pada hal-hal ini - mereka adalah tugas berat 180MHz / RAM 512k, dan mereka tidak murah di $ 400 untuk starter kit.

Jadi saya akan menjadi yang kedua atau ketiga dari responden advokasi Arduino untuk pertanyaan ini. Ada satu komunitas di luar sana yang mendukung Anda jika Anda membutuhkan bantuan. Dan jika Anda memerlukan perangkat keras periferal, lihat "Arduino Shields" di google dan kagum - Anda dapat melakukan apa saja dari motor kontrol servo untuk naik ke jaringan nirkabel 802.11 dengan kombinasi perisai yang tepat. Tidak praktis untuk mempelajari C (pointer mengatakan apa !?) tanpa waktu latihan, tetapi Anda dapat mulai menulis sketsa Arduino dalam waktu singkat ... Anda juga bisa mendapatkan platform Arduino "asli" sekitar $ 30 dan klon (mis. RBBB atau DorkBoard) dengan harga di bawah $ 15.

vicatcu
sumber
ah ya, saya melihat itu di Maker Faire dua tahun lalu! Perangkat yang cukup keren.
Dave
Fitur pembunuh untuk SunSpots bukanlah Java, tetapi fitur nirkabel bawaan memungkinkan mereka untuk berkomunikasi satu sama lain. Jika Anda ingin kesadaran satu sama lain atau komunikasi nirkabel yang mudah dengan home base, itu sangat, sangat bagus.
Thorbjørn Ravn Andersen
3

Parallax membuat Javelin Stamp , sebuah CoM (Computer-on-Module) yang menjalankan JVM.

Ini $ 60 dan mengeksekusi ~ 8,500 instruksi Java / detik.

Juga, PCB berwarna merah muda (Sungguh!)

Connor Wolf
sumber
2

Sistem ajile membuat berbagai chip java asli dan papan eval yang tertanam asli.

Mereka menjalankan bare metal java. Sangat menyenangkan.

www.ajile.com membuat chip dan papan eval.

www.systronix.com menjual berbagai perangkat keras java yang disematkan.

Saya telah menggunakan AJ-100 dari ajile untuk pekerjaan yang menuntut, mereka sangat baik untuk bekerja dengan. Dan tidak, mereka tidak semurah avr tetapi mereka memproses data seperti pentium low-end.

Chip Ajiles merespons interupsi (interupsi latensi) dalam waktu di bawah 1 mikrodetik.

Tim Williscroft
sumber
'tidak pernah melakukan itu pada sistem C tertanam' ??? Melakukan apa? 1 us latensi? Kecepatan tinggi? Hampir tidak. Saya pikir Anda lupa 1GHz + DSP, banyak ARM, dan beberapa lainnya. Banyak orang menulis ini hanya dengan C logam telanjang (tanpa OS, dll). Saya akan memberi Anda bahwa jenis hal ini adalah cara rasional setengah jalan untuk menggunakan Java dalam embedded (di luar OS skala Linux penuh) ... meskipun setelah melihat sekilas pada Systronix, saya akan mengatakan Anda membayar premi yang bagus untuk kenyamanan kecil itu. Saya akan menggunakan ARM tertanam. Juga, banyak tautan ke proyek-proyek di luar Systronix sudah mati.
darron
Oh, dan TINI benar-benar bodoh. JVM dalam ROM pada 8051. Dengan bodoh saya mencoba satu jalan kembali ketika saya ingin Ethernet mudah, dan bahkan dalam C hal itu hanya dibanjiri oleh lalu lintas siaran LAN perusahaan normal. Ini akan menjadi produk yang bagus jika mereka memasarkannya seperti Perangko Dasar Parallax, tetapi mereka tidak. Ini tidak cocok untuk tujuan apa pun selain hobi.
darron
1
Chip ini beroperasi pada beberapa ratus megahertz. 1uS latensi dimungkinkan saat diprogram dalam C pada prosesor yang berjalan 100 kali lebih lambat dari perangkat ini. Anda dapat melakukan beberapa hal yang sangat keren (seperti iPad dan telepon Droid) dengan prosesor yang setara, tetapi memposting ini sebagai alternatif untuk AVR 8-bit dalam pertanyaannya hampir tidak sebanding dengan apel dengan apel.
Kevin Vermeer
@reemrevnivek: Mengingat OP ingin Java, saya akan menganggap bagian Ajile sesuai karena itu adalah satu-satunya cara yang masuk akal untuk menjalankan Java tertanam (di luar OS Linux lengkap atau semacamnya). Jika paragraf terakhir dan bit TSTIK tidak ada di sana, saya bahkan membatalkannya.
darron
2

Pengalaman pribadi saya adalah bahwa kode C untuk memprogram dan memulai dengan AVR cukup mudah, saya juga berasal dari bertahun-tahun melakukan java, dan setelah sekitar 2 bulan menggunakan sketsa arduino saya menjatuhkan lingkungan dan pergi untuk avr-gcc, situs seperti avrfreaks memudahkan untuk menemukan jawaban untuk masalah umum. (Saya masih melakukan semua pada Arduino Duemillenove yang saya percayai)

Menggunakan gerhana untuk mengkompilasi dan "menyebarkan" yaitu menulis ke chip, juga bagus karena saya tidak harus berurusan dengan IDE lain

Saya pikir sebenarnya lebih sulit untuk mendapatkan sekitar register, register 16 bit dan membacanya dalam urutan yang tepat, menyela, timer, PWM perangkat keras, daripada bahasa pemrograman itu sendiri.

webclimber
sumber
1

Sementara saya biasanya akan menjadi "belajar C dan memahami apa prosesor sebenarnya" kamp di mana pekerjaan tertanam yang bersangkutan, ada baiknya menunjukkan bahwa chip lengan kecil tidak jauh lebih mahal daripada AVR, dan dalam hampir masuk akal posisi untuk menangani tugas-tugas sederhana di atas jvm.

Chris Stratton
sumber
1

NanoVM adalah Java Virtual Machine yang dirancang untuk berjalan pada mikrokontroler AVR 8-bit.

(dari beranda)

Ini bukan Java VM berfitur lengkap dan tidak akan pernah ada. Itu akan selalu terbatas pada bagian kecil dari bahasa java dan perpustakaan java standar dan beberapa metode spesifik aplikasi. Selain itu, ini tidak dimaksudkan untuk menggantikan C sebagai cara standar pemrograman mikrokontroler. Itu kurang fleksibel dan memiliki kinerja yang lebih rendah daripada program C atau assembler.

The NanoVM adalah cara untuk menyediakan antarmuka pemrograman terbatas tetapi dapat dikontrol untuk perangkat berbasis mikrokontroler. Dengan sebagian besar kode khusus perangkat keras menjadi bagian dari NanoVM itu sendiri, pengguna dapat fokus pada aplikasi itu sendiri. Jika pengguna diberi perangkat yang dilengkapi dengan NanoVM, ia tidak perlu memikirkan perangkat keras itu sendiri. Selain itu, ia tidak memerlukan kompiler khusus target atau sejenisnya. Yang dia butuhkan hanyalah kompiler java standar dan NanoVMTool yang ditulis dalam java. Dengan demikian, seluruh rantai pengembangan bekerja pada perangkat apa pun yang memiliki kompiler java dan dapat menjalankan kode java. Dengan abstraksi perangkat keras yang disediakan NanoVM, pengguna bahkan tidak perlu peduli dengan tipe mikrokontroler yang menjadi target.

Toby Jaffey
sumber
1

Ini tidak cukup Java - atau 8 bit, tetapi ada penerjemah Javascript yang tersedia untuk mikrokontroler ARM daya rendah yang disebut Espruino .

Gordon Williams
sumber