Microcontrolador con API de Java

10

Mi equipo de hardware planea usar un microcontrolador AVR de 8 bits de Atmel para un proyecto futuro.

Por lo que sé, debe estar programado en C. He encontrado un JVM para AVR, aunque es más limitado que las bibliotecas C nativas de Atmel.

¿Puede sugerirme un microcontrolador de 8 bits que admita Java?

PS. No sé C y no tengo experiencia en la programación de microprocesadores.

    
pregunta sterz

10 respuestas

32

Si no tiene experiencia en el campo de la programación de microprocesadores / microcontroladores, probablemente debería aprender C primero, para que pueda comprender cuándo y por qué Java es una mala elección para la mayoría de los proyectos de microcontroladores.

¿Leyó las restricciones en la JVM que vinculó? Incluye los siguientes problemas:

  • Tan poco como 512 bytes de la memoria del programa (no KB, y definitivamente no MB)
  • Tan solo 768 bytes de RAM (a donde van sus variables. Esta restricción lo limita a 768 caracteres de cadenas)
  • Aproximadamente 20k códigos de operación Java por segundo en 8 Mhz AVR.
  • Solo incluye java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, una clase de control JVM y una clase IO nativa. No podrá realizar una importación java.util. *; y obtenga todas las clases que no estén en esta lista.

Si no estás familiarizado con el significado de estas restricciones, asegúrate de tener un plan B si resulta que no puedes hacer el proyecto con Java debido a las restricciones de espacio y velocidad.

Si aún desea utilizar Java, tal vez porque espera que el dispositivo sea programado por muchas personas que solo conocen Java, sugeriría encarecidamente que el hardware sea más grande, probablemente algo que funcione con Linux integrado. Consulte esta página de Oracle para ver algunas especificaciones que debe buscar ejecutan la JVM incorporada, en las Preguntas frecuentes de su discusión, recomiendan un mínimo de 32 MB de RAM y 32 MB de Flash. Eso es aproximadamente 32,000 veces la memoria RAM y 1,0000 veces el Flash del AVR que está viendo. La página Intro Integrado de Java de Oracle incluye más detalles sobre las restricciones de JVM. Su tono de voz es, como puedes imaginar, mucho más compatible con Java que el mío. Tenga en cuenta que este tipo de hardware es mucho más difícil de diseñar que un AVR de 8 bits.

Soy un estudiante de ingeniería informática con un menor de informática. El departamento de CS de mi universidad ha bebido Java Kool-aid, por lo que muchos estudiantes en el programa de ingeniería solo conocen Java (lo cual es un estado triste para un programador, al menos aprende algo de Python o C ++ si no lo haces). quiero aprender C ...), por lo que uno de mis profesores publicó un Hoja de referencia de C para estudiantes con un año de experiencia en Java. Solo tiene 75 páginas; Le sugiero que lo lea o hojee antes de tomar una decisión. En mi opinión, C es el lenguaje más eficiente, duradero y profesional para desarrollar un proyecto integrado.

Otra alternativa a considerar es el marco Arduino . Utiliza una versión simplificada de la Cableado lenguaje, que es como C ++ sin objetos ni encabezados. Puede ejecutarse en muchos chips AVR, definitivamente no está restringido a su hardware. Te dará una curva de aprendizaje más fácil que simplemente saltar directamente a C.

En conclusión,

Texto alternativo: Me tomó cinco intentos para encontrar el correcto, pero al final logré salvar nuestra noche de fiesta, si no el bote.

    
respondido por el Kevin Vermeer
6

El entorno de programación más popular para el AVR de Atmel es Arduino . El lenguaje Arduino es un subconjunto de C ++.

Los "bocetos" / programas de Arduino aparecen sintácticamente muy similares a Java. El Wiring language del que deriva Arduino tiene implementaciones en C ++ ( Arduino ), Java ( Processing ) y Javascript ( processing.js ).

Ambos lenguajes comparten el mismo estilo de declaración, construcciones de bucle y operadores aritméticos debido a su ascendencia común en Algol68. Normalmente, todos los objetos en Arduino se declaran globalmente o en la pila, por lo que al igual que en Java, las funciones miembro se llaman con el operador . (por ejemplo, LED.flash() ).

El lenguaje será muy familiar para un programador de Java, pero, lo que es más importante, los bocetos de Arduino se compilan en código nativo que se ejecuta a toda velocidad con acceso completo al hardware. Esto es fundamental para aprovechar al máximo su microcontrolador.

Aquí está la API .

Arduino ofrece todo lo que necesita para comenzar: hardware de bajo costo, un entorno de desarrollo integrado y gratuito y un cargador de arranque (para que pueda cargar código a través de USB / serie).

    
respondido por el Toby Jaffey
4

Quiero dejar en claro que no he usado una antes, pero hace un año solía llamarse la jabalina. Es posible que Parallax los haya adquirido o algo así, porque ahora el único que aparece es el "Sello de Jabalina". Hace años, también solía haber una compañía llamada Velocity Semiconductor, que hizo un reemplazo (supuestamente) directo de los módulos centrales de Rabbit Semiconductor, y tenía una JVM en hardware, pero esa compañía aparentemente ha desaparecido. ¡Buena suerte en tu búsqueda!

    
respondido por el Dave
4

