Микроконтроллер с Java API

10

Моя команда разработчиков оборудования планирует использовать 8-битный микроконтроллер Atmel AVR для будущего проекта.

Насколько я знаю, он должен быть запрограммирован на C. Я нашел JVM для AVR, хотя он более ограничен, чем собственные библиотеки C от Atmel.

Можете ли вы предложить мне 8-битный микроконтроллер, который поддерживает Java?

PS. Я не знаю C, и я неопытный в программировании микропроцессора.

sterz
источник
28
Скажем, кто-то продавал большую плавающую юбку и несколько длинных шестов, которые, по их словам, можно использовать на машине, чтобы отправиться на рыбалку на озеро. Пройдя три дня, пытаясь его надеть, вы попадете в озеро примерно на 15 футов, прежде чем ваша машина перевернется и упадет. Твой отец будет очень зол. Вы обошли местную лодочную мастерскую с хорошим каноэ. Каноэ - это компилятор C на микроуровне, а легкая машина с клюшками - это Java на 8-битном микроконтроллере. К счастью, этого не произошло ... вы спрашиваете нас, где вы можете найти поплавки. Итак, как ваш папа, позвольте мне сказать: «О чем ты думаешь ?! Купи каноэ!»
Даррон
6
У меня возникают проблемы с визуализацией машины с плавными юбками с палками. У тебя есть картинки?
эндолит
8
@darron - Разве это не должен быть big_floating_skirtобъект, который реализует boatинтерфейс в org.buoyantпакете, и poleобъекты, которые имеют какой-то странный шаблон наследования, с java.netкоторым я сейчас не могу вспомнить (но он четко описан в UML)?
Кевин Вермеер
2
@sterz: Я думаю, что без микропроцессора совершенно понятно, что вы, возможно, не поняли, насколько неуместна Java на 8-битном микро. Извините, если мой первый комментарий прозвучал резко ... Простое "Не делай этого" казалось слишком слабым.
Даррон
1
@darron: спасибо за аналогию «стрельба из пушек»
sterz

Ответы:

32

Если вы неопытны в области программирования микропроцессора / микроконтроллера, вам, вероятно, следует сначала изучить C, чтобы понять, когда и почему Java является плохим выбором для большинства проектов микроконтроллеров.

Вы читали ограничения на JVM, которую вы связали? Это включает в себя следующие проблемы:

  • Всего 512 байт памяти программы (не КБ и не МБ)
  • Всего 768 байт оперативной памяти (куда идут переменные. Это ограничение ограничено 768 символами строк).
  • Около 20 тысяч кодов Java в секунду на 8 МГц AVR.
  • Включает только java.lang.Object, java.lang.System, java.io.PrintStream, java.lang.StringBuffer, класс управления JVM и собственный класс IO. Вы не сможете выполнить импорт java.util. *; и получить все классы не в этом списке.

Если вы не знакомы с тем, что означают эти ограничения, убедитесь, что у вас есть план B, если выясняется, что вы не можете выполнить проект с Java из-за ограничений по пространству и скорости.

Если вы все еще хотите использовать Java, возможно, из-за того, что многие люди, знающие только Java, программируют устройство, я бы настоятельно рекомендовал приобрести более мощное оборудование, вероятно, с поддержкой встроенного Linux. См. Эту страницу Oracle для ознакомления с некоторыми спецификациями для запуска встроенной JVM. В разделе часто задаваемых вопросов об их обсуждении они рекомендуют минимум 32 МБ ОЗУ и 32 МБ Flash. Это примерно в 32 000 раз больше, чем в ОЗУ, и в 10000 раз больше, чем у AVR. На странице Oracle Java Embedded Intro более подробно рассказывается об ограничениях JVM. Их тон голоса, как вы можете догадаться, гораздо более дружественный к Java, чем мой. Имейте в виду, что этот тип оборудования гораздо сложнее разработать, чем 8-битный AVR.

Я студент по компьютерной инженерии с небольшим информатики. Департамент CS моего университета выпил Java Kool-aid, поэтому многие студенты инженерной программы изучают только Java (что является печальным положением для программиста, по крайней мере, изучите Python или C ++, если вы этого не сделаете) хочу выучить C ...), поэтому один из моих профессоров опубликовал C Cheat Sheet для студентов с опытом работы на Java. Это всего 75 страниц; Я предлагаю вам прочитать или просмотреть его, прежде чем принимать решение. На мой взгляд, C - самый эффективный, долговечный и профессиональный язык для разработки встроенного проекта.

Другой альтернативой для рассмотрения является Arduino Framework. Он использует урезанную версию языка Wiring , которая похожа на C ++ без объектов или заголовков. Он может работать на многих чипах AVR, он определенно не ограничен их аппаратным обеспечением. Это даст вам более легкую кривую обучения, чем просто прыгнуть прямо в C.

В заключение,
XKCD Золотой Молот
альтернативный текст: у меня ушло пять попыток найти правильную, но мне удалось спасти нашу ночь - если не лодку - в конце концов.

