После продолжительного перерыва вышла новая бэта версия программы с номером 7.0.
Разработка этой версии заняла более трёх месяцев, но и работа была произведена очень большая.
Что нового в версии 7.0.
С нуля разработан новый редактор пользовательских блоков на С. При разработке я учитывал пожелания пользователей и делал его на основании технологии разработки встроенных блоков.
Изменена идеология пользовательского блока. Теперь это мультиблок. То есть один пользовательский блок включает в себя один блок или пакет блоков.
Код в мультиблоке представляет собой иерархическую структуру. Есть общий код, который вставляется в программу ОДИН раз при использовании в проекте любого блока. Блоки в пакете можно группировать в папки и группы. Папки служат для визуального разделения блоков. Группы служат для логического разделения. В группах так же есть ветка кода, который вставляется в программу ОДИН раз при использовании в проекте любого блока группы.
В самом блоке так же есть два раздела кода. Общий код – это код, который вставляется в программу ОДИН раз при использовании в проекте любого количества экземпляров данного кода. И код инстанса – это код, который вставляется в программу столько раз, сколько раз этот блок используется в программе.
Каждый блок кода разделён на секции Declare, Setup, Loop, и Function. Каждая секция кода разделена на участки – начало секции и конец секции. Кроме того в секции Loop в блоке кода каждого инстанса есть участок «Место вставки блока». Этот код вставляется в программу в том месте, в котором на схеме установлен данный блок. В каждом участке можно создать любое количество частей кода, и для каждой части задать условие его появления в программе.
Такая же архитектура присутствует и в параметрах. Есть общие параметры мультиблока. Они появляются в проекте в настройках всех блоков данного пакета, и при изменении данного параметра в одном блоке (при настройке блока пользователем в проекте), они изменяются сразу у всех блоков. Так же общие параметры есть и у групп блоков, и у каждого блока. У каждого блока кроме того есть параметры каждого инстанса, которые изменяются независимо у каждого экземпляра данного блока используемого в проекте.
В качестве параметров могут использоваться переменные проекта, массивы проекта, физические пины проекта, и порты UART. Параметры и отдельные характеристики параметров могут использоваться в условиях, с помощью которых задаётся наличие входов – выходов у блока, наличие других параметров настройки блока, и использование части кода при компиляции.
Стандартные параметры могут быть представлены пользователю в виде поля ввода, выпадающего списка, переключателя или чекбокса.
В случае если в составе пакета присутствует один блок, то в библиотеке он будет представлен как обычный одиночный блок. Если блоков несколько, то мультиблок будет представлен в виде папки, состав которой, расположение блоков в ней, и название каждого блока и папки можно изменять независимо от архитектуры мультиблока, и названий блоков в редакторе. То же самое касается и представления параметров в блоке.
В мультиблок можно импортировать блоки, сделанные в старом редакторе. Можно импортировать и целиком библиотеки, но в этом случае импортируются только блоки CODE. FBD и LAD блоки не импортируются.
Для различия блоков сделанных в старом и новом редакторе, первые в библиотеке отображаются с припиской (CODE) как и раньше, вторые (Code).
В качестве первоочередной задачи сейчас у меня стоит написание развёрнутого хелпа на редактор. Пока я не успел его сделать. Для облегчения понимания как что работает в редакторе, я сделал небольшой тестовый блок для дисплеев OLED SPI.
Он, конечно, сделан именно для представления возможностей редактора, потому практический функционал этого блока – это второстепенный вопрос.
Но изучать новый редактор тем, кто создает пользовательские блоки, придётся в любом случае, поскольку в стабильном релизе версии 7.х возможность создания новых блоков в старом редакторе будет отключена.
Следующее новшество в программе – реалтайм просмоторщик кода проекта. Для каждого открытого проекта можно открыть в отдельном окне просмоторщик кода, который будет выгружаться в Arduino IDE. Для этого надо нажать кнопку с глазиком на тулбаре основного окна программы.
Для текущей вкладки проекта откроется окно, в котором будет отображаться код программы для текущего состояния проекта.
Если проект некорректен, в этом окне будет выведено соответствующее сообщение. При изменении проекта, это окно будет автоматически обновляться. При закрытии проекта закроется и окно.
В больших проектах, при большом количестве строк кода, возможно подтормаживание основного окна проекта при обновлении окна просмоторщика. В этом случае надо для начала отключить подсветку синтаксиса.
В связи с особенностями языка программирования, в котором я работаю, отображение большого количества цветного текста, притормаживает движок. Если и это не поможет (хотя мне не удалось добиться притормаживания при отключённой подсветке синтаксиса даже на огромном проекте и на слабом ноуте), можно переключиться на ручной режим. В этом случае при наличии изменений в коде проекта, активируется кнопка «Обновить», с помощью которой можно обновить окно просмоторщика в удобное время.
И последнее большое обновление программы. Реализовано автоматическое форматирование кода. Он теперь выводится и в просмоторщик, и Arduino IDE в форматированном виде. Возможно, я не учёл все тонкости языка С, и в каких то случаях форматер будет делать свою работу некорректно. В этом случае в настройках проекта можно отключить форматирование кода (эта настройка сохраниться в проекте). В настройках программы можно отключить форматирование для всех вновь создаваемых проектов по умолчанию (для любого проекта можно в любой момент включить этот параметр).
Тестирование версии 7.х запланировано на два – два с половиной месяца. За это время я планирую добавить следующий функционал, который не успел сделать к первому бэта релизу.
- Использование в качестве параметров для условий типа ЦП контроллера, и типа платы.
- Задание отдельного шрифта для всех полей просмотра и редактирования кода.
- Под вопросом (буду обсуждать с Вами) возможность редактирования кода библиотек прямо в редакторе. Сейчас есть возможность просмотра содержимого файлов библиотек, редактирование сделать не сложно, но я пока для себя не решил – нежно ли это и правильно ли это.
Обсуждение тестирования бэта версии происходит здесь