Мікроконтролер з Java API


10

Моя командна техніка планує використовувати 8-бітний мікроконтролер Atmel AVR для майбутнього проекту.

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

Чи можете ви запропонувати мені 8-бітний мікроконтролер, який підтримує Java?

PS. Я не знаю С і я недосвідчений в мікропроцесорному програмуванні.


28
Скажіть, хтось продавав велику плаваючу спідницю та деякі довгі жердини, за якими вони сказали, що ви можете використовувати разом із вашим автомобілем, щоб порибалити на озері. Пробуючи три дні, щоб поставити його, ви потрапляєте близько 15 футів в озеро, перш ніж ваш автомобіль перевернеться і зануриться. Ти, тато, будеш справжнісінький. Ви пройшли повз місцевий магазин човнів з гарним каное. Каное - це компілятор мікросхеми, а плаваючий автомобіль з палицями - Java на 8-бітному мікроконтролері. На щастя, цього не сталося ... ви запитуєте нас, де можна знайти поплавці. Отже, як ваш тато, дозвольте мені сказати: "Що ви думаєте ?! Отримайте каное!"
darron

6
У мене виникають проблеми з візуалізацією плаваючої спідниці автомобіля палицями. У вас є якісь фотографії?
ендоліт

8
@darron - Чи не повинен це бути big_floating_skirtоб'єкт, який реалізує boatінтерфейс в org.buoyantпакеті, і poleоб'єкти, які мають якусь дивну модель успадкування, java.netяку я не можу зараз згадати (але це чітко описано в UML)?
Кевін Вермер

2
@sterz: Я думаю, що без мікропроцесорного фону це цілком зрозуміло, що ви, можливо, не зрозуміли, наскільки насправді Java на 8-бітовому мікросхемі насправді є. Вибачте, якщо мій перший коментар пролунав суворо ... Простий "Не роби цього" видався занадто слабким.
darron

1
@darron: спасибі за аналогію "стрілянина птахів з гармати"
sterz

Відповіді:


32

Якщо ви недосвідчені в області програмування мікропроцесор / мікроконтролер, вам, мабуть, слід спочатку вивчити С, щоб ви могли зрозуміти, коли і чому 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, який ви дивитесь. Сторінка Intro Embedded Java Oracle детальніше розповідає про обмеження JVM. Їх тон голосу - як ви здогадуєтесь, набагато більш сприятливий для Java, ніж мій. Майте на увазі, що цей вид обладнання набагато складніше розробити, ніж 8-бітний AVR.

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

Ще одна альтернатива, яку слід розглянути, - це рамка Arduino . Він використовує усічену версію про Електропроводка мовою, який, як C ++ без об'єктів або заголовків. Він може працювати на багатьох AVR-чіпах, це точно не обмежується їх обладнанням. Це дасть вам простішу криву навчання, ніж просто стрибок прямо на C.

На закінчення,
Золотий молоток XKCD
текст Alt: Взяв у мене п'ять спроб знайти потрібний, але мені вдалося врятувати наш нічний вихід - якщо не човен - врешті-решт.


5
Один з моїх улюблених коміксів, яким я коли-небудь користувався.
Кортук

1
Ммм, крутий помічник. +1
tyblu

Цікаво, як цей JVM порівнюється з "Java iButtons", які були доступні пару десятиліть тому?
supercat

@kevin Посилання "C шпаргалка" не працює! Будь ласка, оновіть!
charansai

6

Найпопулярнішим середовищем програмування для Atmel AVR є Arduino . Мова Arduino - це підмножина C ++.

"Ескізи" / програми Arduino виглядають синтаксично дуже схожими на Java. Мова електропроводки, з якої походить Arduino, має реалізацію в C ++ ( Arduino ), Java ( Processing ) та Javascript ( обработка.js ).

Обидві мови поділяють один і той же стиль декларування, контурні контури та арифметичні оператори через їх спільне походження в Algol68. Як правило, всі об'єкти в Arduino оголошуються в усьому світі або на стеку, тому, як і Java, функції учасників викликаються .оператором (наприклад, LED.flash()).

Мова буде дуже знайома Java-програмісту - але, що важливо, ескізи Arduino складаються у рідний код, який працює на повній швидкості з повним доступом до обладнання. Це дуже важливо для отримання максимальної користі від мікроконтролера.

Ось API .

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


3
Якщо бути точнішим, це (швидше за все) найпопулярніше середовище програмування з любителями, але не обов'язково для всіх розробників AVR.
пфйон

2
Я запевняю, що Arduino користується найбільшою популярністю за кількістю користувачів, але не за кількістю одиниць продукції, що постачаються, що містять прошивку Arduino. Там дуже багато користувачів Arduino
Toby Jaffey

