惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cloudbric
Cloudbric
Y
Y Combinator Blog
N
Netflix TechBlog - Medium
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
Recorded Future
Recorded Future
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
U
Unit 42
爱范儿
爱范儿
F
Full Disclosure
Google Online Security Blog
Google Online Security Blog
腾讯CDC
小众软件
小众软件
A
Arctic Wolf
云风的 BLOG
云风的 BLOG
Webroot Blog
Webroot Blog
B
Blog RSS Feed
Project Zero
Project Zero
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 聂微东
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
CXSECURITY Database RSS Feed - CXSecurity.com
SecWiki News
SecWiki News
S
Schneier on Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Help Net Security
W
WeLiveSecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
WordPress大学
WordPress大学
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
雷峰网
雷峰网
C
Cybersecurity and Infrastructure Security Agency CISA
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
V
V2EX
宝玉的分享
宝玉的分享
H
Hacker News: Front Page
aimingoo的专栏
aimingoo的专栏
L
LangChain Blog
C
Check Point Blog
O
OpenAI News
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
C
CERT Recently Published Vulnerability Notes
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
K
Kaspersky official blog
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
VSCode как IDE для embedded разработки
d_susokolov · 2026-05-25 · via Все публикации подряд на Хабре

Простой

15 мин

12K

В данной статье рассматривается процесс настройки vscode для разработки встроенного ПО на базе ядер cortex-M и процессе превращения редактора в полноценную IDE. При этом большинство представленных расширений являются универсальными и применимы в широком спектре задач программирования.

В отличии от проприетарных решений, таких как Keil, подход использования редактора vscode + компилятор gcc позволяет гибко настроить каждый пункт от начала разработки до релиза продукта. За время своей работы мною было опробованы разные решения: от классического keil до связки sublime и CodeSourcery. В последние годы я перешел на vscode + msys2: практически все ПО Open Source, не требует лицензий, не ограничено 32 Кб кода и может работать без сети интернет.

0. MSYS2: Набор инструментов для разработки

Данный этап не является обязательным, так как компилятор, OpenOCD, Python, Qt и другие компоненты можно установить как отдельные программы. Однако использование MSYS2 предпочтительнее: этот подход позволяет управлять всеми зависимостями в рамках единой экосистемы, а обновление всей среды разработки сводится к одной команде: pacman -Syu.

Для настройки msys2 необходимо:

  1. Скачайте и установите msys2.

  2. В VS Code вызовите палитру команд (Ctrl+Shift+P или F1).

  3. Выберите пункт Preferences: Open User Settings (JSON).

  4. Добавьте конфигурацию для интеграции терминала MSYS2 в VS Code:

Настройка терминала msys2 в vscode
// Настройки терминала MSYS2
"terminal.integrated.profiles.windows": {
    "PowerShell": {
        "source": "PowerShell",
        "icon": "terminal-powershell"
    },
    "Command Prompt": {
        "path": [
            "${env:windir}\\Sysnative\\cmd.exe",
            "${env:windir}\\System32\\cmd.exe"
        ],
        "args": [],
        "icon": "terminal-cmd"
    },
    "Git Bash": {
        "source": "Git Bash"
    },
    "MSYS2": {
        "path": "C:\\msys64\\usr\\bin\\bash.exe",
        "label": "MSYS2",
        "args": [
            "--login",
            "-i"
        ],
        "env": {
            "CHERE_INVOKING": "1",
            "MSYS2_PATH_TYPE": "inherit",
            "MSYSTEM": "MINGW64"
        }
    },
},
"terminal.integrated.defaultProfile.windows": "MSYS2",

После запуска терминала msys2 необходимо установить набор инструментов и библиотек, необходимых для базовой сборки проектов под ARM. Сначала выполните полное обновление системных репозиториев и пакетов. Для этого в терминале msys2 введите:

pacman -Syu
# необходимо перезапустить MSYS2 и выполнить вторую часть обновления:
pacman -Su

Затем установите компилятор, отладчик и инструменты сборки:

pacman -S base-devel git mingw-w64-x86_64-arm-none-eabi-gcc mingw-w64-x86_64-gdb-multiarch

После выполнения этих шагов ваша среда будет готова к работе с проектами на базе Makefile (использование CMake в данной статье не рассматривается). Теперь перейдем к настройке самого VS Code и разбору расширений, которые значительно оптимизируют процесс разработки.

1. Arm Assembly. Подсветка синтаксиса ассемблерных файлов

Подсветка синтаксиса
arm-assembly

arm-assembly

2. Better C++ Syntax. Улучшенная подсветка синтаксиса для разных тем оформления

Подсветки синтаксиса для темы Dark+
better-cplusplus-syntax

better-cplusplus-syntax

3. Better Comments. Разделение комментариев на категории и их уникальное форматирование

Подсветка комментариев
better-comments

better-comments

Для настройки нажмите ctrl+shift+p и выберите Preferences: Open User Settings (JSON). В файле настроек добавьте параметры для расширения

Настройки better-comments

// better-comments
"better-comments.multilineComments": true, // поддержка многострочных комментариев
"better-comments.highlightPlainText": true, // Определение тега будет идти по первому символу
"better-comments.tags": [
    {
        "tag": "!",
        "color": "#FF2D00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "?",
        "color": "#3498DB",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "//",
        "color": "#474747",
        "strikethrough": true,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "todo",
        "color": "#FF8C00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "*",
        "color": "#98C379",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "/* !",
        "color": "#FF2D00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "/*?",
        "color": "#3498DB",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    },
    {
        "tag": "/* todo",
        "color": "#FF8C00",
        "strikethrough": false,
        "underline": false,
        "backgroundColor": "transparent",
        "bold": false,
        "italic": false
    }
],

Расширение Better Comments может показаться избыточным, если вы не собираетесь использовать паттерны в комментариях вроде “!” или “?”. Если вам нужна только подсветка вроде “todo”, “bug” - достаточно будет расширения todo-tree

4. Bookmarks. Закладки для конкретной строки в файле

Закладки в боковой панели
bookmarks

bookmarks

Позволяет расставлять закладки на строку с добавлением своего комментария и осуществлять быстрый переход по клику из боковой панели. Удобно, когда не хватает alt + ⇄ и ctrl + tab

5. C/C++. Базовое расширение для разработки на c/c++

Настройки c/c++ находятся в файле c_cpp_properties.json в корне рабочей области.

Настройки расширения c/c++
{
    "name": "cortex",
    "includePath": [
        // Пути к библиотекам
    ],
    // Что бы работали директивы #ifdef для определений, задаваемых в MAKEFILE, которые редактор "не видит"
    "defines": [
        "DEBUG",
        "UART1"
    ],
    "cppStandard": "c++17",
    "cStandard": "c17",
    "intelliSenseMode": "windows-gcc-arm",
}

6. Code Spell Checker. Проверка орфографии для EN/RU

Проверка орфографии
code-spell-checker

code-spell-checker

Подсвечивает опечатки и предлагает их исправление (ctrl + .). Слова, которых нет в словарях, вроде GPIOA, можно добавить в пользовательский словарь (Add: “word” to user settings). Так же подсвечивает ошибки в тексте коммита встроенной системы управления версиями.

Для поддержки русского языка установите Russian - Code Spell Checker. Еще пригодятся Scientific Terms - Code Spell Checker и Win32 - Code Spell Checker. По умолчанию расширение отображает опечатки на панели “проблемы” т.к. они считаются “warning”. Для того, что бы убрать предупреждения из вкладки, нужно нажать ctrl+shift+p, выбрать Preferences: Open User Settings (JSON). В файле настроек добавьте параметры для расширения:

Настройки Code Spell Checker
// Проверка орфографии, поддерживаемые словари
"cSpell.language": "en,ru,scientific-terms-us",
"cSpell.spellCheckOnlyWorkspaceFiles": true,
// Убрать из окна "Проблемы"
"cSpell.diagnosticLevel": "Hint",

7. Cortex-Debug. Полноценный отладчик МК на ядрах Cortex-M

Cortex-Debug
cortex-debug

cortex-debug

Cortex-Debug — это полноценный интерфейс для отладки, обладающий всеми функциями отладчика:

  • Работа с множеством серверов отладки: segger, st-link, openocd, pyocd или внешний external.

  • Просмотр регистров периферии за счет интеграции SVD (System View Description) файлов.

  • Полноценный интерфейс отладки: установка точек остановки, приостановки работ, “прыжка” через функцию

  • Просмотр стека вызовов. Незаменимая вещь при отладке вылетов - вы можете отследить выполнение программы от места падения до самой первой ассемблерной инструкции.

  • Просмотр значения переменных. При этом в окне ввода переменной для просмотра можно вводить выражения типа взятия адреса, разыменования, приведения типов,стандартных функций типа sizeof и т.п.

  • liveWatch обновление переменных. Значение переменной будет обновляться без остановки ядра - незаменимая вещь, когда отлаживаешь процессы окружающего мира, который не будет ждать пока вы застыли в прерывании на точке остановки.

Cortex Debug умеет работать с несколькими серверами отладки: нативный segger, stlink и openocd. Последним удобно пользоваться, т.к. это бесплатный продукт, поддерживающий множество программаторов, не требующий пары сотен тысяч за лицензионный jlink - достаточно st-link за пару сотен рублей.

Openocd из состава msys2 (пакет mingw-w64-x86_64-openocd) может не поддерживать ваш МК. В таком случае ищите нужную сборку на профильных форумах или попробуйте openocd-xpack.

Для корректной работы программатора с openocd необходима установка драйверов libusb. Установить их можно через программы Zadig или UsbDriverTools.

Для работы расширения нужно добавить в папку .vscode файл launch.json со следующим содержимым:

Настройки launch.json
{
    "version": "0.2.0",
        "configurations": [
        {
            "name": "openocd",
            "showDevDebugOutput": "none",
            "request": "launch",
            "type": "cortex-debug",
            "cwd": "${workspaceRoot}",
            // Если используется openocd не из состава msys2
            "servertype": "openocd",
            "serverpath": "путь_к_openocd.exe",
            "executable": "${workspaceRoot}/путь_к_elf_файлу",
            "searchDir": [
                "путь_к_папке_scripts"
            ],
            // путь к файлу конфигурации, если необходимы особые настройки
            "configFiles": [
                "${workspaceRoot}/openocd_debug.cfg"
            ],
            // liveWatch работает только для "servertype": "openocd"
            "liveWatch": {
                "enabled": true,
                "samplesPerSecond": 1
            },
            // Если openocd запускается отдельно
            // "servertype": "external",
            // "executable": "${workspaceRoot}/путь_к_elf_файлу",
            "gdbPath": "C:/msys64/mingw64/bin/gdb-multiarch.exe",
            "gdbTarget": "localhost:3333",
            "svdFile": "${workspaceRoot}/ваш_мк.svd",
            // "preLaunchTask": "debug" // выполнить задачу из файла tasks.json (например запуск внешнего отладчика или reset микроконтроллера)
            // "runToEntryPoint": "my_func" // останавливает выполнение в начале функции my_func
        }
    ]
}

Соединение с микроконтроллером через openocd можно запускать как самому: ("servertype": "external") через цель в makefile так и через расширение: ("servertype": "openocd").

Иногда может потребоваться первый способ. Для этого я использую отдельную цель, и потом нажимаю F5:

ifndef CUSTOM_TARGET_D
%.d: %.$(TARGET)
    $(OPENOCD) -s $(OPENOCD_SCRIPTS_DIR) -s $(OPENOCD_CFG_FOLDER) -f $(OPENOCD_CFG) \
    -c init \
    -c "reset halt" &
    sleep 3
    $(GDB) -q -ex 'target remote localhost:3333' $<
endif

Можно так же добавить в tasks.json эту цель и указать ее в параметре preLaunchTask файла launch.json.

8. Doxygen Documentation Generator. Генератор комментариев по doxygen

Doxygen - система документирования кода с автоматической генерацией документации на основе специально оформленных комментариев. Не важно, генерируете ли вы pdf документации, требуют ли от вас её заказчики - оформлять комментарии в едином стиле по всему проекту - база. И что бы её проще было соблюдать - поможет данное расширение. Оно автоматически генерирует шаблон комментария по вводу трех символов, которые определяются в настройках:

Настройки Doxygen Documentation Generator в launch.json
// Doxygen
"doxdocgen.c.firstLine": "/*!",
"doxdocgen.c.triggerSequence": "/*!",
"doxdocgen.file.copyrightTag": [
    "\\ваш (c) копирайт"
],
"doxdocgen.file.versionTag": "\\version 1.0",
"doxdocgen.generic.authorEmail": "ваша@почта",
"doxdocgen.generic.authorName": "Ваше имя",
"doxdocgen.generic.commandSuggestionAddPrefix": true,
"doxdocgen.generic.useGitUserEmail": true,
"doxdocgen.cpp.tparamTemplate": "\\tparam {param} ",
"doxdocgen.file.fileTemplate": "\\file {name}",
"doxdocgen.generic.authorTag": "\\author {author} ({email})",
"doxdocgen.generic.briefTemplate": "\\brief {text}",
"doxdocgen.generic.dateTemplate": "\\date {date}",
"doxdocgen.generic.paramTemplate": "\\param {param} ",
"doxdocgen.generic.returnTemplate": "\\return {type} ",

Параметр doxdocgen.c.triggerSequence отвечает за триггер для формирования комментария. Когда вы введете последовательно /*! и нажмете “Ввод” - шаблон комментария сформируется автоматически.

Тема doxygen и документации идет вместе с codestyle - набором правил и соглашений, используемых при написании исходного кода. В vscode есть встроенный способ форматирования кода под ваш кодстайл. Вам нужен файл .clang-format с описанием стиля кода:

Настройки формитрования кода в launch.json
// Форматтер
// "C_Cpp.clang_format_path": "путь_к_clang-format.exe",
"C_Cpp.clang_format_style": "путь_к_.clang-format",
"C_Cpp.default.intelliSenseMode": "gcc-arm",
"C_Cpp.formatting": "clangFormat",
"editor.formatOnSave": true, // форматировать файл при сохранении

9. Draw.io Integration. Создание диаграмм

Draw.io Integration
drawio

drawio

Бесплатный и удобный инструмент для рисования циклограмм работы, временных графиков, блок схем и алгоритмов. Незаменимая вещь для ваших заказчиков при написании технического задания.

10. Git Graph. Визуализация репозитория

Git Graph
git-graph

git-graph

Наглядно показывает историю репозитория в виде графа. Имеет инструменты для работы с git прямо из интерфейса графа.

Однако для работы с git, а мой взгляд, удобнее использовать встроенный клиент в vscode. Он предоставляет удобный доступ ко всем функциям системы контроля версий. Из него удобно скопировать шаблон предыдущего коммита и вставить для текущего. Таким образом формируется единый стиль коммитов, не нужно каждый раз ломать вспоминать шаблон оформления плюс если вы используете CI/CD - единый стиль облегчит формирование релизов и заполнение CHANGELOG.md. Так же сразу видны изменения по файлам и рабочим областям, что позволяет писать ченжлог “на лету” и пушить сразу во все репозитории рабочей области. По сравнению с другими инструментами, вроде клиента sublime, tortoise или просто git.exe - система контроля версий vscode обеспечивает наилучший пользовательский опыт и скорость работы. Но тут конечно дело вкуса и привычки.

Так же есть расширение GitLens, которое красиво разрисует граф репозитория с аватарками и графиком активности, но т.к. оно платное - его я не использую.

GitLens
git-lens

git-lens

11. GNU Linker Map files. Подсветка синтаксиса map-файлов

GNU Linker Map files

Идентификатор

trond-snekvik.gnu-mapfiles

Описание

Syntax highlighting and symbol listing for GNU linker .map files

Издатель

Trond Snekvik

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=trond-snekvik.gnu-mapfiles

GNU Linker Map files
map-files

map-files

Подсветка синтаксиса для удобного отображения структуры map-файлов.

12. Hex Editor. Просмотр и редактирование бинарных файлов

Hex Editor

Идентификатор

ms-vscode.hexeditor

Описание

Allows viewing and editing files in a hex editor

Издатель

Microsoft

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=ms-vscode.hexeditor

Hex Editor
hex-editor

hex-editor

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

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

HxD
hxd

hxd

13. LinkerScript. Подсветка синтаксиса LD-файлов

LinkerScript

Идентификатор

ZixuanWang.linkerscript

Описание

Language support for GNU linker script

Издатель

Zixuan Wang

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=ZixuanWang.linkerscript

LinkerScript
linker-script

linker-script

Подсветка синтаксиса для удобного отображения структуры LD-файлов.

14. Markdown All in One. Мощный инструмент для верстки Markdown

Markdown All in One

Идентификатор

yzhang.markdown-all-in-one

Описание

All you need to write Markdown (keyboard shortcuts, table of contents, auto preview and more)

Издатель

Yu Zhang

Ссылка на Visual Studio Marketplace

https://marketplace.visualstudio.com/ items?itemName=yzhang.markdown-all-in-one

Для написания wiki, readme, release notes используется язык разметки Markdown. Данное расширение предостовляет инструменты для работы с этим языком: подстветка синтаксиса, проверка стандартов, исправление ошибок, автодополнения и т.п.

Дополнительно можно установить Markdown Kroki и Markdown Preview Mermaid Support если вы используете отрисовку диаграмм с помощью Kroki и Mermaid. Markdown Kroki поддерживается GitLab self hosted “из коробки” без дополнительных зависимостей и доступом к интернет.

Markdown Kroki
kroki

kroki

Markdown Mermaid
Mermaid

Mermaid

markdownlint - линтер для markdown. Дополнительно подсказывает какие правила разметки вы нарушаете. Для отключения конкретного типа предупреждения (например для MD033), в settings.json добавьте:

    // markdownlint
    "markdownlint.config": {
        "MD033": {
            "allowed_elements": [
                "details",
                "summary"
            ]
        }
    },

15. Serial Monitor. Последовательный монитор

Serial Monitor
serial-monitor

serial-monitor

При работе с железом часто бывает что единственным способом отладки и взаимодействия с железом является интерфейс uart, на котором запускается CLI (просто printf или полноценный терминал). Из всех опробованных терминалов, Serial Monitor пока устроил больше всего: все в одном окне, есть режим терминала, есть запись логов в файл и не нужно отдельно ставить terraterm, putty, docklight и т.п. Хотя чего не хватает в этом терминале - набор пресетов для отправки как в docklight.

По умолчанию скорости Serial Monitor ограничены 250000 бит/с. Для добавления своих скоростей и установки параметров порта по умолчанию добавьте в settings.json:

// терминал
"vscode-serial-monitor.dataBits": 8,
"vscode-serial-monitor.stopBits": 1,
"vscode-serial-monitor.parity": "none",
"vscode-serial-monitor.customBaudRates": [
    921600
]

16. Todo Tree. Комментарии TODO

Todo Tree
todo-tree

todo-tree

Инструмент для расстановки комментариев типа “fixme”, “bug”, “todo” и т.п. Расширение будет мозолить глаза своими иконками и не позволит вам забыть о баге, который нужно исправить. Мощный инструмент за счет своей кастомизации, позволяющий придумать множество паттернов его использования.

Настройки в settings.json
/* Список TODO */
// Регулярное выражение для поддержки doxygen-комментариев
"todo-tree.regex.regex": "((//|//!|///|#|<!--|;|/\\*|/\\*\\*|/\\*!|/\\*!<|^|^[ \\t]*(-|\\d+\\.)|^[ \\t]*\\*|[ \\t]*\\*)\\s*\\\\?($TAGS))",
"todo-tree.regex.enableMultiLine": true,
"todo-tree.general.showActivityBarBadge": true,
"todo-tree.general.showIconsInsteadOfTagsInStatusBar": true,
"todo-tree.general.statusBar": "current file",
/* Так же можно задавать свои теги */
// "todo-tree.general.tags": [
//     "BUG",
//     "HACK",
//     "FIXME",
//     "TODO",
//     "XXX",
//     "[ ]",
//     "[x]",
//     "todo",
//     "\\todo",
//     "* \\todo",
//     " * \\todo ",
//     "fixme",
//     "\\fixme",
//     "* \\fixme",
//     " * \\fixme ",
//     "bug",
//     "\\bug",
//     "* \\bug",
//     " * \\bug "
// ],
"todo-tree.general.tags": [
    "TODO",
    "FIXME",
    "BUG"
],
"todo-tree.general.tagGroups": {
    "FIXME": [
        "FIXME",
        "FIXIT",
        "FIX",
        "fixme",
        "\\fixme",
        "* \\fixme",
        " * \\fixme ",
        "fix"
    ]
},
"todo-tree.tree.showCountsInTree": true,
"todo-tree.highlights.customHighlight": {
    "TODO": {
        "icon": "pencil",
        "type": "tag",
        "foreground": "#F3E40E",
        "iconColour": "#F3E40E",
        "gutterIcon": true
    },
    "todo": {
        "icon": "pencil",
        "type": "tag",
        "foreground": "#F3E40E",
        "iconColour": "#F3E40E",
        "gutterIcon": true
    },
    "FIXME": {
        "icon": "alert",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    },
    "fixme": {
        "icon": "alert",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    },
    "BUG": {
        "icon": "bug",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    },
    "bug": {
        "icon": "bug",
        "type": "text-and-comment",
        "foreground": "#FF2D00",
        "iconColour": "#FF2D00",
        "gutterIcon": true
    }
},

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

Заключение

Настройка среды разработки — это баланс между временем, затраченным на конфигурацию, и комфортом в процессе написания кода. Переход от проприетарных IDE к гибкой связке VS Code + MSYS2 может показаться сложным на первых этапах, но возможности кастомизации и полный контроль над инструментами окупают эти усилия. Правильно подобранные расширения превращают редактор в мощный инструмент, позволяя разработчику сосредоточиться на главном — реализации сложной логики встраиваемых систем, а не на борьбе с инструментами (что с opensource периодически бывает:).

Буду рад узнать ваше мнение: какие инструменты помогают вам в работе с встраиваемыми системами? Какие расширения используете вы? Напишите о них в комментариях.