Кевин Вермеер
источник
5
Один из моих любимых комиксов, которые мне когда-либо нравились.
Кортук
1
Ммм, классный помощник. +1
tyblu
Интересно, как эта JVM сравнивается с «Java iButtons», которые были доступны пару десятилетий назад?
суперкат
@kevin "C Шпаргалка" ссылка не работает! Пожалуйста обновите!
Charansai
6

Самая популярная среда программирования для Atmel AVR - Arduino . Язык Arduino является подмножеством C ++.

Arduino "эскизы" / программы выглядят синтаксически очень похоже на Java. Язык Wiring, из которого происходит Arduino, имеет реализации на C ++ ( Arduino ), Java ( Processing ) и Javascript ( processing.js ).

Оба языка имеют одинаковый стиль объявления, конструкции цикла и арифметические операторы из-за их общего происхождения в Algol68. Как правило, все объекты в Arduino объявляются глобально или в стеке, поэтому, как и в Java, функции-члены вызываются с помощью .оператора (например, LED.flash()).

Язык будет очень знаком программисту на Java, но, что немаловажно, эскизы Arduino скомпилированы в нативный код, который работает на полной скорости с полным аппаратным доступом. Это очень важно для получения максимальной отдачи от вашего микроконтроллера.

Вот API .

Arduino предоставляет все необходимое для начала работы: недорогое оборудование, бесплатную интегрированную среду разработки и загрузчик (так что вы можете загружать код через USB / последовательный порт).

Тоби джеффи
источник
3
Чтобы быть более точным, это (наиболее вероятно) самая популярная среда программирования среди любителей, но не обязательно среди всех разработчиков AVR.
pfyon
2
Я бы сказал, что Arduino наиболее популярен по количеству пользователей, а не по количеству единиц продукции, поставляемых с прошивкой Arduino. Есть много пользователей Arduino
Тоби Джеффи
1
Хотя «эскизы» компилируются, скорость доступа к вводу-выводу может быть значительно улучшена с помощью C или сборки.
tyblu
1
C ++ и Java выглядят совсем по-другому для меня. («Arduino» - это просто C ++, причём некоторая причудливая структура include скрывает некоторые технические моменты.)
Ник Т
2
@Jason S "Arduino" зарисовки / программы очень похожи на Java "
Тоби Джаффей
4

Я хочу прояснить, что я не использовал один раньше, но был один год назад под названием Javelin. Возможно, что Параллакс приобрел их или что-то еще, потому что теперь единственное, что появляется, это «Штамп Дротика». Несколько лет назад существовала также компания Velocity Semiconductor, которая произвела (предположительно) замену основных модулей Rabbit Semiconductor, и у нее была аппаратная JVM, но эта компания, очевидно, исчезла. Удачи в Вашем поиске!

Дейв
источник
4

Sun Microsystems создавала платформу под названием Sun Spot, которая была в основном встроенной платформой Java. Очевидно, что Sun Microsystems больше не существует (их купил Oracle), но кажется, что вы все еще можете купить Sun Spots - http://www.sunspotworld.com/products/ . Я не большой в идее использования Java во встроенной среде (неправильный уровень абстракции для работы imho), но это, кажется, самая естественная встроенная платформа для Java. Обратите внимание на технические характеристики этих устройств - они предназначены для работы в тяжелых условиях 180 МГц / 512 тыс. ОЗУ и стоят недешево за 400 долларов за стартовый комплект.

Так что я буду вторым или третьим ответчиком Arduino на этот вопрос. Существует одно адское сообщество, которое поддерживает вас, если вам нужна помощь. А если вам нужно периферийное оборудование, поищите «Arduino Shields» в Google и поразитесь - вы можете сделать что угодно, от управляющих серводвигателей до перехода в беспроводную сеть 802.11 с правильной комбинацией экранов. Непрактично изучать C (указатель говорит, что !?) без некоторого времени практики, но вы можете начать писать наброски Arduino практически мгновенно ... Вы также можете получить «настоящие» платформы Arduino около 30 долларов и клоны (например, RBBB или DorkBoard) менее чем за 15 долларов.

vicatcu
источник
ах да, я видел это в Maker Faire два года назад! Довольно классное устройство.
Дейв
Особенностью убийцы для SunSpots является не Java, а встроенная функция беспроводной связи, позволяющая им общаться друг с другом. Если вы хотите узнать друг друга или просто пообщаться с домашней базой, это очень, очень приятно.
Турбьёрн Равн Андерсен
3

Параллакс делает Javelin Stamp , CoM (компьютер на модуле), который управляет JVM.

Это $ 60 и выполняет ~ 8500 инструкций Java в секунду.

Кроме того, печатная плата розовая (на самом деле!)

Коннор Вольф
источник
2

Системы Ajile создают множество встроенных Java-чипов в реальном времени и плат Eval.

