El mundo de la tecnología para el consumidor final, es decir, para todos nosotros, cada día usa más sistemas embebidos. Por ejemplo, no es raro que la cafetera tenga un microcontrolador, o bien, que el horno de microndas tenga una serie de programas para calentar diversos alimentos. Vamos, que hasta algunas lavadoras de ropa tienen programas de logica difusa (fuzzy logic) y no es broma, para lavar cierto tipo de ropa.
Todos estos dispositivos tienen que ser programados y es claro que lo ideal es tener lenguajes de alto nivel para que así el nivel de abstracción de los desarrolladores no se pierda en código de máquina, o en implementaciones muy específicas al hardware. Por ello, es de agradecerse que alguien se halla planteado escribir uJ (presumiblemente debería leerse “muJ”), una máquina virtual de Java para microcontroladores.
uJ está implementada totalmente en bytecode de Java y escrito todo en C, por lo que puede ser ejecutado en principio en cualquier procesador. Se ha probado su funcionalidad con éxito en procesadores de 8 bits AVR (ATMega64 y ATmega128), algunos chips Pic de 16 bits de Microchip (dsPIC33FJ128GP802, dsPIC33FJ64GP802, PIC24FJ32GA002) y en otras arquitecturas. Es eficiente, rápido e utilizable para situaciones reales. Los requerimientos mínimos son un par de docenas de K para el espacio requerido por el código y un par de cientos de bytes de RAM para empezar. Desde luego, siempre se agradece más memoria.
De acuerdo al autor, mucha gente quiere programar microcontroladores, pero pocos entienden el manejo de memoria, los periféricos y C en general. Para colmo, pocos comprenden el manejo de apuntadores y de otras estructuras de C, pero igual quieren tener un lenguaje sencillo para programar. Por ello Dmitry Grinberg se dio a la tarea de hacer una máquina virtual completa de Java para microcontroladores. Las metas fueron simples: soporte completo de bytecode, incluyendo herencia, excepciones, interfaces, sincronización, threading, recolección de basura, arreglos (incluyendo los multidimensionales), etcétera.
El proyecto, dice el autor, fue un reto interesante, particularmente en lo que se refiere a los límites de memoria, una velocidad razonable de ejecución y en general, el diseño. La máquina virtual es muy modular por lo que varias piezas de la misma pueden deshabilitarse o habilitarse para ajustarla en tamaño y características. Una de las guías más importantes fue no copiar los archivos de clases a la RAM. Esto haría que quedara muy poco espacil para poder correr la JVM (Java Virtual Machine). Así pues, puede verse que la tarea no fue fácil.
Dmitry Grinberg nació en Rusia a finales de los ochentas del siglo pasado. Vivió en un pequeño departamento con su hermana, padres y su abuela, además de Linda, su perra. Aprendió a hablar, leer y escribir muy rápidamente gracias a sus padres. Su progenitor le enseñó C a partir de los seis años por lo cual Dmitri se considera programador desde esa edad. En 1999 se mudaron a los EEUU. Se graduó y se mudó a California. Ha trabajado en VMWare, Lab126, Kno y Google.
He aquí una demostración de su sistema:
Referencias: