Программы для микроконтроллеров java

MCU Java Source

Это кросс-компилятор из языка Java в С, который позволяет писать прошивку для микроконтроллера на Java.

Основные возможности

  • Исходный код пишется на Java, а не C.
  • Исходный код на Java переводится программой в исходный код на C, который компилируется и прошивается в контроллер. МК (микроконтроллер) ничего не интерпретирует.
  • Не нужно вручную работать с регистрами! Пишите, например, timer.setMode(TimerMode.FAST); вместо неудобного TCCR1B |= (1 <
  • Установка регистров МК при включении питания делается отдельно в функции init() и сильно оптимизирована.
  • Внутренние устройства МК (например, таймеры) представлены как Java объекты.
  • Прерывания представлены как слушатели объектов (listeners, например ExternalInterruptListener, TimerCompareListener). Естественно, методы addXxxListener() тоже работают.
  • UART использует входящие и исходящие потоки (input and output streams), как привычно в Java.
  • Пользовательские объекты
  • Удобная документация (Javadoc) для всех доступных объектов и методов (функций).
  • Перед переводом исходный код компилируется Java-компилятором. Это предотвращает множество ошибок.
  • Для приложений, сильно оптимизированных под конкретный МК, возможно работать с регистрами напрямую, через класс Register , если невозможно сделать требуемое действие другим способом.
  • Можно добавить новые МК и даже платформы, если для них существует С-компилятор.

Чем программа является и не является

MCU Java Source — это:

MCU Java Source не является:

  • JVM (Java Virtual Machine, виртуальная Java машина) для МК. Весь Java код переводится в C на уровне исходников, потом компилируется в машинный код.
  • Инструментом для AVR32 с аппаратной JVM. Эта программа предназначена для простых и дешевых МК.
Читайте также:  Разметка страницы html div

Поддерживаемые платформы МК / устройства

AVR

Компилятор — avr-gcc (или пакет WinAVR)

Элементы исходного кода Java

Поддерживаемые (уже реализованные)

  • final . Примитивные поля с атрибутом final превращаются в #define . Строки и примитивные массивы заносятся в память программ и достаются оттуда во время использования. Никакой ручной работы с памятью программ — всего лишь сделайте поле final!
  • Слушатели. Только слушатели прерываний поддерживаются. Слушатели прерываний превращаются в обработчики прерываний.
  • Переменные/поля. Только примитивные (и примитивные массивы) переменные переходят в исходный код С, работа с объектами MCU Java source интерпретируется программой, объекты пользователя пока не поддерживаются.
  • volatile переходит в исходный код С. Используйте его, когда переменная используется и в фоновой нити (методы init(), start()), и в прерывании.
  • byte и boolean типы поддерживаются через typedef unsigned char.
  • Ввод/вывод. Классы InputStream и OutputStream используются в UART. Так как кодировщики/декодировщики кодовых страниц (charset, encoding) не вмещаются в МК, используется только кодировка по умолчанию. Поэтому нет классов BufferedReader, BufferedWriter , вместо них используются BufferedInputStream, BufferedOutputStream .
  • Объекты пользователя.
  • Библиотека внешних устройств (частично):
    • Многоразрядный светодиодный индикатор (Multi digit LED display)
    • Символьный ЖКИ (Character LCD)
    • ЖКИ от Nokia 3310 (Nokia 3310 LCD)

    Ещё не реализованные

    • Библиотека внешних устройств (частично реализована), таких, как I 2 C EEPROM, датчик температуры.
    • Анонимные классы и операторы типа method(new MyListener())
    • Static initializers и instance initializers будут добавлены в функцию start()
    • @Section аннотация. Будет обозначать, куда помещать константы — во Flash или EEPROM. Сейчас по умолчанию Flash. Например: @Section(Section.EEMEM)
      private static final String MESSAGE = «Hello, EEPROM!»;
    • Двухнитевая модель: фоновая нить и нить прерываний (обработки событий). (Two-threaded model: background thread and interrupt (Event Dispatch) thread). Задачи (Task implements Runnable ) , как в TinyOS 2.0. Задачи будут выполнятся в фоновой нити, а запланировать можно из любого места.
    • Симулятор: Java исходник можно скомпилировать и выполнить на компьютере. То есть, программа будет симулироваться.

    Не известно, как сделать

    • synchronized полнстью игнорируется. Используйте volatile вместо него.
    • Исключения. Код на языке С их не поддерживает.
    • static полностью игнорируется, поскольку в C это имеет совсем другой смысл.

    Системные требования

    Как это работает

    Исходный код Java компилируется, а также преобразовывается в XML вид (java-ml) с помощью модифицированной версии Java2XML. Потом каждый XML элемент обрабатывается программой MCU Java Source Translator. Все примитивные переменные не изменяются, все объекты переводятся. Для перевода методов, которые работают с регистрами МК, есть отдельный переводчик для каждого МК. Все слушатели преобразовываются в обработчики прерываний. Классы объектов пользователя не обрабатываются через XML, они вызываются через reflection. Результат перевода — XML вид исходного кода на С. Потом исходный код С создается из XML.

    Источник

Оцените статью