Linux для программирования stm32

Содержание
  1. Записки программиста
  2. Готовим «взрослую» среду разработки под STM32 в Linux
  3. Необходимый софт
  4. Необходимое железо
  5. Создание каркаса проекта в STM32CubeMX
  6. Пишем код!
  7. Заключение
  8. Настройка Sublime Text 3, SW4 и STM32CubeMX для разработки STM32 под Linux
  9. Предварительно устанавливаем необходимый софт
  10. Создадим нужные директории для установки программ и хранения библиотек
  11. Для STM32CubeMX и Eclipse нам понадобятся:
  12. Устанавливаем 32-битные библиотеки
  13. Устанавливаем Open JDK 8 JRE
  14. Устанавливаем STM32CubeMX
  15. Создадим красивый ярлык и добавим поиск в Dash
  16. Устанавливаем Sublime Text 3
  17. Настройка Sublime Text 3
  18. Настроим ST3
  19. Настраиваем пакеты ST3
  20. EasyClangComplete
  21. Sublimelinter
  22. SublimeAStyleFormatter
  23. Устанавливаем AC6 System Workbench for STM32 (SW4STM32)
  24. Добавим поиск SW4 в Dash
  25. Настройка SW4
  26. Проверка настроенной среды и небольшие доводки
  27. Сделаем минимальную настройку МК
  28. Настроим сам проект
  29. Проверим Sublime Text 3
  30. Откомпилируем проект и посмотрим debug
  31. Настройка Git

Записки программиста

Готовим «взрослую» среду разработки под STM32 в Linux

Ранее мы выяснили, как разрабатывать под микроконтроллеры STM32 с использованием знакомой и понятной многим Arduino IDE. Этот подход, впрочем, не лишен недостатков. В частности, он (1) вводит лишние слои абстракции, что не позволяет писать максимально эффективный и компактный код, (2) работает с весьма ограниченным множеством микроконтроллеров и плат, а также (3) привязан к конкретной среде разработки, и не самой лучшей. Поэтому сегодня мы научимся разрабатывать под STM32 по-взрослому.

Важно! Порог вхождения в мир STM32 довольно высокий. Если вы никогда раньше не работали с микроконтроллерами, я бы рекомендовал начинать с плат Arduino и микроконтроллеров AVR.

Необходимый софт

Нам понадобятся следующие пакеты, часть из которых уже упоминалась в предыдущем посте:

Здесь приведены названия пакетов для Arch Linux, но я довольно уверен, что в других дистрибутивах Linux они называются так же, или как-то похоже. Если вам не удастся найти готовый пакет с STM32CubeMX, программу можно скачать отсюда (потребуется регистрация). Для работы приложению требуется виртуальная машина Java. Несмотря на то, что программа имеет расширение .exe, она превосходно запускается в Linux через java -jar file.exe .

Опционально вы также можете загрузить программу STLinkUpgrade, доступную для скачивания здесь (также потребуется регистрация). Эта программа предназначена для обновления прошивки программаторов STLink, что нередко приводит к исправлению багов, ну или как минимум к лучшим сообщениям об ошибках. Как и STM32CubeMX, эта программа написана на Java.

Необходимое железо

Помимо профессионального софта нам также понадобится профессиональное железо. Плата Blue Pill, рассмотренная в прошлом посте, в целом неплоха, но пользоваться ею несколько неудобно. В частности, к ней приходится подсоединять внешний программатор с его лишними проводами. Плюс STM32CubeMX про эту плату ничего не знает, что также вносит свою долю неудобства. Наконец, если у вас этой платы еще нет, вам придется ждать ее доставки с AliExpress.

Компания STMicroelectronics производит собственные отладочные платы серий Discovery и Nucleo. Последние являются более новыми, поэтому сосредоточим свое внимание на них. Платы STM32 Nucleo имеют встроенный отладчик STLink v2.1, что избавляет нас от лишних проводов. Они до определенной степени совместимы с Arduino-шилдами, что может пригодиться. Цены на платы Nucleo в России начинаются от 19$ за плату Nucleo-F030R8, притом купить ее можно в любом Чип-и-Дипе хоть сегодня.

Лично я взял плату помощнее — Nucleo-F411RE, на вырост, так сказать:

