понедельник, 14 декабря 2015 г.

Как запустить STM32CubeMX в ОС Linux. Шаг 2. Финиш

Шаг второй и последний. В предыдущих я рассказывал как запустить Куб (STM32CubeMX) под линуксом здесь и здесь.

В этот раз я расскажу, как сделать пункт меню для окружения рабочего стола (DE)  Gnome, Unity или KDE. Скорее всего этот способ будет работать и в XFCE, а вот относительно экзотических DE типа  Enlightenment ничего не скажу.

Для начала отойду в сторону и расскажу, как формируется меню программ в рабочих столах линукса. Каждый пункт меню описывается desktop-файлом. По сути это INI-файл, который имеет  минимум одну секцию и некоторый набор параметров. Вот пример такого файла для редактора gedit:

[Desktop Entry]
Name=Text Editor
Comment=Edit text files
Exec=gedit %U
Terminal=false
Type=Application
StartupNotify=true
MimeType=text/plain;
Icon=accessories-text-editor
Categories=GNOME;GTK;Utility;TextEditor;
X-GNOME-DocPath=gedit/gedit.xml
X-GNOME-FullName=Text Editor
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gedit
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=2.30.4
X-GNOME-Bugzilla-ExtraInfoScript=/usr/share/gedit-2/gedit-bugreport
X-Ubuntu-Gettext-Domain=gedit

Как мы можем видеть, здесь много параметров, назначение которых нам на данном этапе знать и не нужно. Позже мы создадим такой файл для нашего куба. А пока скажу, что системные файлы (по терминологии Windows - программы для всех пользователей) располагаются по пути /usr/share/desktop/applications. Если программа установлена для конкретного пользователя, то такие пункты меню описываются в домашней папке по пути ~/.local/share/applications. Здесь мы и будем создавать наш desktop-файл.

Кстати, формат стандартный и его понимают все выше перечисленные DE, с небольшими оговорками - каждое DE может добавлять свои специфические параметры по типу GNOME в приведенном примере (параметры X-GNOME-...).

Итак, переходим в каталог ~/.local/share/applications. Замечу, что файлы и папки, начинающиеся с точки в линуксе являются скрытыми. Поэтому если Вы пользуетесь графическим файловым менеджером, рекомендую предварительно включить отображение скрытых файлов и папок (для Nautilus это комбинация клавиш Ctrl+H).

Здесь создаем файл STM32CubeMX.desktop. Кстати, название файла никак не влияет на отображение пункта меню. Для удобства понимания в каком файле пункт какой программы описан я рекомендую называть его по имени программы.

В моем случае STM32CubeMX.desktop имеет такое содержимое:

[Desktop Entry]
Terminal=false
Name=STM32CubeMX
Exec=/usr/lib/jvm/java-8-oracle/bin/java -jar /home/sergio/STM32Cube/STM32CubeMX/STM32CubeMX.jar
Type=Application
Categories=Development
Icon=/home/sergio/STM32Cube/STM32CubeMX/cube.png
Hidden=false
NoDisplay=false

Разберу по порядку.
Секция [Desktop Entry] является обязательной и сообщает рабочему окружению, что далее  будет описан элемент рабочего стола (пункты меню являются элементами рабочего стола).

Terminal=false сообщает о том, что программу не нужно запускать в терминальной сессии

Exec= здесь указывается какой исполняемый файл необходимо запустить. Т.к. у нас не совсем исполняемый файл, а JAR-архив, то исполнять нам надо его в среде виртуальной Java машины. У меня  путь к ней /usr/lib/jvm/java-8-oracle/bin/java. У Вас может отличаться. Выяснить его не сложно, набрав в терминале which java Вы узнаете полный путь к исполняемому файлу.
-jar - это параметр командной строки уже Java-машины и говорит о том, какой JAR-файл нужно запустить. Мы помним из предыдущих шагов, что информация об основном классе хранится в манифесте, поэтому уже можем не беспокоиться относительно этих инструкций. Java-машина сама найдет необходимую ей информацию.

Type=Application говорит о том, что это приложение. Desktop Entry могут быть не только приложения. Документы, папки и прочее.

Categories=Development Здесь через точку с запятой перечисляются стандартные категории, в которых надо отображать этот пункт меню. Выяснить их название можно в документации к DE, но в нашем случае категория будет всего одна - "Разработка".