Sun Microsystems solía hacer una plataforma llamada Sun Spot, que básicamente era una plataforma Java incrustada. Ahora, obviamente, Sun Microsystems ya no está disponible (Oracle los compró), pero parece que todavía puedes comprar Sun Spots - enlace . No me gusta la idea de utilizar Java en un entorno integrado (nivel de abstracción incorrecto para el trabajo), pero esta parece ser la plataforma integrada más natural para Java. Tenga en cuenta las especificaciones de estas cosas: son una memoria RAM de 180 MHz / 512k y no cuestan $ 400 para un kit de inicio.

Por lo tanto, seré el segundo o el tercero de los encargados de la respuesta de Arduino a esta pregunta. Hay una comunidad increíble para apoyarte si necesitas ayuda. Y si necesita hardware periférico, busque "Arduino Shields" en google y sorpréndase: puede hacer cualquier cosa, desde los servomotores de control para saltar en una red inalámbrica 802.11 con la combinación correcta de protectores. No es práctico aprender C (¿el puntero dice qué?) Sin un poco de tiempo de práctica, pero puede comenzar a escribir bocetos de Arduino en muy poco tiempo ... También puede obtener plataformas Arduino "reales" de alrededor de $ 30 y clones (por ejemplo, RBBB o DorkBoard) por menos de $ 15.

    
respondido por el vicatcu
3

Parallax hace que Javelin Stamp , un CoM (Computer-on-Module) que ejecuta una JVM.

Es de $ 60 y ejecuta una gran cantidad de ~ 8,500 instrucciones / seg. de Java.

Además, el PCB es rosa (¡De verdad!)

    
respondido por el Connor Wolf
2

Los sistemas Ajile hacen una variedad de chips java nativos incrustados en tiempo real y tableros de evaluación.

Se ejecutan Java metal desnudo. Es muy agradable.

www.ajile.com crea las fichas y los tableros de evaluación.

www.systronix.com vende una variedad de hardware java incorporado.

He usado AJ-100 de ajile para trabajos exigentes, es muy agradable trabajar con ellos. Y no, no son tan baratos como un avr, pero procesan datos como un pentium de gama baja.

Los chips de Ajiles responden a interrupciones (latencia de interrupción) en menos de 1 microsegundo.

    
respondido por el Tim Williscroft
2

Mi experiencia personal es que el código C para programar y comenzar con AVR es bastante fácil, también vengo de muchos años haciendo java, y después de aproximadamente 2 meses de uso de arduino Sketches abandoné el entorno y me dirigí a avr- gcc, los sitios como avrfreaks hacen que sea fácil encontrar respuestas a problemas comunes. (Todavía lo hago todo en mi confiable Arduino Duemillenove)

Usar eclipse para compilar y "desplegar", es decir, escribir en el chip, también es bueno ya que no tengo que lidiar con otro IDE

Creo que en realidad es más difícil hacerte una idea de los registros, los registros de 16 bits y leerlos en el orden apropiado, interrupciones, temporizadores, hardware PWM, que el propio lenguaje de programación.

    
respondido por el webclimber
1

Si bien en general yo soy del campo de "aprender C y entender lo que realmente hacen los procesadores" en lo que respecta al trabajo integrado, vale la pena señalar que un chip de brazo pequeño no es mucho más caro que un AVR, y está en una posición casi plausible para manejar tareas simples encima de un jvm.

    
respondido por el Chris Stratton
1

NanoVM es una máquina virtual Java diseñada para ejecutarse en microcontroladores AVR de 8 bits.

(desde la página de inicio)

  

No es una máquina virtual Java con todas las funciones y nunca lo será. Siempre lo sera   estar limitado a un pequeño subconjunto del lenguaje java y el estándar   Bibliotecas java y algunos métodos específicos de aplicación. Además,   no está destinado a reemplazar C como la forma estándar de programación   microcontroladores. Es menos flexible y tiene un rendimiento menor que   C o programas de ensamblador.

     

El NanoVM es una forma de proporcionar una programación limitada pero controlable   Interfaz a un dispositivo basado en microcontrolador. Con la mayoría de los más   El código específico de hardware que forma parte de la propia NanoVM, el usuario puede   centrarse en la propia aplicación. Si a un usuario se le da un dispositivo equipado   con el NanoVM no está obligado a pensar en el hardware en sí.   Además, no necesita ningún compilador específico objetivo o la   me gusta. Todo lo que necesita es un compilador java estándar y el NanoVMTool   que a su vez esta escrito en java. Así, toda la cadena de desarrollo.   funciona en cualquier dispositivo que tenga un compilador java y pueda ejecutar código java.   Con la abstracción del hardware que proporciona NanoVM, el usuario no lo hace   Incluso hay que preocuparse por el tipo de microcontrolador en el que se basa el objetivo   en. El mismo compilador de java y el mismo NanoVMTool se pueden usar con   cualquier sistema basado en NanoVM que se ejecute en cualquier tipo de microcontrolador.

    
respondido por el Toby Jaffey
1

No es del todo Java, o de 8 bits, pero hay un intérprete de Javascript disponible para microcontroladores ARM de bajo consumo llamado Espruino .

    
respondido por el Gordon Williams

Lea otras preguntas en las etiquetas