Принимая во внимание разнообразие плат Nucleo, выбор первой платы может быть непростым делом для начинающих. Следует учитывать множество факторов, включая количество Flash-, SRAM- и EEPROM-памяти, максимальную рабочую частоту, используемое ядро Cortex-M, количество аппаратных реализаций SPI/I2C/I2S/UART/CAN-интерфейсов, наличие/отсутствие DAC, ADC и модуля FSMC, энергопотребление, стоимость отладочной платы и ее наличие в ближайших магазинах, и, конечно же, стоимость и доступность самого микроконтроллера. Так как сейчас я не работаю над каким-то конкретным проектом, а просто изучаю микроконтроллеры STM32, я выбрал плату Nucleo-F411RE из-за неплохого соотношения цены и качества. Также меня привлек тот факт, что в микроконтроллере STM32F411RET6, на котором основана эта плата, используется довольно мощное ядро Cortex-M4F со встроенным FPU.

Fun fact! Существуют платы Xnucleo от компании Waveshare, совместимые с платами Nucleo. Платы Xnucleo легко узнать по характерному сине-желтому дизайну. На вид они более продуманы, чем Nucleo, так как используют более общепринятый в наше время разъем micro USB вместо mini USB, лишены дизайнерских «линий надреза» (см предыдущее фото), делающих плату более хрупкой, и имеют впаянный HSE кварцевый резонатор. Также компания Waveshare является производителем множества шилдов для плат Nucleo и Xnucleo.

Создание каркаса проекта в STM32CubeMX

Имеется большое количество отладочных плат и микроконтроллеров, под каждый из которых может требоваться немного измененные версии заголовочных файлов и стандартной библиотеки. Это количество помножим на число всевозможных конфигураций этих микроконтроллеров, например, какие пины для чего используются, какая из внутренних шин на какой частоте работает, и так далее. В плане подобных настроек STM32 является очень гибкой платформой. Получается довольно сложно. Для борьбы с этой сложностью создание каркаса пустого проекта (так называемый scaffolding) для заданной платы или микроконтроллера осуществляется при помощи специальной GUI-программы, STM32CubeMX.

Запускаем программу, жмем New Project. Во вкладке Board Selector находим вашу плату и делаем по ней двойной клик. Если у вас еще нет платы Nucleo, но есть плата Blue Pill и программатор STLink v2, на этом шаге вы можете выбрать микроконтроллер STM32F103C8Tx во вкладке MCU Selector.

Появится интерфейс с несколькими вкладками, из которых наиболее интересной для нас сейчас является вкладка Pinout:

Читайте также:  Linux mint включить вай фай

Эта вкладка позволяет настроить, какой пин микроконтроллера для чего будет использован (ввод, вывод, аналоговое чтение, SPI/I2C/UART-шина, и так далее). Так как STM32CubeMX знает про нашу плату, программа автоматически настроила пин PC13 на ввод (для чтения синей кнопки на плате), а пин PA5 — на вывод (для управления зеленым светодиодом на плате). В рамках этой заметки другие пины нам не потребуются, поэтому оставляем все, как есть. Если же вы используете незнакомую STM32CubeMX плату, здесь вам потребуется настроить пины вручную. Например, в случае с Blue Pill вы наверняка захотите настроить пин PC13 как GPIO_Output, так как он подключен к светодиоду на плате.

Важно! Если вы используете Blue Pill, в STM32CubeMX обязательно требуется включить SWD. По умолчанию для микроконтроллера STM32F103C8T6 он выключен. В связи с этим, плату вы без труда прошьете в первый раз, но прошить ее во второй будет довольно непросто (хотя возможно). Более подробное описание этой тонкости ищите в заметке Используем STM32 безо всяких отладочных плат.

На двух других вкладках с названиями Clock Configuration и Configuration в этот раз нам ничего менять не придется. На вкладке Power Consumtion Calculator можно оценить энергопотребление микроконтроллера и время его работы в зависимости от выбранного аккумулятора и рабочего напряжения. Надо сказать, довольно любопытная и полезная возможность.

На этом с настройкой покончено. Говорим Project → Generate Code. Во вкладке Project вводим имя проекта (Project Name), выбираем родительский каталог для этого проекта (Prоject Location), в выпадающем списке Toolchain / IDE выбираем вариант «Makefile». Во вкладке Code Generator стоит выбрать опцию «Add necessary library files as reference in the toolchain project configuration file». Иначе в ваш проект будут скопированы все библиотечные файлы, а это более 160 Мб. Затем жмем ОК. Проект STM32CubeMX автоматически сохранится в каталоге с исходным кодом (файл с расширением .ioc), поэтому отдельно сохранять его не требуется.

Makefile в получившемся проекте нужно немного подправить. Во-первых, нужно исправить значение переменных BINPATH и PREFIX :

В противном случае не будут найдены исполняемые файлы компилятора.

Во-вторых, стоит найти переменную OPT и дописать в нее флаг -Wall :

Иначе компилятор не будет ругаться на код, который скорее всего содержит ошибки — например, выражение if ( arr [ i ] = 1 ) , на месте которого почти наверняка должно быть if ( arr [ i ] == 1 ) .

В-третьих, если после этого шага сказать make , вы можете получить ошибки вроде следующих:

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

В-четвертых, Makefile умеет компилировать проект, но не содержит таргетов для прошивания платы, ее очистки, а также подключения по UART. Стоит дописать:

Наконец, из соображений скорее перфекционизма, чем острой надобности, я бы заменил все абсолютные пути на относительные, введя переменную вроде:

… а также прогнал бы Makefile через утилиту dos2unix.

На этом подготовку шаблона/каркаса можно считать завершенной! Чтобы не проделывать описанные выше шаги при создании каждого нового проекта, шаблон стоит сохранить где-нибудь в надежном месте. Дабы не приходилось при повторном использовании этого шаблона редактировать имя проекта, стоит также отредактировать значение переменной TARGET на какое-нибудь абстрактное main .

Пишем код!

Если вы откроете файл Src/main.c, то найдете в нем множество отметок вроде:

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

По задумке, код нужно вписывать между этими комментариями, чтобы при обновлении проекта в STM32CubeMX пользовательский код не был затерт. Лично я добавил вызов процедур init ( ) и loop ( ) в окрестностях основного цикла программы:

/* Infinite loop */
/* USER CODE BEGIN WHILE */
init ( ) ;
while ( 1 )
<
loop ( ) ;
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
>
/* USER CODE END 3 */

… а сами процедуры объявил перед процедурой main ( ) :

/* USER CODE BEGIN 0 */

void init ( void ) <
/* do nothing, yet */
>

void loop ( void ) <
/*
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_Delay(500);
*/
if ( HAL_GPIO_ReadPin ( GPIOC , GPIO_PIN_13 ) == GPIO_PIN_RESET ) <
HAL_GPIO_TogglePin ( GPIOA , GPIO_PIN_5 ) ;
>

/* USER CODE END 0 */

Управление микроконтроллером осуществляется через библиотеку под названием HAL, Hardware Abstraction Layer. Как видите, что касается обычного чтения кнопок и мигания светодиодами, здесь все не намного сложнее, чем в случае с той же Arduino.

Подключаем плату и говорим make flash . Если все было сделано правильно, нажатие синей кнопки на плате будет приводить к переключению зеленого светодиода. Также можно оставить в процедуре loop ( ) только код, который в приведенном выше отрывке я закомментировал, и тогда программа превратиться в обычный Blink.

Важно! Иногда микроконтроллер не запускается с новой прошивкой без нажатия черной кнопки Reset. По идее, обновление прошивки программатора с помощью утилиты STLinkUpgrade и использование утилиты st-flash с флагом —reset , как в нашем Makefile, исправляет эту проблему. Но так как она воспроизводится нерегулярно, полной уверенности нет.

Заключение

Как видите, все не так уж и сложно. Полученных знаний уже вполне достаточно, например, для того, чтобы написать программу, выводящую что-то на ЖК-экранчик или декодирующую сигнал от джойстика Sega. Можно даже пообщаться с какими-то сторонними модулями по SPI или I2C, хотя и не слишком эффективно, если вспомнить о наличии в микроконтроллере аппаратной поддержки этих протоколов. Однако эти темы, ровно как и ШИМ, чтение аналогового сигнала, работа с прерываниями или отладка кода, увы, выходят за рамки этой и без того уже довольно длинной статьи.

Читайте также:  Windows gaming on virtualbox

Кстати, к вопросу о выходящем за рамки. Хотя приведенных выше сведений будет вполне достаточно тем, кто пишет в Vim, как в данное время суток это делаю я, или каком-нибудь Sublime Text, кто-то из читателей может предпочитать работать в IDE. Настройка Eclipse для разработки под STM32 подробно расписана в книге Mastering STM32 за авторством Carmine Noviello. Если же вы предпочитаете CLion, его настройку подробно описал Илья Моторный в статье JetBrains CLion для микроконтроллеров.

Полную версию исходников к этому посту, как обычно, вы найдете на GitHub.

Источник

Настройка Sublime Text 3, SW4 и STM32CubeMX для разработки STM32 под Linux

Подобных статей достаточно много на просторах интернета, но хотелось бы написать актуальную вариацию. Лично я долгое время мучался в связке: Ubuntu — основная система, разработка под STM32 в виртуальной машине Windows 7. Но однажды меня это очень утомило и я таки решил потратить несколько дней на поиск решения и вылизывание полноценной среды под Linux Ubuntu. Забегу вперёд и скажу, что идеала я так и не добился, не удалось сделать realtime debug, как в Keil. В остальном всё очень пристойно.

Внимание, очень много текста и картинок!

Что в итоге у меня получилось:

  • Sublime Text 3 с автодополнениями и подсветкой всех функций, включая HAL и остальные библиотеки проекта;
  • AC6 System Workbench for STM32 с кастомизированными перспективами и прочими плюшками;
  • Конечно же использую контроль версий в Git.

Шаги, которые необходимо проделать:

  • Добавить необходимые PPA в APT;
  • Установить нужные библиотеки;
  • Установить программы;
  • Внести правки в конфигурационные файлы;
  • Доделать всякие плюшки в виде красивых иконок, поиска из меню и т.д.

Инструкция дана для абсолютно чистой машины на базе Ubuntu 16.04, в вашем случае могут быть уже установлены какие-то компоненты. В этой статье и в последующих буду приводить примеры для отладочной платы STM32F3DISCOVERY. Она основана на МК STM32F303VCT6 c 256-Кбайт Flash и 48-КБайт RAM в корпусе LQFP100. Вы можете адаптировать настройки под ваш МК очень легко благодаря STM32CubeMX.

Всё указано для пользователя с именем bulkin, не забудьте менять его при настройке.

Предварительно устанавливаем необходимый софт

Создадим нужные директории для установки программ и хранения библиотек

Я предпочитаю устанавливать программы не из PPA в отдельную папку в домашней директории

/Programs. Во-первых, устанавливаю с правами локального пользователя. Во-вторых, папка с именем на английском, т.к. некоторые программы не любят кириллицу в пути.
Библиотеки предпочитаю хранить в /opt/libs.

Да, /opt — это OPTIONAL APPLICATIONS. Но у меня в /opt монтируется отдельный раздел с btrfs со сжатием. На всех своих машинах я настроил пути к своим библиотекам в /opt/libs. Морочиться и делать все по канонам (использовать /usr/local/lib и /usr/local/share) не вижу смысла, легко запутаться.

Для STM32CubeMX и Eclipse нам понадобятся:

Устанавливаем 32-битные библиотеки

Устанавливаем Open JDK 8 JRE

Устанавливаем STM32CubeMX

Скачиваем дистрибутив с сайта ST (потребуется регистрация), разархивируем и запустим файл с расширением .linux. Если установщик не запускается, скорее всего не установлены 32-битные библиотеки. Путь установки меняем на /home/bulkin/Programs/STM32CubeMX, устанавливаем.

Создадим красивый ярлык и добавим поиск в Dash

Вставим следующее содержимое:

Теперь в dash иконка появится в разделе Приложения, поиск в dash будет работать после перелогинивания.

Запускаем STM32CubeMX, идём в настройки Help->Updater Settings и меняем путь для хранения библиотек на /opt/libs/STM32Cube/Repository/

Установим библиотеку для STM32F3. Открываем Help->Install New Libriaries, ставим галку Firmware Package for Family STM32F3, жмём Install Now

Устанавливаем Sublime Text 3

