Несколько месяцев изучаю и использую Rust. Я все еще учусь, но меня очень впечатлил мощный и крутой язык программирования, яркая экосистема, продвинутые концепции и инструменты. Изучая Rust, я использовал среду разработки Visual Studio Code IDE, и она отлично работает с Rust. Но мне было интересно: могу ли я использовать его для моей «обычной» разработки на C / C ++ и на устройствах ARM Cortex-M? Ответ однозначный: «да», и эта мини-серия статей также должна помочь вам начать работу.
По сути, Visual Studio Code - это очень удобная, быстрая и современная IDE со множеством классных плагинов и помощников. Кажется, он не так часто используется для встраиваемой разработки, но со временем это определенно может измениться. Начать работу с Visual Studio Code и встроенной целью может быть сложно, потому что для нее может не быть специальной поддержки со стороны поставщиков микросхем. Но немного поучившись, и я надеюсь, что с помощью этой серии статей вы сможете приступить к работе.
В этой серии руководств я использую NXP K22FN512 ( плата FRDM-K22 ), но вы сможете использовать любое другое устройство NXP Kinetis или LPC, если оно поддерживается NXP MCUXpresso SDK. Я расскажу об установке, первом простом проекте, его отладке на целевом компьютере и, наконец, расширении его до полного проекта SDK, а также изучу некоторые расширенные функции.
Итак, вот что: если вы не знаете Visual Studio Code, я приглашаю вас в путешествие в новый мир ...
Настройка
Для этой статьи я использовал версию 1.55.2 Visual Studio Code. Установщик доступен по адресу https://code.visualstudio.com/ и поддерживает Windows, Mac и Linux:
После установки запустите IDE:
В любое время я могу обновить среду IDE, если есть доступные обновления (я тоже буду получать уведомления):
IDE включает в себя представление терминала или консоли, откройте новый:
Область терминала и консоли по умолчанию находится в нижней части, но ее можно переместить куда угодно:
Установка расширений
По сравнению с другими полностью интегрированными IDE, я должен установить другие пакеты в дополнение к IDE: расширения IDE, инструменты сборки (компилятор, компоновщик, библиотеки), Cmake и поддержку отладчика.
Чтобы установить плагины IDE, это можно сделать с помощью командной строки оболочки хоста или непосредственно в Терминале внутри IDE. Чтобы установить расширения (также известные как плагины в Eclipse), я использую следующий формат команды:
code --install-extension <code>
Или через меню View > Extensions.
Для встраиваемой разработки для ARM Cortex-M я рекомендую следующие расширения:
По устаревшим причинам я все еще использую Make, потому что на нем я вырос. Но Ninja - это тот, который я использую все чаще и чаще, потому что он такой быстрый :-).
Чтобы подключить GDB (отладчик) к целевой плате, мне нужен программатор. Я использую для этого SEGGER J-Link. MCUXpresso IDE уже поставляется с установкой J-Link, поэтому очень вероятно, что она уже существует на вашем компьютере. Если нет, вы можете загрузить программное обеспечение J-Link с https://www.segger.com/downloads/jlink#J-LinkSoftwareAndDocumentationPack.
Установите его с настройками по умолчанию. У меня установлен V7.20 с настройками по умолчанию:
Также можно использовать OpenOCD или PEMicro. Сначала я сосредоточусь на интерфейсе J-Link.
Теперь у нас должно быть установлено все необходимое программное обеспечение.
Часть 2 - Проект
Это вторая часть серии статей о том, как использовать код Microsoft Visual Studio для встраиваемой разработки на ARM Cortex-M. В этой части я собираюсь показать, как создать и собрать проект, используя CMake, запускающий Make или Ninja в качестве системы сборки.
В части 1 мы установили необходимые инструменты, поэтому убедитесь, что вы выполнили эту часть. Часть 2 посвящена созданию очень простого проекта C. Цель состоит в том, чтобы создать что-то простое и легкое, что вы можете использовать в своих собственных проектах. Речь идет об использовании наиболее важных инструментов для выполнения работы без необходимости использования других «фреймворков», если они вам действительно не нужны. Речь идет о создании основного файла, добавлении кода запуска и сборке его как проекта.
Я не собираюсь использовать «причудливых» мастеров или фреймворков, я просто использую базовые инструменты по одной причине: для простоты.
Помимо компилятора / компоновщика / отладчика вам понадобятся несколько минимальных файлов для сборки проекта:
Основной : файл с основной точкой входа в приложение (main ()).
Код запуска : он выполняется после сброса, инициализирует систему, память, библиотеку и переходит к main ().
Система : в среде CMSIS код запуска вызывает обратный вызов инициализации системы (SystemInit () для установки часов, настройки сторожевого таймера,…). Кроме того, он предоставляет файлы заголовков для регистров устройств с отображением памяти и периферийных устройств, таких как I2C, SPI,…
Файл компоновщика : определяет отображение памяти и способ связывания приложения.
Первый пункт - это то, что вы легко можете написать самостоятельно. Остальные элементы вы можете получить из примеров (например, из моего GitHub ) или из SDK / примеров, предоставленных поставщиком вашего кремниевого устройства, например, NXP.
NXP предоставляет все необходимые файлы в MCUXpresso SDK . Убедитесь, что у вас есть SDK для GNU gcc:
Преимущество использования такого SDK заключается в том, что у вас есть свобода выбора и полный контроль, без «привязки» к пользовательским фреймворкам и зависимостям с самого начала.
Цвета? Цвета!
Пока не забыл: начать с чего-то очень простого: вот где вы можете изменить цветовую тему в Visual Studio Code на все, что вам нравится:
Рабочее пространство и проект (ы)
Подобно другим IDE, VSC использует концепцию «рабочего пространства». Проще говоря, рабочая область - это набор папок, открытых в среде IDE. См. Https://code.visualstudio.com/docs/editor/workspaces для получения более подробной информации. В самом простом случае рабочее пространство просто содержит папку, которая является папкой для проекта. Итак, все, что нам нужно, это добавить папку.
Перейдите к существующей новой (пустой) папке или просто создайте ее в диалоговом окне:
Ниже я создал новую папку FRDM-K22F_Simple, а затем добавил ее:
Эта папка теперь отображается в рабочей области:
Файл main.c
Добавьте новый файл: main.c
Реализуйте основную функцию, затем сохраните ее (CTRL + S):
Папки
Рекомендую разложить файлы по папкам.
Это действительно зависит от вас, как вы будете организовывать файлы. Моя предпочтительная "стандартная" организация использует следующие папки:
CMSIS : содержит файлы заголовков ARM CMSIS.
устройство : файлы заголовков для конкретного устройства, инициализация системы, код запуска и файл компоновщика
src : исходные файлы приложения, включая основной файл
build : Scratch, содержит все сгенерированные файлы сборки, объектные файлы и исполняемый файл. Все, что находится в этой папке, может быть удалено / удалено / очищено, поскольку оно создано из исходных кодов.
Опять же, выбор за вами. В остальной части статьи я буду использовать эту структуру.
Файлы запуска, системы и компоновщика
Из SDK скопируйте в папку проекта файлы системы, автозагрузки и компоновщика.
Следующие шаги касаются компиляции и компоновки.
Toolchain CMake File
I’m going to use CMake with Make to build the project. CMake needs some information where to find the tools. A simple and easy way is to to add a the following file to the project. I have named it arm-none-eabi-gcc.cmake and placed it in the project root folder. Below is a template as well on GitHub.
ARM_TOOLCHAIN_DIR specifies the compiler to be used (I have multiple versions of the toolchain installed on my system, update it to match your version).
Additionally it defines extra tools as size and objcopy.
Чтобы указать CMake, что делать, создайте файл с именем CMakeList.txt в корне проекта. Ниже приведен шаблон для него также на GitHub .
cmake_minimum_required(VERSION 3.15.3)
# Optional: print out extra messages to see what is going on. Comment it to have less verbose messages
set(CMAKE_VERBOSE_MAKEFILE ON)
# Path to toolchain file. This one has to be before 'project()' below
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/arm-none-eabi-gcc.cmake)
# Setup project, output and linker file
project(FRDM-K22F_Simple)
set(EXECUTABLE ${PROJECT_NAME}.elf)
set(LINKER_FILE ${CMAKE_SOURCE_DIR}/device/MK22FN512xxx12_flash.ld)
enable_language(C ASM)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
# Optional: issue a message to be sure it uses the correct toolchain file.
message(STATUS "CMAKE_TOOLCHAIN_FILE is: ${CMAKE_TOOLCHAIN_FILE}")
# List of source files
set(SRC_FILES
src/main.c
device/startup_MK22F51212.S
device/system_MK22F51212.c
)
# Build the executable based on the source files
add_executable(${EXECUTABLE} ${SRC_FILES})
# List of compiler defines, prefix with -D compiler option
target_compile_definitions(${EXECUTABLE} PRIVATE
-DCPU_MK22FN512VLH12
-DCPU_MK22FN512VLH12_cm4
)
# List of includ directories
target_include_directories(${EXECUTABLE} PRIVATE
src
device
CMSIS
)
# Compiler options
target_compile_options(${EXECUTABLE} PRIVATE
-mcpu=cortex-m4
-mthumb
-mfpu=fpv4-sp-d16
-mfloat-abi=hard
-fdata-sections
-ffunction-sections
-Wall
-O0
-g3
)
# Linker options
target_link_options(${EXECUTABLE} PRIVATE
-T${LINKER_FILE}
-mcpu=cortex-m4
-mthumb
-mfpu=fpv4-sp-d16
-mfloat-abi=hard
-specs=nano.specs
-lc
-lm
-lnosys
-Wl,-Map=${PROJECT_NAME}.map,--cref
-Wl,--gc-sections
-Xlinker -print-memory-usage -Xlinker
)
# Optional: Print executable size as part of the post build process
add_custom_command(TARGET ${EXECUTABLE}
POST_BUILD
COMMAND ${CMAKE_SIZE_UTIL} ${EXECUTABLE})
# Optional: Create hex, bin and S-Record files after the build
add_custom_command(TARGET ${EXECUTABLE}
POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O srec --srec-len=64 ${EXECUTABLE} ${PROJECT_NAME}.s19
COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex
COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin)
Наиболее важные разделы / записи:
project (<здесь название вашего проекта>): дайте вашему проекту имя
set ( LINKER_FILE <ваш файл компоновщика здесь>): укажите имя файла компоновщика
set ( SRC_FILES <ваши исходные файлы здесь>): список исходных файлов для компиляции
target_compile_definitions ($ {EXECUTABLE} PRIVATE <компилятор определяет здесь>): список компиляторов #define
target_include_directories ($ {EXECUTABLE} PRIVATE <список включаемых каталогов>): список включаемых каталогов
target_compile_options ($ {EXECUTABLE} PRIVATE <параметры компилятора>): список параметров компилятора
target_link_options ($ {EXECUTABLE} PRIVATE <параметры компоновщика>): список параметров компоновщика
На этом настройка конфигурации для сборки завершена.
Настройка
Далее мы собираемся его построить. На самом деле нам нужно сначала его «настроить». С CMake это двухэтапный процесс: запуск CMake для создания (или настройки) файлов make или ninja, а затем я использую make или ninja для его создания.
Откройте терминал в выходной папке сборки:
При использовании make : вызовите CMake для создания файлов make:
Простой способ переключаться между двумя системами сборки или начать с нуля - это удалить содержимое папки build. И да: ниндзя намного быстрее 🙂
Строительство
Вместо вызова make или ninja внутри папки сборки можно использовать следующее, что делает то или другое:
cmake --build.
Преимущество этого способа заключается в том, что если в CMakeList.txt произошли изменения, он также сначала выполнит шаг настройки. Но он не улавливает изменения в файле определения инструментальной цепочки, но в любом случае его не следует часто менять.
Если вы вносите изменения в структуру: убедитесь, что вы выполнили настройку, чтобы убедиться, что все настроено правильно.
Уборка
«Чистая-чистая» - это удалить все файлы в папке сборки. Но в CMake есть и «чистая» команда:
cmake --build. - цель очистить
Чтобы выполнить «очистку с последующей сборкой», используйте следующее:
cmake --build. - сначала очистить
Резюме
Таким образом, мы создали проект с кодом Visual Studio с использованием CMake для создания проекта для ARM Cortex с использованием инструментов GNU. Правда (может быть, шокирующая?) В том, что Visual Studio Code - это просто редактор, и ничего больше. Таким образом, вы можете сделать то же самое с любым редактором или IDE, которые вам нравятся: imho, это одна из вещей, которые мне нравятся в VSC: это помощник и помощник, и он не заставляет меня, как что-то делать. Точно так же у вас есть свобода делать то, что вам нравится.
Пока мы установили необходимые инструменты, создали проект и можем собрать его из командной строки. Теперь речь идет о том, как напрямую выполнять скрипты или сборку из IDE.
В предыдущем уроке я использовал командную строку для создания проекта. Это замечательно и очень гибко, но было бы лучше, если бы я мог легко запускать сценарии или команды из IDE. Код Visual Studio - это в первую очередь редактор, но в нем есть инфраструктура, позволяющая выполнять сценарии или запускать программы, не вводя их в командной строке.
Существуют различные способы создания и настройки задач кода Visual Studio, см. Код Visual Studio: документация по задачам . Легкий и простой способ - создать папку с именем .vscode и добавить в нее файл tasks.json :
Внутри корневой папки проекта создайте новую папку с именем .vscode.
Внутри этой папки создайте новый файл с именем tasks.json и добавьте следующий контент (доступен на GitHub ):
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "Build Project",
"command": "cmake --build .",
"options": {
"cwd": "${workspaceFolder}/build"
},
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": {
"base": "$gcc",
"fileLocation": ["relative", "${workspaceFolder}/build"]
}
}
]
}
Это создает «задачу» для создания проекта с помощью команды «оболочки» (консоли). «CMake -Build.» команда, которую мы видели в предыдущем уроке .
Для текущего каталога он использует «$ {workspaceFolder} / build », потому что это должен быть текущий рабочий каталог для cmake.
В следующей группе он помечается как команда сборки по умолчанию, которая назначает ее сочетанию клавиш <CTRL> + <SHIFT> + <B>:
"group": {
"kind": "build",
"isDefault": true
},
«ProblemMatcher» назначает сопоставление для gcc для сканирования вывода консоли на предмет сообщений от gcc, поэтому я могу видеть вещи в представлении «Проблемы».
Это всего лишь минимальная задача и далеко не идеальная, но она заставляет нас работать.
Сборка
Теперь я могу просто нажать <CTRL> + <SHIFT> + <B>, чтобы построить проект, с выводом в Терминале внизу:
Один из способов запуска задач - из меню терминала :
В противном случае задачи можно запускать из палитры команд (<CTRL> + <SHIFT> + <P>):
А затем отфильтруйте и выберите задачу для запуска:
Дополнительные задачи
Таким же образом можно добавлять и выполнять другие задачи. Ниже добавлена задача, добавленная для выполнения команды cmake «очистить с помощью сборки»: добавить следующее в список задач (через запятую):
Задача «сборка по умолчанию» может быть только одна, поэтому она просто добавляется в группу «сборка».
Выбор задач для запуска
Выполнить задачу сборки по умолчанию легко с помощью <CTRL> + <SHIFT> + <B>.
Мне потребовалось время, чтобы понять, как выполнить произвольные задачи, которые я определил. Лучший способ, который я нашел, - это:
Сначала нажмите <CTRL> + <P> . В следующем диалоговом окне введите « задача » (обратите внимание на пробел в конце):
Здесь перечислены задачи, и я могу выбрать ту, которую хочу запустить.
Другой способ - снова использовать меню терминала :
Если вы знаете лучший способ без установки расширений, я хочу услышать об этом.
Резюме
С этим я назначил задачу сборки по умолчанию и могу использовать ярлык для ее выполнения. Кроме того, я могу определять собственные задачи или интегрировать скрипты в IDE.
В этой статье я покажу, как отлаживать микроконтроллер ARM Cortex (M4F, NXP K22FN512) с помощью кода Microsoft Visual Studio. Для этого мне понадобятся инструменты и расширения, установленные в части 1 этой серии руководств. Отладка осуществляется с помощью отладочного зонда (J-Link), либо внешнего (автономный отладочный зонд), либо встроенного (доступно на многих платах разработки, например, от NXP или STM). Я использую SWD здесь, потому что FRDM-K22F имеет SWD только в отладочном заголовке, но также можно использовать JTAG.
Отладочный зонд
В этой статье я использую отладочный зонд SEGGER J-Link EDU Mini . Технически можно использовать и другие датчики. J-Link широко доступен, а EDU стоит всего 20 или 20 евро, он очень маленький и универсально работает для многих-многих устройств из коробки.
Кроме того, многие платы производителей микросхем ( LPC4322 или FRDM OpenSDA ) и датчики отладки могут загружать микропрограммное обеспечение J-Link, включая NXP LPC-Link2 или STLink . J-Link можно использовать с GDB, LLDB, OpenOCD или CMSI -DAP .
« Исполняемый файл »: двоичный файл для загрузки и отладки.
« Serverpath »: путь и имя файла исполняемого файла J-Link GDB Server. См. Часть 1 .
« ArmToolchainPath »: путь к исполняемому файлу arm-none-eabi-gdb. См. Часть 1 .
« Устройство »: идентификатор устройства, используемый для J-Link, см. Веб-сайт SEGGER J-Link .
« RunToMain »: если отладчик должен установить временную точку останова на main () и работать до этого момента.
« SvdFile »: необязательно, это файл CMSIS-SVD для детальной отладки регистров.
Файлы SVD
Запись «svdFile» в файле launch.json является необязательной, но имеет решающее значение для отладки встроенной системы, поскольку она описывает регистры периферийных устройств устройства. Они используются, например, в представлении Eclipse EmbSysRegView, и это хороший источник для получения файлов. При использовании устройств NXP файлы SVD присутствуют в NXP MCUXpresso SDK , но их труднее найти, поскольку NXP не использует стандартное расширение * .svd .
Это запускает сеанс отладки. В случае проблем проверьте консоль отладки:
Проверьте вкладку ВЫХОД (Вывод адаптера) для вывода из C: / Program Files (x86) /SEGGER/JLink/JLinkGDBServerCL.exe
Запускающий сервер: "C: / Program Files (x86) /SEGGER/JLink/JLinkGDBServerCL.exe" "-if" "swd" "-port" "50000" "-swoport" "50001" "-telnetport" "50002" " -устройство «MK22FN512xxx12»
Запуск GDB: "C: \ Program Files (x86) \ GNU Arm Embedded Toolchain \ 10 2020-q4-major \ bin \ arm-none-eabi-gdb.exe" "-q" "--interpreter = mi2"
undefined C: \ Program Files (x86) \ GNU Arm Embedded Toolchain \ 10 2020-q4-major \ bin \ arm-none-eabi-gdb.exe: предупреждение: не удалось определить путь к каталогу индексного кеша.
Чтение символов из C: \ Users \ erich \ Data \ GitRepos \ McuOnEclipse \ Examples \ VisualStudioCode \ FRDM-K22F \ FRDM-K22F_Simple \ build \ FRDM-K22F_Simple.elf ...
0x000006b0 в _exit ()
Не реализована причина остановки (при условии исключения): undefined
Сброс цели
Сброс цели
Временная точка останова 1, main () в ../src/main.c:7
7 int local = 0;
У меня есть предупреждение и «причина невыполненной остановки» (не знаю почему), но оно работает, и я отлаживаю 🙂
Используйте "View Disassembly (Function") с именем функции для отладки этой функции в коде сборки. Используйте "Set Force Disassembly", чтобы переключиться на шаг дизассемблирования для всех функций.
Можно установить точки останова в коде сборки, но нельзя увидеть высокоуровневый (C / C ++) рядом с кодом сборки. И представление дизассемблирования не показывает больше информации или символических символов, как это делает вид дизассемблирования Eclipse CDT.
Вернитесь к «авто», только чтобы показать дизассемблированный код без отладочной / исходной информации:
Представление памяти очень простое по сравнению с представлениями памяти Eclipse (многими), но для проверки памяти это лучше, чем ничего.
Резюме
Надеюсь, это поможет вам начать работу (ну, отладку) с кодом Microsoft Visual Studio на ARM Cortex-M. Встроенные возможности отладки (память, регистры, сборка) намного более просты по сравнению с представлениями в Eclipse или MCUXpresso IDE, так что точно не до этого уровня (пока?). Но, по крайней мере, с этим я могу выполнять базовую аппаратную отладку на ARM Cortex.
Предыдущие части были посвящены установке , настройке проекта , сборке и отладке . Это об определении «набора инструментов», чтобы я мог использовать больше инфраструктуры CMake в Visual Studio Code:
Для нашего проекта еще нужно настроить несколько вещей. Мы можем создавать и отлаживать, но сборка выполняется с помощью « Задач », а не напрямую через CMake. Это потому, что я еще не настроил «комплект». Я вижу это по статусному сообщению внизу:
Сканирование комплектов или использование « неопределенного » просто привело к использованию неправильных комплектов / компилятора, что нарушило сборку ARM Cortex-M, которую я использую :-(.
Очевидно, что CMake с интеграцией Visual Studio чего-то не хватает. Благодаря исследованию и комментариям Мартина в предыдущей части 3 проблема была решена : мне нужно добавить дополнительный файл cmake-kits.json .
Добавление набора с помощью cmake-kits.json
Создайте новый файл в папке .vscode и назовите его cmake-kits.json со следующим содержимым (или скопируйте его с GitHub ):
[
{
"name": "GCC Arm Embedded",
"toolchainFile": "${workspaceRoot}/arm-none-eabi-gcc.cmake"
}
]
Вы можете дать ему любое имя, но оно должно указывать на правильный файл инструментальной цепочки для Cmake. Благодаря этому у меня распознан «комплект», и я могу назначить его проекту, используя значок на нижней панели инструментов:
Чтобы использовать команды CMake, Visual Studio Code необходимо знать о цепочке инструментов, используя файл cmake-kits.json, находящийся в папке .vscode. Обязательно добавьте его в проект, чтобы разблокировать больше возможностей Visual Studio Code.
Предыдущие части были посвящены установке , настройке проекта , сборке , отладке и настройке комплекта . Речь идет о настройке IntelliSense для кросс-разработки в Visual Studio Code, которая позволяет просматривать символы или автозавершение кода:
Мощный IntelliSense в Visual Studio Code, вероятно, является * особенностью * Visual Studio Code. Eclipse IDE имеет аналогичную функцию с « Индексатором », но имхо тот, что в Visual Studio Code, не только проще в настройке, но и более мощный.
Как и все остальное, индексатор в Visual Studio Code использует файл конфигурации JSON. С расширением Microsoft C / C ++ существует графическая утилита настройки (UI). Используйте <CTRL> + <P>:
Настройки хранятся в файле .vscode / c_cpp_properties.json внутри проекта. Поэтому вместо использования мастера, описанного выше, просто создайте файл и скопируйте и вставьте шаблон ниже:
includePath : перечислите здесь все места, где IntelliSense будет искать файлы заголовков. Он автоматически будет использовать те, которые находятся в инсталляции инструментальной цепочки (компилятора). Обозначение '**' означает, что он будет искать эту папку рекурсивно.
define : перечислить все дополнительные определения, которые необходимо учитывать.
compilerPath : путь к исполняемому файлу компилятора.
cStandard и cppStandard : используемые стандарты C и C ++
intelliSenseMode : используемый режим. 'gcc-arm' считается устаревшим, но не знаете, что использовать в противном случае для ARM?
Применение
Благодаря этому IntelliSense может находить правильные файлы заголовков и определения с помощью используемой инструментальной цепочки. Вы можете проверить это с помощью контекстного меню в стандартной библиотеке, включая (Контекстное меню> Просмотр> Определение ):
Вы можете нажать <CTRL>, а затем использовать мышь для перехода к месту: нажмите <CTRL>, наведите на него указатель мыши и щелкните.
Еще одна приятная вещь - предварительный просмотр «скрытно»: удерживайте нажатой кнопку <CTRL> и перемещайте мышь, чтобы увидеть предварительный просмотр этой реализации:
Visual Studio Code поставляется с мощным механизмом IntelliSense, который легко настраивается с помощью файла JSON. IntelliSense и автозавершение кода делают кодирование намного проще: это * причина * использования IDE, такой как Visual Studio Code.
FreeRTOS, вероятно, является наиболее часто используемой и распространенной ОСРВ для мира встроенных микроконтроллеров. Его очень легко изучить, он эффективен и, поскольку он широко используется, для него есть инструменты, поддерживающие его.
В этой статье я покажу, как вы можете использовать FreeRTOS и отлаживать его с помощью кода Visual Studio, включая поддержку потоков. Я предполагаю, что вы прочитали мои предыдущие учебные статьи (см. Ссылки в конце этой статьи).
В коде Visual Studio есть базовая поддержка FreeRTOS, включая поддержку потоков. Конечно, это не на должном уровне с поддержкой отладки FreeRTOS, которую вы получаете в бесплатных IDE на основе Eclipse, таких как NXP MCUXpresso IDE, но этого достаточно для отладки приложений FreeRTOS на любом ARM Cortex.