Icon=/home/sergio/STM32Cube/STM32CubeMX/cube.png Если помните. в прошлом шаге мы упаковывали в JAR-архив содержимое exe-файла. Так вот там есть иконка для Куба. Можно использовать ее, можно нарисовать свою или стянуть из интернета. Главное, что эта иконка не должна быть в архиве, а лежать в какой-то папке. Кстати, совсем не обязательно в папке с программой.

Hidden=false
NoDisplay=false
Эти две опции говорят о том, что пункт меню не будет скрытым и его надо отображать.

На этом, собственно, создание пункта меню закончено. Скриншотов не будет, т.к. скриншотить, собственно, нечего.
И еще, рекомендую на уровень выше папки с Кубом (у меня это ~/STM32Cube/) создать каталог Repository и указать его в настройках программы  как путь для сохранения баз данных плат и процессоров.
Т.е.:
~/STM32Cube/STM32CubeMX - каталог с программой
~/STM32Cube/Reository - каталог репозиториев

Теперь Ваш Куб готов к работе. Удачи :)

Как запустить STM32CubeMX в ОС Linux. Шаг 1

В прошлом шаге мы успешно запустили Куб под линуксом.

Теперь я расскажу как распакованный exe-файл упаковать в пакет. Наверное, стоит сделать небольшое отступление и рассказать для чего это необходимо.

Программы, написанные на Java, распространяются в виде пакетов. Для веб-приложений (контейнера сервлетов) это WAR-файл, для серверов приложений, таких как JBoss или Glassfish, это может быть EAR. А для standalone приложений для десктопа это, как правило, JAR. Хотя по методу упаковки это есть ничто иное, как ZIP-архив. Но с небольшими "довесками".

Оригинальный Куб идет в exe-файле, который есть ничто иное как jar-архив с виндовым лаунчером. Мы же пересоберем этот архив без лаунчера. Профитом будет то, что запустить jar-ник можно будет на любой платформе с Java RE.

В прошлом шаге мы получили рабочий Куб, но полностью развернутый. Здесь, как говориться "на вкус и цвет все фломастеры разные". Кто-то может оставить и так и перейти к следующему шагу (ссылочку сделаю, когда его напишу). А мне - некомильфо.

Итак, начнем.

У нас есть каталог с установленным и рабочим Кубом. Снова открываем STM32CubeMX.exe (вы же его еще не удалили?) в Менеджере архивов и смотрим на список каталогов. Эти каталоги нам надо переместить из папки с установленным Кубом, в какую-нибудь рабочую. Я сделал /home/sergio/STM32CubeMX. Там мы должны получить следующее


После этого открываем консоль, переходим в каталог на уровень выше (у меня это /home/sergio) и создаем jar-архив. Наш архив будет исполняемым (отличие jar'а от zip'а - наличие дополнительных данных).

Упаковщику jar мы говорим, где искать манифест (в котором, как мы помним, указывается основной класс программы, который надо запускать) и каталог, который надо упаковать.
Результатом выполнения упаковщика будет файл STM32CubeMX.jar. Собственно, это и есть наш "кросплатформенный exe-шник".
Переносим его в каталог с установленным Кубом. 

 В принципе, теперь если попытаться его запустить откроется Менеджер архивов. Нас это не устраивает и надо сменить программу, чем открывать jar-файлы. Правая кнопка мыши на нашем файле, "Свойства", вкладка "Открыть с помощью" и устанавливаем программу по умолчанию "Orace Java 8 Runtime" 



Теперь если дважды щелкнуть на файле STM32CubeMX.jar - запустится наш Куб.

В следующем шаге сделаем пункт меню для нашего Desktop Environment.


Как запустить STM32CubeMX в ОС Linux. Шаг 0

Как и обещал, выкладываю способ запуска Куба (STM32CubeMX) под линуксом. У меня установлена Linux Mint 17.3, хотя этот способ, скорее всего, будет работать на любом дистрибутиве линукса где есть Java RE, т.к. Куб написан на java.

У меня хорошей традицией стало выпиливание из ОС свободного openjdk и установка оригинального JRE/JDK с сайта Oracle. Не могу точно сказать, будет ли Куб корректно работать  под свободной реализацией JRE т.к. даже не пробовал. Как установить Oracle JRE/JDK в Ubuntu-based дистрибутиве замечательно описано тут

Начнем. Сперва надо скачать сам Куб с сайта STMicroelectronics по ссылке http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF259242?sc=microxplorer#

Это будет zip-архив, который надо будет распаковать

На данный момент последняя версия Куба - 4.12.0.