Вообще, SW4 вполне самодостаточная IDE. Но я люблю кодить именно в ST3, а компиляция и дебаг в SW4. Инструкция по установке ST3 для любых дистрибутивов лежит тут.

После этого стоит перелогиниться.

Настройка Sublime Text 3

Для начала установим Package Control.
Запускаем ST3 и жмём CTRL+`, в командную строку вставляем код и жмём ENTER:

Для полноценной работы нам понадобятся такие пакеты:

  • ARM Assembly (Подсветка Assembler в коде)
  • C Improved (Подсветка C)
  • CMakeEditor (Подсветка Cmake)
  • DocBlokr (Форматирование комментариев)
  • EasyClangComplete (автодополнение функций)
  • Hex to Int preview (показывает значение HEX)
  • SublimeAStyleFormatter (форматирует код нажатием CTRL+SHIFT+A)
  • Sublimelinter
  • Sublimelinter-contrib-cmakelint (Подсветка cmake)
  • Sublimelinter-cppcheck (проверяет код на ошибки с помощью cppcheck)
  • Sublimelinter-annotations (Подсвечивает FIXME, NOTE, TODO и т.д.)

Устанавливаем нужные пакеты из меню Preferences -> Package Control -> Install Package.

Настроим ST3

Откроем Preferences -> Settings и вставляем в правую половину:

Настраиваем пакеты ST3

EasyClangComplete

Настраиваем clang на C99 и указываем директории с базовыми библиотеками вроде StdLib.

Открываем Preferences -> EasyClangComplete -> Settings и вставляем в правую половину:

Sublimelinter

Открываем Preferences -> Sublimelinter -> Settings и вставляем в правую половину:

SublimeAStyleFormatter

Форматирование настроено на мой вкус. Подробное описание всех пунктов есть в Preferences -> SublimeAStyleFormatter -> Settings — Default

Открываем Preferences -> SublimeAStyleFormatter -> Settings — User и вставляем:

Устанавливаем AC6 System Workbench for STM32 (SW4STM32)

Полностью процесс установки описан на сайте OpenSTM32.org.

Переходим в папку загрузки и вводим

Если у вас установлен gksudo, установщик запустится в графическом режиме. У меня не установлен, потому всё в терминале.

Читайте также:  Windows 10 заблокирована сеть

Несколько раз вводим 1 в качестве согласия со всякой ерундой. Указываем путь установки:

Снова соглашаемся со всем, как девственник в свой первый раз, и ждём окончания установки.

Добавим поиск SW4 в Dash

Настройка SW4

Запускаем SW4, соглашаемся с созданием рабочей области, кликаем на workbench. При первом запуске будет установлен ARM Toolchain.

Сначала установим удобную тему. Открываем Help->Install New Software, жмём Add.. и вводим:

Жмём ОК, выбираем Eclipse Color Theme и жмём Next > и дальше всё по накатанной.

Включим тему: Window -> Preferences ->Appearance -> Color Theme. Я люблю Monokai, а вы можете позже подобрать, какую вам нравится.

Ну вот и пришло время запустить наш первый проект и проверить среду разработки в работе.

Проверка настроенной среды и небольшие доводки

Повторюсь, я буду приводить примеры для отладочной платы STM32F3DISCOVERY. Делаю всё максимально просто, нам ведь банально надо проверить настройки среды разработки.

Запустим STM32CubeMX, выберем в главном окне New Project. Откроем вкладку Board Selector. Выбираем нашу плату:

  • Type of board: Discovery
  • MCU Series: STM32F3
  • Из списка ниже выбираем STM32F3DISCOVERY

И два щелчка на нашей плате.

Сделаем минимальную настройку МК

В левом меню включим:

  • FreeRTOS: поставить галку Enabled
  • SYS: Trace Asynchronous Sw
  • Timebase Source: TIM17 (на текущем этапе можно выбрать любой)

Переходим во вкладку Clock Configuration:

  • В поле HCLK вводим 64МГц (на встроенном осциляторе максимальная частота)

Настроим сам проект

Открываем Project->Settings из верхнего меню.

  • Указываем имя проекта в поле Project Name: STM32Discovery-SW4-Test
  • Указываем путь в поле Project Location: /home/bulkin/workspace
  • Выбираем Toolchain: SW4STM32

Откроем вкладку Code Generator и включим «Add necessary libriary files as reference in the toolchain project configuration file»

Жмём ОК и теперь мы готовы создать проект. Жмите Generate Source Code в верхнем меню:

Проверим Sublime Text 3

Для начала надо создать CMakeList.txt. Для этого открываем консоль в корне нашего проекта и вводим:

Из нашего STM32Discovery-SW4-Test.ioc будут созданы необходимые для компиляции из командной строки файлы. Но нас интересует только CMakeLists.txt.template. Переименуем его в CMakeLists.txt.

Project->Add folder to Project. и выбираем папку нашего нового проекта.
Для начала надо добавить в CMakeList.txt недостающие пути к библиотекам. Это нужно для корректной работы EasyClangComplete. Слева щёлкаем на CMakeList.txt и вносим изменения:
Над строкой set(USER_INCLUDE Inc) добавляем:

Все последующие set вплоть до file меняем на:

Ну и в раздел include_directories в самый конец добавить $ $ .

Стоит объяснить, зачем нужны эти танцы с бубном. Дело в том, что при создании проекта мы выбрали опцию «добавлять библиотеки в качестве ссылок в тулчейне». А вот cubemx2cmake указывает относительный путь к библиотекам HAL, а также не добавляет пару путей к библиотекам CMSIS и FreeRTOS. Вероятно, это будет исправлено в будущих версиях, но пока так.

Теперь надо сбросить кэш Cmake: CTRL-SHIFT-P -> EasyClangComplete: Clean current cmake cache

Откроем Src/main.c Наведём курсор на какую-нибудь функцию и порадуемся всплывающим окошкам с её описанием. Подробнее о работе EasyClangComplete можно посмотреть тут.

Попробуем отформатировать код: нажмём CTRL+ALT+F и радуемся, как всё поменялось. Если предпочитаете другой стиль, нет проблем, настройки в Preferences -> SublimeAStyleFormatter.

Откомпилируем проект и посмотрим debug

Запускаем SW4 и импортируем проект:

  • File -> Import… -> General -> Existing projects into workspace
    • Select root directory: /home/bulkin/workspace/STM32Discovery-SW4-Test
    • НЕ ставим галку Copy projects into workspace

Выбираем проект в Project explorer. Компилируем Project -> Build Project. Если всё было сделано без ошибок ранее, проект скомпилируется за несколько секунд. И в консоли в нижней части будет примерно так:

Подключим нашу плату к компьютеру и попробуем загрузить прошивку: Run -> Run as Ac6 STM32 C/C++ Application. Если всё удачно, в конце вывода консоли будет:

Ну и самое вкусное. Запустим дебагер. Run -> Debug (или просто жмите F11). SW4 загрузит прошивку и предложит открыть отдельную перспективу для дебагера. Советую согласиться.

Изначально наша программа будет остановлена на int main(void) <> , это брейкпонт по-умолчанию. Запустим программу нажав F8, чтобы инициализировались все настройки МК, потом остановим, нажав кнопку Suspend в верхней панели. Давайте попробуем зажечь светодиоды. В правой верхней части перспективы откроем вкладку I/O Registers, развернём GPIO и правый щелчок на GPIOE -> ODR -> Activate

Теперь посмотрим в STM32CubeMX в нашем проекте, что светодиоды сидят на ногах PE8 — PE15:

В столбце HEX Value в строках c GPIOE -> ODR -> ODR15 по GPIOE -> ODR -> ODR8 выставим 1 и радуемся магии, как загораются светодиоды на плате. Ставим 0 — гаснут.

К сожалению, такая магия возможно только в остановленном состоянии, в отличие от того же Keil uVision, реалтайма тут нет. (грустный смайлик)

Осталось только настроить Git

Настройка Git

Заходим через терминал в директорию с нашим проектом и инициализируем Git, включая ввод персональных данных:

Создадим .gitignore и добавим в него:

Ну и сделаем коммит:

В общем-то дальнейшие вещи выходят за рамки статьи о настройке среды разработки. Это и полноценное описание дебагинга, и всякие горячие клавиши ST3. Об этом я бы хотел поговорить в другой раз. Надеюсь, данная статья будет полезна, хотя ныне настройка среды стала гораздо проще, чем ещё год назад. Удачи!

Источник

Оцените статью