Microcontrollore con API Java


10

Il mio team hardware sta progettando di utilizzare un microcontrollore Atmel AVR a 8 bit per un progetto futuro.

Per quanto ne so, deve essere programmato in C. Ho trovato un JVM per AVR, anche se è più limitato delle librerie C native di Atmel.

Potete suggerirmi un microcontrollore a 8 bit che supporta Java?

PS. Non conosco C e non ho esperienza nella programmazione a microprocessore.


28
Supponiamo che qualcuno vendesse una grande gonna galleggiante e alcuni lunghi pali che dicevano che potevi usare con la tua macchina per andare a pescare su un lago. Dopo aver lottato per tre giorni per indossarlo, entri a circa 15 piedi nel lago prima che l'auto si ribalti e affondi. Tuo padre sarà davvero arrabbiato. Avevi superato il negozio di barche locale con una bella canoa. La canoa è il compilatore C del micro e l'auto floaty con i bastoncini è Java su un microcontrollore a 8 bit. Fortunatamente, questo non è successo ... ci stai chiedendo dove puoi trovare i galleggianti. Quindi, come tuo padre, lasciami dire "A cosa stai pensando ?! Prendi una canoa!"
Darron,

6
Sto avendo problemi a visualizzare la macchina della gonna floaty con i bastoncini. Hai qualche foto?
endolith,

8
@darron - Non dovrebbe essere un big_floating_skirtoggetto che implementa l' boatinterfaccia nel org.buoyantpacchetto, e poleoggetti, che hanno una sorta di strano modello di eredità con java.netquello che non ricordo ora (ma è chiaramente descritto in UML)?
Kevin Vermeer,

2
@sterz: Penso che senza uno sfondo a microprocessore sia perfettamente comprensibile che potresti non aver capito quanto sia fuori posto Java su un micro a 8 bit. Scusate se il mio primo commento è sembrato duro ... Un semplice "Non farlo" sembrava troppo debole.
darron,

1
@darron: grazie per l'analogia "sparare agli uccelli con un cannone"
sterz

Risposte:


32

Se non hai esperienza nel campo della programmazione a microprocessore / microcontrollore, dovresti probabilmente imparare prima C, in modo da poter capire quando e perché Java è una scelta sbagliata per la maggior parte dei progetti di microcontrollori.

Hai letto le restrizioni sulla JVM che hai collegato? Include i seguenti problemi:

  • Almeno 512 byte di memoria del programma (non KB e sicuramente non MB)
  • Fino a 768 byte di RAM (dove vanno le variabili. Con questa restrizione sei limitato a 768 caratteri di stringhe.)
  • Circa 20k codici operativi Java al secondo su 8 Mhz AVR.
  • Include solo java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, una classe di controllo JVM e una classe IO nativa. Non sarà possibile eseguire un'importazione java.util. *; e ottieni tutte le classi non in questo elenco.

Se non hai familiarità con il significato di queste restrizioni, assicurati di avere un piano B se si scopre che non puoi effettivamente eseguire il progetto con Java a causa delle restrizioni di spazio e velocità.

Se vuoi ancora andare con Java, forse perché ti aspetti che il dispositivo sia programmato da molte persone che conoscono solo Java, ti consiglio vivamente di ottenere hardware più grande, probabilmente qualcosa che esegua Linux incorporato. Vedi questa pagina da Oracle per alcune specifiche per le quali eseguire la JVM integrata, nelle FAQ della loro discussione raccomandano un minimo di 32 MB di RAM e 32 MB di Flash. Sono circa 32.000 volte la RAM e 1.0000 volte il Flash dell'AVR che stai guardando. La pagina Oracle Java Embedded Intro fornisce ulteriori dettagli sulle restrizioni della JVM. Il loro tono di voce è, come puoi immaginare, molto più compatibile con Java del mio. Tenere presente che questo tipo di hardware è molto più difficile da progettare rispetto a un AVR a 8 bit.