1
Хоча "ескізи" складені, швидкість доступу до IO може бути значно покращена за допомогою C або збірки.
tyblu

1
C ++ і Java для мене виглядають дуже різними. ("Arduino" - це просто C ++ з деякими химерними структурами включення, щоб приховати деякі технічні біти.)
Nick T

2
@Jason S Ескізи "Ардуїно" / програми виглядають дуже схоже на Java "
Toby Jaffey

4

Я хочу дати зрозуміти, що раніше не використовував, але раніше рік тому називався Джавелін. Можливо, Parallax придбав їх чи щось таке, тому що зараз єдиний, який придумує, - це «Штамп Джавеліна». Роки тому також існувала компанія під назвою Velocity Semiconductor, яка зробила (нібито) заміну основних модулів Rabbit Semiconductor, і вона мала JVM в апаратному забезпеченні, але ця компанія, очевидно, зникла. Успіхів у пошуку!


4

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

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


ах так, я бачив це на Faker Maker два роки тому! Досить класний пристрій.
Дейв

Особливістю вбивці для SunSpots є не Java, а вбудований бездротовий матеріал, що дозволяє їм спілкуватися один з одним. Якщо ви хочете усвідомлювати один одного або легкого бездротового спілкування з домашньою базою, це дуже, дуже приємно.
Thorbjørn Ravn Andersen

3

Parallax виготовляє штамп Javelin , CoM (Computer-on-Module), який управляє JVM.

Це $ 60 і виконує палаючий ~ 8 500 інструкцій Java / сек.

Крім того, друкована плата рожева (Дійсно!)


2

Системи Ajile виготовляють різноманітні вбудовані в реальному часі Java-мікросхеми та плати eval.

Вони запускають голу металеву яву. Це дуже приємно.

www.ajile.com виготовляє дошки для фішок і eval.

www.systronix.com продають різноманітне вбудоване обладнання Java.

Я використовував AJ-100 від ajile для вимогливих робіт, з ними дуже приємно працювати. І ні, вони не настільки дешеві, як AVR, але вони обробляють дані, як низькоякісний пентій.

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


"ніколи цього не роблю у вбудованій системі С" ??? Робити що? 1 затримка uS? Висока швидкість? Навряд чи. Я думаю, ви забуваєте 1 ГГц + DSP, багато ARM та ще багато інших. Дуже багато людей пишуть для них просто голий метал C (без ОС тощо). Я дозволю вам, що цей тип речі є на півдорозі раціональним способом використання Java у вбудованій (поза повною операційною системою Linux) ... хоча після швидкого огляду Systronix я б сказав, що, здається, ви платите хороша премія за те, що мало зручності. Я б точно пішов вбудовувати ARM. Також багато посилань на ці проекти від Systronix є мертвими.
darron

Ой, а ТІНІ шалено німий. JVM в ПЗУ на 8051 році. Я тупо спробував один шлях назад, коли захотів простий Ethernet, і навіть на C річ була просто завалена трансляцією трансляції звичайної корпоративної локальної мережі. Це було б чудовим продуктом, якби вони продавали його як базові марки Parallax, але вони цього не роблять. Це не підходить для будь-яких не-хобістських цілей.
darron

1
Ці мікросхеми працюють на кілька сотень мегагерців. Затримка 1uS можлива при програмуванні на C на процесорі, що працює в 100 разів повільніше, ніж у цих пристроїв. Ви можете зробити дуже цікаві речі (наприклад, iPad та телефони Droid) з еквівалентними процесорами, однак розміщення цього питання як альтернативи 8-бітовому AVR у питанні навряд чи порівняння яблук-яблук.
Кевін Вермер

@reemrevnivek: Враховуючи те, що OP хотів Java, я вважаю частину Ajile доречною, оскільки це один з єдиних розумних способів запуску вбудованої Java (поза повною ОС Linux чи іншим). Якби останнього абзацу та бітів TSTIK не було, я б навіть його схвалив.
darron

2

Мій особистий досвід полягає в тому, що програмувати код C і розпочати роботу з AVR досить просто, я також прийшов з багатьох років, як займаюся Java, і приблизно через 2 місяці використання ескізів на ардуїно я кинув середовище і пішов на сайти avr-gcc як-от avrfreaks дозволяють легко знайти відповіді на поширені проблеми. (Я все ще роблю все на своєму вірному Ардуїно Дюмілєнове)

Використання eclipse для компіляції та "розгортання", тобто запису на чіп, також добре, оскільки мені не доведеться мати справу з іншим IDE

Я думаю, що насправді складніше обійти регістри, 16-бітові регістри та прочитати їх у відповідному порядку, перериваннях, таймерах, апаратних ШІМ, ніж сама мова програмування.


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-бітний, але є інтерпретатор Javascript для мікроконтролерів ARM малої потужності під назвою Espruino .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.