JavaRush /Блог /Архив info.javarush /В теории о байт-коде, JVM и микроконтроллерах | Java-код ...
Gro
19 уровень
Минск

В теории о байт-коде, JVM и микроконтроллерах | Java-код для МК

Статья из группы Архив info.javarush
Статья-черновик. В конечном итоге напишу несколько вики-подобных статей, по схеме:

Тема : Где и как работает Ява
-Об устройстве Явы
-О железе
-Как этот софт работает на железе

Статья была об проблемах, с которыми я столкнулся. Изучив инфу, дополнил её ответами.
Представляет из себя кашу-малашу из тем сверху.

Доброго!

Предисловие.(Оффтоп)
Было и есть у меня нарастающее желание сконструировать кое-какой, вполне физический агрегат.
Агрегат,в основе которого лежит одна простая, но поглотившая меня целиком идея.
Идея, задавшая мне направления развития на ближайшие десять лет.
В теории уже полу-готова конструкция устройства, реализующего кроху возможностей той запланированной махины.

Именно сейчас, при доработке полу-готовой конструкции, погрузившись более детально в компоненты, я столкнулся с необходимостью управления сервомоторами и, соответственно, программированием каких-то "мозгов".

Здесь и подходит череда вопросов, обьеденить которые можно в "Можно ли, и как, заставить МК выполнять java-код ?".




Тело. Детально о вопросах.
Мы помним, что java-код, который мы пишем, преобразуется в byte-код, который, уже в свою очередь, интерпретируется JVM в машинный код, код, состоящий из команд, понимаемых железом. Всем понятна причина именно такого расклада событий - портируемость/переносимость в купе с бОльшей скоростью (по сравнению с просто интерпретируемыми языками).

После того, как я узнал это, у меня возникли вопросы, оставшиеся неотвеченными, всплывшие и дополненные новыми вот сейчас.
1. Можно ли стандартными средствами JVM полностью прогнать весь byte-код в машинный, единовременно / Скомпилировать его ?
if false.Есть сторонние средства ? Хоть как-то ?

2. Поддерживает ли JVM работу с микроконтроллерами/контроллерами ? (мало знаю о железных "мозгах", если есть знающие - расскажите).
if true.Есть отличия\особенности от работы на привычных нам ПК ?




Обновлено! 09.04
Об 1. Стандартным средством ( подразумевалась JVM ) прогнать код до машинного возможности нет, по крайней мере так нам говорит вики, но, оттуда же, стало ясно, что есть сторонне средство - GCJ. Является альтернативой JVM и имеет в своём арсенале вот такую приятную плюшку. Точной информации об платформах(аппаратных), под которые поддерживается компиляция, не нашел - "многих".
Разница byte-code и native-code:
1)native быстрее запускается
2)Нет никаких гарантий, что native будет работать быстрее
3)Как я полагаю, native не будет тащить на себе ОС и JVM, что существенно отражается на кол-ве необходимой для работы программы ROM.

Возможно, это решение может выступить альтернативой ME-версии.
(Под здоровенным вопросом, ибо :
1) Не известно, поддерживает ли GCJ такие низкопроизводительные аппаратные платформы.
2) Нет информации о производительности этого кода.

Обновлено. 11.04
Об 2. Любая версия языка Java, будь то ME,SE или Embedded, работает в паре с JRE, интерпретируясь. Кроме случая выше и двух, будущих описанными ниже.
Во-первых, были попытки выщемить из цепи ОС, заменив её своим, исключительно Ява-ориентированным средством. О том, что это такое, тут.
Во-вторых, оказалось, что существуют Ява-ориентированные процессоры, их особенностью является встроенный сопроцессор, который аппаратно интерпретирует byte-code(!не программно) и уже его отдаёт на исполнение.
Подробнее о Jazelle.
Богато тут.


Оффтоп
Идея, о которой шла речь - "обратная связь", конкретно реализуемый тип в будущем прототипе - давление/сопротивление давлению.
Пользуясь случаем. Читающий народ уровней 15-25, давайте бахнем маленькое комьюнити для общения/тэт-а-тэт. Ибо одному - вообще не гут, и даже больше - жуть полнейшая.

Комментарии (11)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Gro Уровень 19
9 апреля 2015
Обновлено.
kosmoflyko Уровень 9
7 апреля 2015
Для RasberryPi есть Java 8 Embedded, JavaME и Avian (http://oss.readytalk.com/avian/).

Для AVR микроконтролеров:
NanoVM www.harbaum.org/till/nanovm/index.shtml
HaikuVM haiku-vm.sourceforge.net/
Bajos code.google.com/p/bajos/

Для STM32:
MicroEJ www.is2t.com/products/ (платная)

Для PIC:
uJ dmitry.gr/index.php?r=05.Projects&proj=12.%20uJ%20-%20a%20micro%20JVM
pleasuretokill Уровень 39
7 апреля 2015
Маленькое комьюнити — да. Куда нести себя?
maks11 Уровень 30
7 апреля 2015
Мне кажется что для вашей задачи лучше подойдет платформа arduino, конечно там не java, но там есть куча доп комплектующих(моторчиков, контроллеров и т.д), море мануалов, довольно несложно программируется.
Kishuomi Уровень 22
7 апреля 2015
Есть такая JAVA ME. Вероятно она подойдет под ваши запросы.