Язык: English, Русский.
Это кросс-компилятор из языка Java в С, который позволяет писать прошивку для микроконтроллера на Java.
timer.setMode(TimerMode.FAST);
вместо неудобного TCCR1B |= (1<<WGM12); TCCR1A |= (1<<WGM10);
Работа с регистрами ведется автоматически программой MCU Java Source. Теперь нужно помнить только принцип работы устройств МК (таймеров, UART, АЦП), а не регистры и биты.Register
, если невозможно сделать требуемое действие другим способом.Компилятор - avr-gcc (или пакет WinAVR)
final
. Примитивные поля с атрибутом final превращаются в #define
. Строки и примитивные массивы заносятся в память программ и достаются оттуда во время использования. Никакой ручной работы с памятью программ - всего лишь сделайте поле final!volatile
переходит в исходный код С. Используйте его, когда переменная используется и в фоновой нити (методы init(), start()), и в прерывании.byte
и boolean
типы поддерживаются через typedef unsigned char.InputStream
и OutputStream
используются в UART. Так как кодировщики/декодировщики кодовых страниц (charset, encoding) не вмещаются в МК, используется только кодировка по умолчанию. Поэтому нет классов BufferedReader, BufferedWriter
, вместо них используются BufferedInputStream, BufferedOutputStream
.@Section
аннотация. Будет обозначать, куда помещать константы - во Flash или EEPROM. Сейчас по умолчанию Flash. Например:
@Section(Section.EEMEM)
private static final String MESSAGE = "Hello, EEPROM!";
implements Runnable
) , как в TinyOS 2.0. Задачи будут выполнятся в фоновой нити, а запланировать можно из любого места.synchronized
полнстью игнорируется. Используйте volatile
вместо него.static
полностью игнорируется, поскольку в C это имеет совсем другой смысл.Исходный код Java компилируется, а также преобразовывается в XML вид (java-ml) с помощью модифицированной версии Java2XML. Потом каждый XML элемент обрабатывается программой MCU Java Source Translator. Все примитивные переменные не изменяются, все объекты переводятся. Для перевода методов, которые работают с регистрами МК, есть отдельный переводчик для каждого МК. Все слушатели преобразовываются в обработчики прерываний. Классы объектов пользователя не обрабатываются через XML, они вызываются через reflection. Результат перевода - XML вид исходного кода на С. Потом исходный код С создается из XML.