Sono uno studente di ingegneria informatica con un minore in informatica. Il dipartimento CS della mia università ha bevuto il Java Kool-aid, quindi molti studenti del programma di ingegneria arrivano conoscendo solo Java (che è un triste stato di cose per un programmatore, almeno impari un po 'di Python o C ++ se non lo fai voglio imparare C ...), così uno dei miei professori ha pubblicato un C Cheat Sheet per studenti con un anno di esperienza in Java. Sono solo 75 pagine; Ti suggerisco di leggerlo o scremarlo prima di prendere una decisione. A mio avviso, C è il linguaggio più efficiente, durevole e professionale in cui sviluppare un progetto integrato.

Un'altra alternativa da considerare è il framework Arduino . Utilizza una versione ridotta del linguaggio Wiring , che è come C ++ senza oggetti o intestazioni. Può funzionare su molti chip AVR, sicuramente non è limitato al loro hardware. Ti darà una curva di apprendimento più semplice del semplice saltare direttamente in C.

In conclusione,
XKCD Golden Hammer
testo alternativo: Mi ci sono voluti cinque tentativi per trovare quello giusto, ma alla fine sono riuscito a salvare la nostra notte - se non la barca.


5
Uno dei miei fumetti preferiti che mi sia mai piaciuto.
Kortuk,

1
Mmm, aiutante. +1
tyblu,

Mi chiedo come quella JVM si confronta con i "Java iButtons" che erano disponibili un paio di decenni fa?
supercat

@kevin Il link "C Cheat sheet" non funziona! Per favore aggiornare!
charansai,

6

L'ambiente di programmazione più popolare per Atmel AVR è Arduino . Il linguaggio Arduino è un sottoinsieme di C ++.

Gli "schizzi" / i programmi di Arduino appaiono sintatticamente molto simili a quelli di Java. Il linguaggio Wiring da cui deriva Arduino ha implementazioni in C ++ ( Arduino ), Java ( Processing ) e Javascript ( processing.js ).

Entrambe le lingue condividono lo stesso stile di dichiarazione, costrutti loop e operatori aritmetici a causa della loro origine comune in Algol68. In genere, tutti gli oggetti in Arduino sono dichiarati globalmente o in pila, quindi come Java, le funzioni membro vengono chiamate con l' .operatore (ad es. LED.flash()).

Il linguaggio sarà molto familiare a un programmatore Java, ma, soprattutto, gli schizzi di Arduino sono compilati in codice nativo che viene eseguito alla massima velocità con accesso completo all'hardware. Questo è fondamentale per ottenere il massimo dal tuo microcontrollore.

Ecco l' API .

Arduino offre tutto ciò di cui hai bisogno per iniziare: hardware a basso costo, un ambiente di sviluppo integrato gratuito e un bootloader (in modo da poter caricare il codice su USB / seriale).


3
Per essere più precisi, è (molto probabilmente) l'ambiente di programmazione più popolare tra gli hobbisti, ma non necessariamente su tutti gli sviluppatori AVR.
pfyon,

2
Affermerei che Arduino è più popolare per il numero di utenti, ma non per il numero di unità di prodotto spedite contenenti firmware Arduino. Ci sono molti utenti Arduino là fuori
Toby Jaffey,

1
Sebbene vengano compilati "schizzi", la velocità di accesso all'IO può essere notevolmente migliorata utilizzando C o assembly.
tyblu,

1
C ++ e Java sembrano molto diversi da me. ("Arduino" è solo C ++ con qualche strana struttura di inclusione per nascondere alcuni dei pezzi tecnici.)
Nick T

2
@Jason S "Schizzi" di Arduino "/ i programmi sembrano molto simili a Java"
Toby Jaffey,

4

Voglio chiarire che non ne ho mai usato uno prima, ma un tempo prima si chiamava Javelin. È possibile che Parallax li abbia acquisiti o qualcosa del genere, perché ora l'unico che viene fuori è il "Timbro del giavellotto". Anni fa c'era anche una società chiamata Velocity Semiconductor, che ha fatto una sostituzione (presumibilmente) drop-in per i moduli principali di Rabbit Semiconductor, e aveva una JVM in hardware, ma quella società apparentemente è svanita. Buona fortuna nella tua ricerca!


4

Sun Microsystems era solita creare una piattaforma chiamata Sun Spot, che in pratica era una piattaforma Java integrata. Ora ovviamente Sun Microsystems non è più in circolazione (Oracle li ha acquistati), ma sembra che tu possa ancora acquistare Sun Spots - http://www.sunspotworld.com/products/ . Non sono grande sull'idea di usare Java in un ambiente incorporato (livello di astrazione errato per il lavoro imho) ma questa sembrerebbe la piattaforma embedded più naturale per Java. Nota le specifiche su queste cose: sono pesanti 180MHz / 512k RAM e non sono economici a $ 400 per uno starter kit.

Quindi sarò un secondo o un terzo dei rispondenti del patrocinio di Arduino a questa domanda. C'è un inferno di una comunità là fuori per aiutarti se hai bisogno di aiuto. E se hai bisogno di hardware periferico, cerca "Arduino Shields" su Google e lasciati stupire: puoi fare qualsiasi cosa, dai servomotori di controllo per saltare su una rete wireless 802.11 con la giusta combinazione di schermi. Non è pratico imparare C (il puntatore dice cosa !?) senza un po 'di tempo di pratica, ma puoi iniziare a scrivere schizzi Arduino in pochissimo tempo ... Puoi anche ottenere piattaforme Arduino "reali" intorno a $ 30 e cloni (ad esempio RBBB o DorkBoard) per meno di $ 15.


ah sì, l'ho visto alla Maker Faire due anni fa! Dispositivo abbastanza interessante.
Dave,

La funzione killer per SunSpots non è Java, ma le cose wireless integrate che consentono loro di comunicare tra loro. Se vuoi la consapevolezza reciproca o una facile comunicazione wireless con la base di casa, è molto, molto bello.
Thorbjørn Ravn Andersen,

3

Parallax crea il Javelin Stamp , un CoM (Computer-on-Module) che esegue una JVM.

È $ 60 ed esegue un ardente ~ 8.500 istruzioni Java / sec.

Inoltre, il PCB è rosa (davvero!)


2

I sistemi Ajile producono una varietà di chip java e schede di valutazione nativi integrati e in tempo reale.

Corrono java metal nudo. È molto piacevole.

www.ajile.com realizza i chip e le schede di valutazione.

www.systronix.com vende una varietà di hardware java incorporato.

Ho usato AJ-100 di Ajile per lavori impegnativi, sono molto belli con cui lavorare. E no, non sono economici come un avr ma elaborano i dati come un pentium di fascia bassa.

I chip di Ajiles rispondono agli interrupt (latenza di interrupt) in meno di 1 microsecondo.


'mai farlo su un sistema C incorporato' ??? Fare? 1 latenza USA? Alta velocità? Quasi. Penso che tu stia dimenticando 1GHz + DSP, molti ARM e molti altri. Molte persone scrivono per questi con C bare metal (senza sistema operativo, ecc.). Ti garantirò che questo tipo di cose è un modo a metà razionale di usare Java in embedded (al di fuori di un sistema operativo completo su scala Linux) ... anche se dopo aver dato una rapida occhiata a Systronix direi che sembra che tu stia pagando un buon premio per quella piccola comodità. Avrei sicuramente incorporato ARM. Inoltre, molti dei collegamenti a quei progetti fuori Systronix sono morti.
Darron,

Oh, e TINI è follemente stupido. JVM in ROM su un 8051. Ho tentato stupidamente di tornare indietro quando volevo una facile Ethernet, e anche in C la cosa era semplicemente sommersa dal traffico di trasmissione di una normale LAN aziendale. Sarebbe un prodotto eccellente se lo commercializzassero come i Timbri di base di Parallax, ma non lo fanno. Non è adatto a nessuno scopo non hobbistico.
Darron,

1
Questi chip funzionano a diverse centinaia di megahertz. La latenza 1uS è possibile se programmata in C su un processore che gira 100 volte più lentamente di questi dispositivi. Puoi fare cose piuttosto interessanti (come iPad e telefoni Droid) con processori equivalenti, ma pubblicarlo come alternativa all'AVR a 8 bit nella domanda non è certo un confronto da mele a mele.
Kevin Vermeer,

@reemrevnivek: dato che l'OP voleva Java, considererei la parte Ajile appropriata in quanto è uno degli unici modi ragionevoli per eseguire Java incorporato (al di fuori di un sistema operativo Linux completo o qualcosa del genere). Se l'ultimo paragrafo e i bit TSTIK non fossero presenti, lo voterei persino.
darron,

2

La mia esperienza personale è che il codice C da programmare e iniziare con AVR è abbastanza semplice, vengo anche da molti anni di java e dopo circa 2 mesi di utilizzo degli schizzi di Arduino ho abbandonato l'ambiente e ho scelto avr-gcc, siti come avrfreaks rendono facile trovare le risposte ai problemi più comuni. (Faccio ancora tutto sul mio fidato Arduino Duemillenove)

Usare eclipse per compilare e "distribuire", ovvero scrivere sul chip, è anche bello perché non ho a che fare con un altro IDE

Penso che in realtà sia più difficile orientarsi tra registri, registri a 16 bit e leggerli nell'ordine appropriato, interruzioni, timer, PWM hardware, rispetto al linguaggio di programmazione stesso.


1

Mentre in genere sarei del campo "impara C e capisci cosa fanno effettivamente i processori" per quanto riguarda il lavoro integrato, vale la pena sottolineare che un chip a braccio piccolo non è molto più costoso di un AVR ed è quasi plausibile posizione per gestire semplici compiti in cima a una jvm.


1

NanoVM è una macchina virtuale Java progettata per funzionare su microcontrollori AVR a 8 bit.

(dalla homepage)

Non è una VM Java con funzionalità complete e non lo sarà mai. Sarà sempre limitato a un piccolo sottoinsieme del linguaggio Java e alle librerie Java standard e ad alcuni metodi specifici dell'applicazione. Inoltre, non intende sostituire C come metodo standard di programmazione dei microcontrollori. È meno flessibile e ha prestazioni inferiori rispetto ai programmi C o assembler.

NanoVM è un modo per fornire un'interfaccia di programmazione limitata ma controllabile a un dispositivo basato su microcontrollore. Con la maggior parte del codice più specifico per l'hardware che fa parte del NanoVM stesso, l'utente può concentrarsi sull'applicazione stessa. Se a un utente viene assegnato un dispositivo dotato di NanoVM, non è tenuto a pensare all'hardware stesso. Inoltre, non ha bisogno di compilatori specifici per target o simili. Tutto ciò di cui ha bisogno è un compilatore java standard e il NanoVMTool che a sua volta è scritto in java. Pertanto, l'intera catena di sviluppo funziona su qualsiasi dispositivo che ha un compilatore Java e può eseguire codice Java. Con l'astrazione hardware fornita da NanoVM, l'utente non deve nemmeno preoccuparsi del tipo di microcontrollore su cui si basa il target.


1

Non è proprio Java - o 8 bit, ma è disponibile un interprete Javascript per i microcontroller ARM a bassa potenza chiamato Espruino .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.