Они бегают голой металлической явой. Это очень приятно

www.ajile.com производит чипы и доски объявлений.

www.systronix.com продают различные встроенные Java-оборудования.

Я использовал AJ-100 из ajile для требовательной работы, с ними очень приятно работать. И нет, они не такие дешевые, как AVR, но они обрабатывают данные, как бюджетный Pentium.

Чипы Ajiles реагируют на прерывания (задержка прерывания) менее чем за 1 микросекунду.

Тим Виллискрофт
источник
«никогда не делай этого во встроенной системе C» ??? Что делать? 1 латентность? Высокоскоростной? Едва. Я думаю, что вы забыли 1GHz + DSP, много ARM и много других. Множество людей пишут для них просто с голым металлом C (без ОС и т. Д.). Я признаю, что этот тип вещей - на полпути рациональный способ использования Java во встроенных системах (вне полнофункциональной ОС Linux) ... хотя после быстрого взгляда на Systronix я бы сказал, что вы платите хорошая премия за это маленькое удобство. Я бы наверняка встроил ARM. Кроме того, многие ссылки на эти проекты от Systronix мертвы.
Даррон
Ох, и Тини безумно глуп. JVM в ПЗУ на 8051. Я тупо пытался вернуться назад, когда хотел легкий Ethernet, и даже в C все было просто завалено широковещательным трафиком обычной корпоративной локальной сети. Было бы неплохо, если бы они продавали его как «Базовые марки Параллакса», но это не так. Это не подходит для каких-либо нехобби.
Даррон
1
Эти чипы работают на несколько сотен мегагерц. Задержка в 1 мкс возможна при программировании на C на процессоре, работающем в 100 раз медленнее, чем на этих устройствах. Вы можете делать довольно интересные вещи (например, iPad и телефоны Droid) с эквивалентными процессорами, но публикация этого как альтернативы 8-битному AVR в этом вопросе вряд ли является сравнением яблок с яблоками.
Кевин Вермеер
@reemrevnivek: Учитывая, что OP хотел Java, я бы посчитал подходящей часть Ajile в том смысле, что это один из единственно разумных способов запуска встроенной Java (вне полноценной ОС Linux или чего-то еще). Если бы не было последнего абзаца и битов TSTIK, я бы даже проголосовал.
Даррон
2

Мой личный опыт показывает, что код на C для программирования и начала работы с AVR довольно прост, я также пришел из многолетнего опыта работы с Java, и после примерно 2 месяцев использования набросков arduino я отказался от среды и пошел на сайты avr-gcc, сайты Подобно avrfreaks, легко найти ответы на распространенные проблемы. (Я все еще делаю все на моем верном Arduino Duemillenove)

Использование eclipse для компиляции и «развертывания», т.е. записи в микросхему, также хорошо, так как мне не нужно иметь дело с другой IDE

Я думаю, что на самом деле сложнее разобраться с регистрами, 16-битными регистрами и прочитать их в соответствующем порядке, прерываниями, таймерами, аппаратным ШИМ, чем самим языком программирования.

webclimber
источник
1

Хотя я бы вообще относился к лагерю «изучи C и пойми, что на самом деле делают процессоры», когда речь идет о встраиваемой работе, стоит отметить, что микросхема с небольшим корпусом стоит не намного дороже, чем AVR, и она почти правдоподобна положение для обработки простых задач на вершине JVM.

Крис Страттон
источник
1

NanoVM - это виртуальная машина Java, разработанная для работы на 8-битных микроконтроллерах AVR.

(с домашней страницы)

Это не полнофункциональная Java VM, и она никогда не будет. Он всегда будет ограничен небольшим подмножеством языка Java, стандартными библиотеками Java и несколькими методами, специфичными для приложения. Кроме того, он не предназначен для замены C как стандартного способа программирования микроконтроллеров. Он менее гибкий и имеет более низкую производительность, чем программы на C или ассемблере.

NanoVM - это способ предоставить ограниченный, но управляемый интерфейс программирования для устройства на основе микроконтроллера. Поскольку большая часть самого аппаратного кода является частью самого NanoVM, пользователь может сосредоточиться на самом приложении. Если пользователю предоставляется устройство, оснащенное NanoVM, ему не нужно думать о самом оборудовании. Кроме того, ему не нужны какие-либо целевые компиляторы или тому подобное. Все, что ему нужно, это стандартный Java-компилятор и NanoVMTool, который сам написан на Java. Таким образом, вся цепочка разработки работает на любом устройстве, которое имеет Java-компилятор и может запускать Java-код. Благодаря аппаратной абстракции, которую обеспечивает NanoVM, пользователю даже не нужно заботиться о типе микроконтроллера, на котором основана цель.

Тоби джеффи
источник
1

Это не совсем Java - или 8-битный, но для микроконтроллеров ARM с низким энергопотреблением, который называется Espruino, доступен интерпретатор Javascript .

Гордон Уильямс
источник