Platformio ide terminal что это
PlatformIO IDE Terminal
A terminal package for Atom, complete with themes, API and more for PlatformIO IDE.
Ready to install?
You can install via apm: apm install platformio-ide-terminal
Or navigate to the install tab in Atom’s settings view, and search for platformio-ide-terminal .
Some Atom installations via flatpak may have incompatibilites, including an inability to find host system binaries from select directories, such as /usr/*. If you encounter issues using platformio-ide-terminal with flatpak, such as missing binaries, that are normally accessible from the path you have set in your shell of choice, or if you are not able to change directory into some directories, you may be affected. You can confirm this by looking for the nfsnobody permissions from the root of your disk. You can workaround this by installing another version of atom that is not inside a sandbox container. See here for full details.
platformio-ide-terminal stays in the bottom of your editor while you work.
Click on a status icon to toggle that terminal (or ctrl-` ). Right click the status icon for a list of available commands. From the right-click menu you can color code the status icon as well as hide or close the terminal instance.
You can open the last active terminal with the platformio-ide-terminal:toggle command (Default: ctrl-` ). If no terminal instances are available, then a new one will be created. The same toggle command is used to hide the currently active terminal.
From there you can begin typing into the terminal. By default the terminal will change directory into the project folder if possible. The default working directory can be changed in the settings to the home directory or to the active file directory.
Every terminal is loaded with your system’s default initialization files. This ensures that you have access to the same commands and aliases as you would in your standard terminal.
The terminal is preloaded with several themes that you can choose from. Not satisfied?
Use the following template in your stylesheet:
By hovering over the terminal status icon, you can see which command process is currently running in the terminal.
Need a faster way to figure out which terminal is which? Name your status icons!
Available via the status icon context menu.
Color code your status icons!
The colors are customizable in the settings, however the color names remain the same in the context menu.
Organize your open terminal instances by dragging and dropping them.
You can resize the view vertically, or just maximize it with the maximize button.
You can set the default working directory for new terminals. By default this will be the project folder.
Dropping a file on the terminal will insert the file path into the input. This works with external files, tabs from the Atom tab-view, and entries from the Atom tree-view.
Insert Selected Text
Insert and run selected text from your text editor by running the platformio-ide-terminal:insert-selected-text command ( ctrl-enter ).
If you have text selected, it will insert your selected text into the active terminal and run it.
If you don't have text selected it, will run the text on the line where your cursor is then proceed to the next line.
Quick Command Insert
Quickly insert a command to your active terminal by executing the platformio-ide-terminal:insert-text command.
A dialog will pop up asking for the input to insert. If you have the Run Inserted Text option enabled in the settings (default is false), platformio-ide-terminal will automatically run the command for you.
Support for Special Keys
Support for IME, dead keys and other key combinations via the Insert Text dialog box. Just click the keyboard button in the top left of the terminal or set up a keymap to the platformio-ide-terminal:insert-text command.
Note: Make sure you have the Run Inserted Command toggle off otherwise it will run your inserted text.
Map Terminal To
Map your terminals to each file or folder you are working on for automatic terminal switching.
Toggling the Auto Open a New Terminal (For Terminal Mapping) option will have the mapping create a new terminal automatically for files and folders that don't have a terminal. The toggle is located right under the Map Terminals To option.
Command | Action | Default Keybind |
---|---|---|
platformio-ide-terminal:new | Create a new terminal instance. | ctrl-shift-t or cmd-shift-t |
platformio-ide-terminal:toggle | Toggle the last active terminal instance. Note: This will create a new terminal if it needs to. | ctrl-` (Control + Backtick) |
platformio-ide-terminal:prev | Switch to the terminal left of the last active terminal. | ctrl-shift-j or cmd-shift-j |
platformio-ide-terminal:next | Switch to the terminal right of the last active terminal. | ctrl-shift-k or cmd-shift-k |
platformio-ide-terminal:insert-selected-text | Run the selected text as a command in the active terminal. | ctrl-enter |
platformio-ide-terminal:insert-text | Bring up an input box for using IME and special keys. | –––––––––––– |
platformio-ide-terminal:fullscreen | Toggle fullscreen for active terminal. | –––––––––––– |
platformio-ide-terminal:close | Close the active terminal. | ctrl-shift-x or cmd-shift-x |
platformio-ide-terminal:close-all | Close all terminals. | –––––––––––– |
platformio-ide-terminal:rename | Rename the active terminal. | –––––––––––– |
I think this package is bad news.
Good catch. Let us know what about this package looks wrong to you, and we'll investigate right away.
За последний год я написал довольно много кода для Arduino и попутно сменил несколько инструментов разработки. В статье упоминаются варианты которые пробовал и более подробно о том, на чем остановился. Речь пойдет про набор инструментов для случая когда >10 проектов под разные платы и немного про разработку и установку библиотек.
Themes
The terminal is preloaded with several themes that you can choose from. Not satisfied?
Use the following template in your stylesheet:
Map Terminal To
Map your terminals to each file or folder you are working on for automatic terminal switching.
Folder
Toggling the Auto Open a New Terminal (For Terminal Mapping) option will have the mapping create a new terminal automatically for files and folders that don't have a terminal. The toggle is located right under the Map Terminals To option.
Usage
platformio-ide-terminal stays in the bottom of your editor while you work.
Click on a status icon to toggle that terminal (or ctrl-` ). Right click the status icon for a list of available commands. From the right-click menu you can color code the status icon as well as hide or close the terminal instance.
Color Coding
Color code your status icons!
The colors are customizable in the settings, however the color names remain the same in the context menu.
Quick Command Insert
Quickly insert a command to your active terminal by executing the platformio-ide-terminal:insert-text command.
A dialog will pop up asking for the input to insert. If you have the Run Inserted Text option enabled in the settings (default is false), platformio-ide-terminal will automatically run the command for you.
Support for Special Keys
Support for IME, dead keys and other key combinations via the Insert Text dialog box. Just click the keyboard button in the top left of the terminal or set up a keymap to the platformio-ide-terminal:insert-text command.
Note: Make sure you have the Run Inserted Command toggle off otherwise it will run your inserted text.
Features
Resizable
You can resize the view vertically, or just maximize it with the maximize button.
Insert Selected Text
Insert and run selected text from your text editor by running the platformio-ide-terminal:insert-selected-text command ( ctrl-enter ).
If you have text selected, it will insert your selected text into the active terminal and run it.
If you don't have text selected it, will run the text on the line where your cursor is then proceed to the next line.
Terminal Naming
Need a faster way to figure out which terminal is which? Name your status icons!
Available via the status icon context menu.
I think this package is bad news.
Good catch. Let us know what about this package looks wrong to you, and we'll investigate right away.
A terminal package for Atom, complete with themes, API and more for PlatformIO IDE.
Sorting
Organize your open terminal instances by dragging and dropping them.
Themes
The terminal is preloaded with several themes that you can choose from. Not satisfied?
Use the following template in your stylesheet:
Install
Ready to install?
You can install via apm: apm install platformio-ide-terminal
Or navigate to the install tab in Atom’s settings view, and search for platformio-ide-terminal .
Resizable
You can resize the view vertically, or just maximize it with the maximize button.
Что использую
advancedSerial
Экономия памяти
Если обернуть строку в макрос F(), то она не будет загружена в память (SRAM), так что для экономии памяти используйте F():
Безусловно использование advancedSerial добавляет некоторый оверхед по сравнению со стандартным Serial, я попробовал приблизительно оценить какой. Ниже привожу результаты компиляции для Arduino Uno, так как у нее 2KB памяти и это минимум среди плат которые обычно использую.
Обычный сериал, без каких-либо библиотек:
storage space: 5%
dynamic memory: 9%
advancedSerial:
storage space: 5%
dynamic memory: 10%
examples/Advanced.ino
storage space: 9%
dynamic memory: 26%
examples/Advanced.ino с использованием F() макроса
storage space: 9%
dynamic memory: 10%
Получается что использование памяти увеличивается незначительно. Но advancedSerial не оптимальное решение в плане ресурсов, есть альтернативные реализации, например Debug.
PlatformIO
В каждом проекте PlatformIO есть подпапка lib, в которую можно помещать библиотеки. Это при ручной установке библиотек. Также у PlatformIO есть отдельная команда для установки библиотек platformio lib, к сожалению она по умолчанию устанавливает библиотеки глобально, чтобы библиотеки устанавливались локально в подпапку lib надо в platformio.ini проекта добавить:
Когда в январе сего года я писал материал о файловой системе LittleFS (интегрированной в состав arm mbed os), то обещал в скорейшем времени описать создание проекта с arm mbed os для произвольного микроконтроллера STM32. Как известно, онлайн IDE от ARM (а точнее, выделенного подразделения Arm mbed) поддерживает, во-первых, строго определенное число отладочных плат, и число их невелико; во-вторых, экспортирует онлайн-примеры, на базе которых можно строить какие-то свои проекты, только для наиболее известных IDE: ARM, uVision KEIL и IAR. Более того, некоторые примеры не экспортируются вовсе. То есть, доступны для экспорта или только варианты для IAR, или только для KEIL, и так далее. Так что, как в то время показалось, научиться “прикручивать” arm mbed os к любому МК было бы не лишним вовсе.
Однако, жизнь вносит свои коррективы в любые планы, и работать в этом направлении длительное время не получалось. Но вопрос оставался открытым, и теперь, по прошествии значительного времени, я возвращаюсь к тематике.
Так или иначе, оставался неразрешенным один немаловажный вопрос. Мы все используем различные IDE и различные тулчейны. Процесс портирования довольно непрост, и требует определенных танцев с бубном. К примеру, ассемблер для GCC не поддерживает синтаксис x86 (там AT&T), поэтому самая первая и элементарная проблема, с которой тут столкнется программист – это ругань того же GCC-шного компилятора на ассемблерные вставки в исходных кодаx операционной системы Arm mbed.
Кто-то пользуется IAR, кто-то uVision, кто-то пишет в Sublime Text, а кто-то (как и я) – в Code::Blocks. Кто-то использует Windows, а кто-то – Linux. Объять необъятное и охватить неохватываемое мы не в силах, и при этом оставить один из вариантов без рассмотрения – значит оставить за бортом какую-то часть аудитории.
Решение пришло внезапно и оказалось весьма простым и универсальным.
Среда разработки
Sorting
Organize your open terminal instances by dragging and dropping them.
Что использую
PlatformIO
- один проект под несколько плат, т.е. тот же самый код должен компилироваться под разные платы
- много проектов под разные платы, т.е. каждый проект под одну плату, но проектов много и платы разные
- есть необходимость работать через ssh, например если PlatformIO установлен на Raspberry Pi
- острое неприятие графического интерфейса
Использование с Arduino
Пересказывать документацию не буду, тут инструкция по установке, об использовании можно посмотреть в разделе Quick Start
Структура папок проекта для PlatformIO отличается от проекта Arduino IDE, каждый проект содержит файл platformio.ini в котором указано какие платы используются. Таким образом не приходится каждый раз выбирать нужную плату.
Расскажу на примере как использую PlatformIO при разработке библиотеки для Arduino. У библиотеки есть два примера, каждый из них является проектом в формате PlatformIO. В файле настроек проекта platformio.ini перечислены все платы на которых должна работать библиотека:
Скомпилировать пример для всех плат можно командой:
Скомпилировать только для uno можно так:
Загрузить прошивку на uno:
Запустить монитор последовательного порта:
Добавил алиасы в .zshrc чтобы сделать команды короче:
С ними таже последовательность действий:
Так же есть интеграция с Travis CI и другими CI инструментами, подробнее тут.
Вобще-то у Arduino IDE есть интерфейс коммандной строки, но он далек от совершенства.
Нюансы PlatformIO
- компиляция в PlatformIO не всегда равноценна компиляции в Arduino IDE, то что скопмилировалось в PlatformIO может не компилироваться в Arduino IDE и наоборот
- структура папок проекта не совпадает со структурой для Arduino IDE
- не все библиотеки доступны для установки через platformio lib
Working Directory
You can set the default working directory for new terminals. By default this will be the project folder.
Full Terminal
Every terminal is loaded with your system’s default initialization files. This ensures that you have access to the same commands and aliases as you would in your standard terminal.
Features
Создание проекта.
Вкратце о создаваемом проекте. По очевидным причинам, я принял решение создать проект для платы, которая не включена в состав поддерживаемых ARM online IDE, а именно STM32F4DISCOVERY.
В мире встраиваемых систем принято создавать демонстрационные проекты с миганием светодиодов. Мы этого делать не будем – это уже просто и неинтересно. PlatformIO подразумевает несколько типов проектов: cmsis, hal, rtos, и так далее. Так как речь сейчас идет об arm mbed os, то есть об операционной системе, создадим проект именно для rtos.
В проекте мы создадим и запустим три задачи (Task): первая будет выполнять перемножение массивов типа float (у нас же процессор Cortex-M4F, так воспользуемся FPU), вторая задача… ну ладно — мигать светодиодами (=)), а третья – определять степень загруженности процессора.
Открываем VS Code. Первым делом откроется окошко PIO Home. Выбираем “New Project”.
В окне “Project Wizard” указываем название проекта (у нас пусть это будет “armmbed_F407_CPU_usage”), и выбираем плату в выпадающем списке “Board”. Для читателей, планирующих использовать материал при написании софта для своих авторских плат: да, привязка к конкретной плате, но все ноги и периферию можно перенастраивать. Далее я пару слов об этом скажу, не спешите расстраиваться. Итак, Board.
Выбираем STM32F4DISCOVERY, и переходим в окно “Framework”. Тут у нас несколько вариантов.
Так как мы условились использовать arm mbed os, то очевидно, что здесь выбираем вариант “mbed”. Жмем “finish” — готово. Мастер маленько подумает, и откроет свежесозданную болванку проекта. Взглянем на это.
Как я уже упоминал выше, в проекте всего две папки по умолчанию: lib (пустая) и src, содержащая единственный файл main.cpp. Всего исходного кода, напомню, здесь мы не увидим. Но тем не менее, мы имеем возможность использовать весь функционал arm mbed os. Чтобы использовать rtos, мы должны добавить флаг сборки в файл “platformio.ini”:
Вообще, конфигурационный файл заслуживает отдельного рассмотрения. Мне этот подход напомнил TIRTOS/SYSBIOS от Texas Instruments с их конфиг-файлом .cfg, хоть в arm mbed все и проще намного. В конфигурационном файле можно декларировать многое — от аппаратных ресурсов до флагов сборки и отладки. К примеру, вот состав простейшего конфигурационного файла:
А это — конфиг-файл нашего примера в окончательном его виде:
Так что здесь есть что осваивать на досуге.
Итак, начинаем приводить проект в тот вид, который нам необходим.
Я буду приводить код блоками, и пояснять, что в нем происходит. Для начала, мы должны включить в исходник заголовочные файлы “mbed.h” и “rtos.h”. Думаю, понятно, зачем.
Функция “main” примет следующий вид:
Сначала мы создаем объекты класса “Thread”, то есть по сути, наши задачи (Task, Thread), которые будут нам обеспечивать определенный функционал.
Если кто-то обратил внимание, то следующей строкой значится
Это задача “idle” — то есть задача с пониженным приоритетом, которой отводится только то время, которое остается у процессора после выполнения задач с нормальным и повышенным приоритетами. Ну, в нашем случае эта задача останется голодной, так как у процессора не останется на нее времени. Я привел это здесь просто для примера.
Далее мы запускаем задачи по очереди методом “start”, передавая ему ссылки на функции задач, а именно на то, что будет выполняться в процессе. Это “ledblink” — шморгалка, “cpu_usage” — подсчет загрузки CPU, и самая тяжелая — “math_thread”, выполняющая перемножение массивов.
Посмотрим по очереди на каждую из задач. С “ledblink” все просто.
Мы поочередно меняем состояние вывода со светодиодом на противоположное, и вызываем задержку в 500 мс. Кстати, декларация “myled1” выглядит так:
Обратим теперь свое внимание на задачу “cpu_usage”.
Здесь уже все несколько сложнее. Вообще, дабы не выдумывать велосипед, я использовал готовую библиотеку, написанную одним веселым парнем еще в 2014 году для arm mbed, которая так и называется: CPU_Usage. Взять ее можно по ссылке, там же приводится краткое ее описание. Библиотека использует таймер (мы видим объект класса Timer tim). Сначала вызывается конструктор класса “cpu”, затем поочередно методы “working” (начало работы), и “update” — вычисление загрузки процессора в процентах.
Пожалуй, сейчас самый подходящий момент для демонстрации. Покажу скрин из режима отладки.
Слева вверху видим значение “value” = 95. Значит, процессор в тот момент был загружен на 95%. Вообще, по результатам эксперимента это значение при выполнении одних и тех же задач варьировалось от 87 до 98%.
Кстати, почему я демонстрирую скриншоты из дебаггера, а не из терминала? Все просто, у меня под рукой нет переходника UART-USB, поэтому я не могу использовать UART терминал (вот эта функция “pc.printf()” — это как раз вывод по UART, pc — объект класса Serial).
И последняя, и самая прожорливая для процессора – задача “math_thread”. Посмотрим на нее – сначала в “голом” виде, затем немножко дополним плюшками arm mbed.
Когда я придумывал, чем поднагрузить процессор, перемножение массивов сразу пришло мне на ум. И я вспомнил ситуацию, как заказчик, для которого я кое-что делал удаленно (и отлаживал тоже удаленно, через полмира), кричал мне в скайп: “Вы же программист, так загрузите процессор! Он же совсем холодный, сделайте так, чтобы он нагрелся!”. Давайте теперь уже таки сделаем так, чтобы наш MCU нагрелся. =)
И я решил перемножать массивы не последовательно, а генерировать их индексы с помощью генератора случайных чисел. И тут мне снова на помощь пришла одна замечательная математическая библиотека: alglib. Она охватывает огромный пласт математического функционала, и взять ее можно здесь. Весь огромный пласт функционала мы использовать, конечно же, не будем, а воспользуемся небольшим кусочком.
Если посмотреть на задачу-вычислитель произведения, то мы увидим там два вызова “RandomMassIndex()”. Это как раз функция, возвращающая значение в диапазоне (у нас диапазон ограничен числом элементов массивов).
Итак, что мы здесь делаем. Сначала инициализируем структуру “ae_state” (она используется для внутренних нужд), а затем – просто вызываем метод “ae_randominteger”, которому передаем ссылку на нашу структуру, и диапазон, в котором мы хотим получить сгенерированное случайное число (у нас это 0..18). Эта цифра должна быть меньше максимально генерируемого значения. Число элементов массива у нас – 20 (0..19), и максимальное число равно 19. Так что нам в качестве граничного аргумента 18 подойдет как нельзя лучше.
Кстати, можно посмотреть на результаты вызова этой функции.
Вверху слева – сгенерированные случайные индексы массивов, “rand_num_dmassi1” и “rand_num_dmassi2”. 13 и 12.
Прогоним еще один цикл, посмотрим – изменятся ли.
11 и 17. Изменились. Значит, все работает.
Раз уж мы заговорили об анализе ресурсов (в частности, об использовании процессорного времени), то немного уделим времени памяти и приоритетам задач. В arm mbed os реализован целый класс rtos::Thread для этих нужд.
Прямо в задачу “math_thread” добавим следующие строки:
Здесь (и выше) я использовал ключевое слово volatile – чтобы переменную можно было отслеживать.
Итак, сначала мы получаем ID задачи для дальнейшего использования. Затем вызываем методы для определения стека задачи и ее приоритета. Приоритет можно менять на ходу – в некоторых применениях это востребовано.
Смотрим.
Видим, что размер стека задачи равен 4096 байт, а приоритет – osPriorityNormal. Нормальный, в общем, приоритет.
Кроме этого, мы можем оценить степень используемости, размер неиспользованного и использованного стека. Прямо в main добавляем:
И после запуска задач:
Здесь вызываются четыре метода. “Stack_size()” возвращает размер стека задачи (аналогично тому, что мы оценивали чуть ранее), “max_stack()” возвращает размер максимально использованного в процессе выполнения, “free_stack()” возвращает размер свободного места, а “used_stack()” — размер использованного. Возвращаемые значения – в байтах. Для всех трех наших задач эти величины будут одинаковыми.
Посмотрим, что нам покажут по телевизору в дебаггере.
Как видим, от 4096 байт мы откушали совсем немного – всего 64 байта, и имеем в запасе еще аж 4032 байта.
Пожалуй, на этом с экспериментами и анализом мы закончим – я и так заигрался.
Да, что еще хотел сказать по поводу авторских плат. Сейчас кто-то может сказать, мол, вот – взял F4Discovery, на ней поигрался в свое удовольствие, а у меня вообще плата самодельная, и светодиоды вообще висят на других ногах, и в целом, я хочу SPI на ней поднять. Так вот, в репозитории armbed, в папке “targets” (выбираем дальше уже свои вполне конкретные MCU – их там тьма), в директориях каждого микроконтроллера, есть чудесные хидеры с названиями “PinNames.h”, “PeripheralPins.h” и “PeripheralNames.h”. Редактируя эти файлы, можно добавлять/редактировать/удалять периферию.
На этом, пожалуй, я остановлюсь. Больше примеров для различных применений arm mbed (в том числе и не-rtos, а просто bare metal) можно клонировать или скачать архивом здесь.
Insert Selected Text
Insert and run selected text from your text editor by running the platformio-ide-terminal:insert-selected-text command ( ctrl-enter ).
If you have text selected, it will insert your selected text into the active terminal and run it.
If you don't have text selected it, will run the text on the line where your cursor is then proceed to the next line.
Terminal Naming
Need a faster way to figure out which terminal is which? Name your status icons!
Available via the status icon context menu.
File Dropping
Dropping a file on the terminal will insert the file path into the input. This works with external files, tabs from the Atom tab-view, and entries from the Atom tree-view.
Caveats
Some Atom installations via flatpak may have incompatibilites, including an inability to find host system binaries from select directories, such as /usr/*. If you encounter issues using platformio-ide-terminal with flatpak, such as missing binaries, that are normally accessible from the path you have set in your shell of choice, or if you are not able to change directory into some directories, you may be affected. You can confirm this by looking for the nfsnobody permissions from the root of your disk. You can workaround this by installing another version of atom that is not inside a sandbox container. See here for full details.
Color Coding
Color code your status icons!
The colors are customizable in the settings, however the color names remain the same in the context menu.
Serial.print("Может быть лучше");
Process Titles
By hovering over the terminal status icon, you can see which command process is currently running in the terminal.
В чем проблема?
Стандартный Serial.print() слегка неудобен в случае если нужно напечатать
название и значение переменной, например чтобы вывести "pin_2 = , pin_3 = " приходится делать так:
Доступные модификаторы
wildcard | comment | Example |
---|---|---|
%s | replace with an string (char*) | Log.Info("String %s", myString); |
%c | replace with an character | Log.Info("use %c as input", myChar) |
%d | replace with an integer value | Log.Info("current value %d",myValue); |
%l | replace with an long value | Log.Info("current long %l", myLong); |
%x | replace and convert integer value into hex | Log.Info ("as hex %x), myValue); |
%X | like %x but combine with 0x123AB | Log.Info ("as hex %X), myValue); |
%b | replace and convert integer value into binary | Log.Info ("as bin %b), myValue); |
%B | like %x but combine with 0b10100011 | Log.Info ("as bin %B), myValue); |
%t | replace and convert boolean value into "t" or "f" | Log.Info ("is it true? %t), myBool); |
%T | like %t but convert into "true" or "false" | Log.Info ("is it true? %T), myBool); |
Usage
platformio-ide-terminal stays in the bottom of your editor while you work.
Click on a status icon to toggle that terminal (or ctrl-` ). Right click the status icon for a list of available commands. From the right-click menu you can color code the status icon as well as hide or close the terminal instance.
Что пробовал
Ino — проект от российской компании Амперка, утилита командной строки для прошивки Arduino.
Довольно популярный был проект, >200 форков. Последний коммит в апреле 2014, поэтому не работает со свежими версиями IDE (кажется начиная с 1.5).
Есть живой форк Arturo, немного его использовал, но были проблемы в каких-то экзотических случаях.
Arduino-Makefile
Arduino-Makefile — компиляция и загрузка с помощью make. Не поддерживаются Arduino Due, Zero и другие 32-битные платы. Отличием от стандартной IDE является то, что методы должны быть объявлены до использования, так что при переносе готовых проектов может понадобится редактирование исходников. Если правильно помню, мне не удалось подружить Arduino-Makefile и SparkFun Pro Micro.
Working Directory
You can set the default working directory for new terminals. By default this will be the project folder.
Process Titles
By hovering over the terminal status icon, you can see which command process is currently running in the terminal.
Terminal
You can open the last active terminal with the platformio-ide-terminal:toggle command (Default: ctrl-` ). If no terminal instances are available, then a new one will be created. The same toggle command is used to hide the currently active terminal.
From there you can begin typing into the terminal. By default the terminal will change directory into the project folder if possible. The default working directory can be changed in the settings to the home directory or to the active file directory.
Commands
Command | Action | Default Keybind |
---|---|---|
platformio-ide-terminal:new | Create a new terminal instance. | ctrl-shift-t or cmd-shift-t |
platformio-ide-terminal:toggle | Toggle the last active terminal instance.Note: This will create a new terminal if it needs to. | ctrl-` (Control + Backtick) |
platformio-ide-terminal:prev | Switch to the terminal left of the last active terminal. | ctrl-shift-j or cmd-shift-j |
platformio-ide-terminal:next | Switch to the terminal right of the last active terminal. | ctrl-shift-k or cmd-shift-k |
platformio-ide-terminal:insert-selected-text | Run the selected text as a command in the active terminal. | ctrl-enter |
platformio-ide-terminal:insert-text | Bring up an input box for using IME and special keys. | –––––––––––– |
platformio-ide-terminal:fullscreen | Toggle fullscreen for active terminal. | –––––––––––– |
platformio-ide-terminal:close | Close the active terminal. | ctrl-shift-x or cmd-shift-x |
platformio-ide-terminal:close-all | Close all terminals. | –––––––––––– |
platformio-ide-terminal:rename | Rename the active terminal. | –––––––––––– |
Quick Command Insert
Quickly insert a command to your active terminal by executing the platformio-ide-terminal:insert-text command.
A dialog will pop up asking for the input to insert. If you have the Run Inserted Text option enabled in the settings (default is false), platformio-ide-terminal will automatically run the command for you.
Support for Special Keys
Support for IME, dead keys and other key combinations via the Insert Text dialog box. Just click the keyboard button in the top left of the terminal or set up a keymap to the platformio-ide-terminal:insert-text command.
Note: Make sure you have the Run Inserted Command toggle off otherwise it will run your inserted text.
Install
Ready to install?
You can install via apm: apm install platformio-ide-terminal
Or navigate to the install tab in Atom’s settings view, and search for platformio-ide-terminal .
PlatformIO IDE.
PlatformIO – кроссплатформенный тулчейн, написанный на python, наличие которого на машине пользователя является, пожалуй, единственным обязательным условием (не ниже версии 2.7).
По своему исполнению и использованному инструментарию PlatformIO мне напомнил несколько лет назад вышедшую IDE MicroEJ Studio, в которой можно было писать код для микроконтроллеров на Java. В дальнейшем в МК заливалась MicroJVM (написанная на С), и код исполнялся в ней. Широкого распространения, впрочем, среда не получила, и в массы не пошла.
PlatformIO может использоваться в составе ряда широко распространенных IDE и редакторов кода:
- Atom;
- Clion;
- Eclipse;
- Emacs;
- NetBeans;
- Qt Creator;
- Sublime Text;
- VIM;
- Visual Studio;
- VSCode и т.д.
Commands
Command | Action | Default Keybind |
---|---|---|
platformio-ide-terminal:new | Create a new terminal instance. | ctrl-shift-t or cmd-shift-t |
platformio-ide-terminal:toggle | Toggle the last active terminal instance.Note: This will create a new terminal if it needs to. | ctrl-` (Control + Backtick) |
platformio-ide-terminal:prev | Switch to the terminal left of the last active terminal. | ctrl-shift-j or cmd-shift-j |
platformio-ide-terminal:next | Switch to the terminal right of the last active terminal. | ctrl-shift-k or cmd-shift-k |
platformio-ide-terminal:insert-selected-text | Run the selected text as a command in the active terminal. | ctrl-enter |
platformio-ide-terminal:insert-text | Bring up an input box for using IME and special keys. | –––––––––––– |
platformio-ide-terminal:fullscreen | Toggle fullscreen for active terminal. | –––––––––––– |
platformio-ide-terminal:close | Close the active terminal. | ctrl-shift-x or cmd-shift-x |
platformio-ide-terminal:close-all | Close all terminals. | –––––––––––– |
platformio-ide-terminal:rename | Rename the active terminal. | –––––––––––– |
File Dropping
Dropping a file on the terminal will insert the file path into the input. This works with external files, tabs from the Atom tab-view, and entries from the Atom tree-view.
About
A terminal package for Atom, complete with themes, API and more for PlatformIO IDE
A terminal package for Atom, complete with themes, API and more for PlatformIO IDE.
Atom vs. VS Code
На домашней странице к загрузке предлагаются два редактора: Atom и VS Code. Я попробовал оба, и сразу скажу: VS Code удобнее. Хотя бы потому, что в нем элементарно присутствует переход по коду. Забегая вперед, скажу: в проекте библиотек и исходников arm mbed os вы не увидите, они все сидят в локальном репозитории, поэтому в дереве проекта будут только ваши main.cpp и всё прочее, что создадите вы сами. Поэтому смотреть какие-то объявления, классы и их объекты, интерфейсы классов, придется сто процентов. А Atom такой возможности… не представляет! И при использовании Atom довольствоваться нужно будет только документацией mbed os. Согласитесь, это неудобно.
Итак, дальнейшее рассмотрение процесса я провожу в применении к VS Code. Нам необходимо проделать следующие шаги:
- Установить VS Code.
- Установить PlatformIO IDE.
- Настроить udev rules (для пользователей Линукс) – возможно, это не понадобится, но чтобы потом не подпрыгивать на стуле, нанесем превентивный удар.
- Создать проект и включить в него минимальный функционал. Удостовериться, что он собирается, грузится и отлаживается на плате (в качестве сервера используется OCD/GDB).
После установки запускаем редактор, открываем панель расширений (Extensions), и вводим в поиске “platformio”. Первым же вариантом выскочит “PlatformIO IDE”. Нажимаем “Install”, дожидаемся окончания установки, перезагружаем редактор.
Открываем терминал и пишем в нем:
где $USER – это имя вашего пользователя. К примеру, у меня это subdia.
После этого все проблемы с отладчиком, если они могли возникнуть, должны решиться.
Caveats
Some Atom installations via flatpak may have incompatibilites, including an inability to find host system binaries from select directories, such as /usr/*. If you encounter issues using platformio-ide-terminal with flatpak, such as missing binaries, that are normally accessible from the path you have set in your shell of choice, or if you are not able to change directory into some directories, you may be affected. You can confirm this by looking for the nfsnobody permissions from the root of your disk. You can workaround this by installing another version of atom that is not inside a sandbox container. See here for full details.
Arduino IDE
Редко пользуюсь Arduino IDE, возможно есть способ лучше. Способ такой: устанавливать библиотеки в подпапку вашего проекта и поместить симлинки(ярлыки?) для каждой библиотеки в папку libraries (в папку куда устанавливает библиотеки Arduino IDE).
Кстати, если правильно помню, Arduino IDE компилирует все библиотеки из папки libraries при компиляции любого скетча, так что время компиляции увеличивается если в libraries много библиотек. Еще один повод не использовать Arduino IDE.
В чем проблема?
Map Terminal To
Map your terminals to each file or folder you are working on for automatic terminal switching.
Folder
Toggling the Auto Open a New Terminal (For Terminal Mapping) option will have the mapping create a new terminal automatically for files and folders that don't have a terminal. The toggle is located right under the Map Terminals To option.
Установка библиотек
В чем проблема?
- Только в последних версиях появилось какое-то управление библиотеками, пока без подобия Gemfile/requirements.txt/package.json, то есть нельзя для проекта указать какие либы каких версий используются
- нет интеграции с Git или другими VCS
- текстовый редактор не сравнить с моим любимым текстовым редактором
- нет возможности сохранить выбор платы в проекте
- неудобный вывод ошибок компиляции
Full Terminal
Every terminal is loaded with your system’s default initialization files. This ensures that you have access to the same commands and aliases as you would in your standard terminal.
Terminal
You can open the last active terminal with the platformio-ide-terminal:toggle command (Default: ctrl-` ). If no terminal instances are available, then a new one will be created. The same toggle command is used to hide the currently active terminal.
From there you can begin typing into the terminal. By default the terminal will change directory into the project folder if possible. The default working directory can be changed in the settings to the home directory or to the active file directory.
Окружение и локальный репозиторий arm mbed os
После установки окружения не будет лишним понять, где находится локальный репозиторий arm mbed os (как я уже говорил, в дереве проекта вы его не увидите), где находятся все исходники mbed os, и куда сохраняется скомпилированный проект.
В процессе установки platformIO разворачивает локальный репозиторий arm mbed (и не только его) по пути $HOME/.platformio/packages. Вот, к примеру, arm mbed.
Файлы прошивки и прекомпилированные исходники находятся непосредственно в папке проекта.
Это всё, что нам нужно знать о том, что где хранится. Перейдем непосредственно к созданию проекта.
Читайте также: