Помогите, пожалуйста, новичку.
Исследуется возможность разработки устройства, содержащего два уровня: С-код для общения с датчиками и обработки данных и Java-код для интеграции в общую систему и UI.
В качестве отправной точки и экспериментов имеется STM3210E. Ясно, что на ней развернуть предполагаемый софт не удастся - не хватит памяти и скорости.
Можете посоветовать плату, близкую к STM3210E, но достаточно мощную для запуска Linux+JVM?
Как в этом случае поступить с Linux - собрать собственный (до этого не приходилось), или воспользоваться существующей сборкой, содержащей JVM? Быть может, посоветуете конкретный дистрибутив?
Что-то выбирать должны все же вы сами - что используется из периферии неясно, думаю платы на at91sam9260 подойдут, кроме CAN там вроде все есть. Чтобы сориентироваться насчет java на arm/linux - думаю это вам поможет http://free-electrons.com/docs/java/
PS сам я джавой не увлекаюсь, в buildroot есть правила для сборки jamvm но этот пакет почему-то в состоянии broken.
Спасибо за ответ! Док по ссылке я, в принципе, уже просматривал, общее представление имеется. Аt91sam9260, вроде бы подходит.
Интересно еще, каковы реальные аппетиты Linux+Java в плане ресурсов? Никому не доводилось пробовать?
На оффсайте имеется Embedded версия Java, теоретически она должна встать на Linux.
Никому не приходилось устанавливать ее и работать? Есть ли существенные различия в ресурсоемкости по сравнению с Java SE?
(Работа моя носит в достаточной степени исследовательский характер - выбор платформы, подходов - потому так нечетки требования и так много вопросов.)
А если не секрет, почему хочется именно яву?
Чисто хохмы ради можно Garbage Colector к C/C++ прикрутить - есть такая штука как libgc: http://www.hpl.hp.com/personal/Hans_Boehm/gc/
А вообще у LLVM есть какие-то подвижки в сторону JIT-компиляции, вот это было бы интересно попробовать.
На оффсайте для Embedded Java:
ARM V7 Headfull - RAM 64MB or more for Java, ROM/Flash/Disk 46MB or more for Java
Но это, так сказать, официальные данные. Практические наблюдения были бы полезнее.
Это шутка такая? Ява портирована под считанные единицы платформ. А связываться с например компиляцией этого монстра и заталкиванием его в свою железку будет только отчаянный мазозист. Не говоря уж о потреблении ресурсов, которое на десктопах то напрягает, а уж в этой мелочи - превратится в полный геморрой.
С другой стороны, аккуратно написанный сишный исходник
1) совершенно пофигистичен к типу процессора.
2) не зависит от наличия под платформу прорвы чужих библиотек, особенно такого переростка как ява, который в эмбеддовке редкость и вообще изврат.
3) если исходник написан нормально, он запросто компилится под все что шевелится и снабжено сишным компилером. От мизерной восьмилапой "тиньки" до могучего ксеона. Яве такая переносимость и не снилась. Чисто вычислительные дела от операционной системы и прочая вообще не зависят.
4) Если не хочется зависеть например от операционки, хочется мощный GUI и независимость от ОС, гляньте на Qt и GTK. Кутевая программа без особых проблем может работать в линуксе, винде и на маке вообще без изменений исходника. Хотя связываться с этим имеет смысл только если нужно реально навороченный GUI типа десктопного, с диалогами, кнопками и прочими наворотами. Если GUI не нужен - будет много лишнего хлама пожирающего ресурсы. Оно вам надо - бороться с тормозами и граблями чужих фреймворков/библиотек? Если надо - вперед на мины! Ведь при правильном подходе, выбрав на старте дурное решение, можно так здорово усложнить себе жизнь. Ява - отличный способ сделать свою жизнь в эмбеддоваке не слишком скучной - у вас будет уйма проблем которых у других нет. А именно, Оракл не будет лично для вас собирать яву и детально тестировать на лично вашей платформе. Поэтому что вы там получите...
Хм, я склонен согласится с предыдущим оратором.
Довелось мне однажды поддерживать сервер написанный на яве. Ну и намучался я с ним. Было это лет 5 назад, машина была на двух Opteron 250 c 4GB RAM, за час это поделие сжирало всю оперативу.
А помните такую штуку как Azureus (торрент-клиент, сейчас Vuze называется)? Он начинал тупить уже при пяти закачках.
А что касается переносимости, то таки да, правильно написанный Сишный код работает везде. Единственное о чём придётся заботится:
1) размерность стандартных типов. Например, когда я писал для Microchip'ов 18-ой серии, то там размер int-а зависел от компилятора. Для ccs int был восьмибитный, для C18 - 16-ти. Так что лучше использовать переопределённые типы а ля uint16_t, int32_t. Либо самому описать, либо stdint.h полдключить.
2) Не использовать директивы специфичные для конкретного компилятора, если это возможно. Как пример - #bit для ccs
3) Проверять little-endian или big-endian система используется, там где это критично.
4) Все аппартано-зависимые функции выносить в HAL.
Мне известно о существовании QT, GTK, и мне приходилось применять Java (и не только) как на клиентах так и на серверах.
В принятии решений я вынужден руководствоваться не только соображениями технического характера, но и, увы, вопросами управления проектами - экономическими, например, а также разнообразными рисками, связанными с использованиями тех, или иных средств.
Мне интересна Java + Linux на ARM и я уже писал - почему. ;)
Взыскиваю к вашему опыту и профессионализму! :)
Кто-нибудь сталкивался с подобной связкой на практике?
На каких платформах и на каких дистрибутивах?