Далее, нам необходимо будет распаковать exe-файл SetupSTM32CubeMX-4.12.0.exe. Самый простой способ - открыть в Менеджере архивов. Для установщика я создал отдельную папку SetupCube, куда и распакую содержимое exe-файла.


После этого нам необходимо выяснить имя класса-инсталлятора и запустить его. Среди распакованных каталогов и файлов есть манифест по пути META-INF/MANIFEST.MF. Открываем его в текстовом редакторе.

Название класса com.izforge.izpack.installer.bootstrap.Installer. 
Нам необходимо запустить его и инсталлировать Куб штатным способом. Простой способ сделать это - запустить его из консоли, находясь в папке, куда мы распаковали инсталлятор (у меня это ~/Cube/CubeSetup), командой:

java -cp . com.izforge.izpack.installer.bootstrap.Installer



А вот и наш инсталлятор


Я устанавливаю в домашнюю папку, чтобы впоследствии не иметь проблем с правами доступа при загрузке баз данных плат и микроконтроллеров.  


Каталог /home/sergio/STM32Cube/ будет общим для Куба и его репозиториев.

Собственно дальше тривиально - устанавливаем. После установки видим такую картину:



Понятно, что без wine мы не сможем запустить Куб под линуксом, т.к. exe-файл. Но, к счастью, нам это и не нужно. Также, как с инсталлятором, мы распаковываем одержимое exe-файла в эту папку.




Точно также находим манифест и смотрим название основного класса Куба. Это у нас
com.st.microxplorer.maingui.STM32CubeMX




Запускаем таким же способом, как и инсталлятор - из консоли, находясь в папке, куда мы только что установили Куб.



Вуаля! Мы видим главное окно STM32CubeMX. Можно работать.


Текущий шаг мы сделали. В следующих шагах я расскажу, как настроить каталоги для загрузки баз данных плат и микроконтроллеров и сделать запуск Куба более удобным - из меню системы, с иконкой :)

До новых встреч. 








воскресенье, 13 декабря 2015 г.

Кубический генератор проектов

Не так давно я заинтересовался разработкой для архитектуры ARM. Обзавелся замечательной платкой STM32F4Discovery и понеслась. Благо для плат от STMicroelectronics нет необходимости паять программаторы. Это не AVR. Тут все для людей. Начиная от юзабилити и до прайса.

Методом тщательного перекапывания гугла, рерференсов и даташитов был выбран вариант Eclipse + GNU ARM Toolchain + OpenOCD. Муки выбора IDE - отдельная песня и как-нибудь расскажу об этом.

А также была выбрана очень полезная тулза от самой STMicroelectronics - STM32CubeMX (далее просто - куб). Это существенно освеженный MicroXplorer с генератором проектов под Keil uVision отдельно для 4-й и 5-й версий, IAR EWARM, TrueSTUDIO и System Workbench (который и есть Эклипс с некоторыми доработками французов из Ac6).

Куб - весчь в хозяйстве нужная и полезная. Вот только проект он генерирует несколько специфически. К имени проекта, заданного при сохранении (пусть будет TestProject), в эклипс-проект к названию артефакта будет добавлено " Configuration". После сборки будет сгенерирована прошивка с именем "TestProject Configuration.elf". А в процессор не зальется, т.к.  OpenOCD будет искать файл "TestProject.elf", по имени материнского проекта куба.

Меня порядком достало после каждой перегенерации проекта лезть в конфигурацию и менять имя артефакта и я решил решить (а как иначе решать?)... Вобщем, лень - двигатель прогресса. Пришлось перелопатить все файлы куба, чтобы понять где порылась собака. Об чем я и расскажу, авось кому-то пригодится.

В папке с установленным кубом, а у меня это C:\STM32Toolbox\STM32Cube\STM32CubeMX\, я нашел файлик \db\plugins\projectmanager\fileConfig.ftl и заменил в нем секцию <name>${Configuration} Configuration</name> на <name>${Configuration}</name>.

Voila!

Немного лирики. Куб для генерации исходников и проектов использует шаблонизатор FreeMarker. Собственно, при большом желании и знании FreeMarker'а, можно перелопатить все шаблоны и заточить под себя. Но мне такие кардинальные меры пока не нужны. 

В общем, именно в этом файле и задается название артефакта. В этом файле еще много чего важного и глобального задается. Он общий для генератора проекта под все поддерживаемых IDE. 

Следующим этапом будет запуск куба под линуксом, т.к. плагин для эклипса STMicroelectronics больше отдельно не делает и дистрибутив куба есть только под винду, что ИМХО некошерно для матерого с/с++ девелопера.