enter image description here


Как известно мир не стоит на месте и активно развивается. Особенно в сфере IT и конкретно разработки ПО. Самое трудное в этом деле это уследить за всеми новинками и выхватить наиболее ценные и полезные из них. Вот и я только недавно наткнулся на дополнение к Visual Studio под названием Visual C++ for IoT Development, которое существует уже почти год. Потенциально — очень полезная штука, но пока это больше яркое название, чем настоящее Visual C++ для IoT. Давайте разберемся почему.


Идея использовать Visual Studio при работе с мироконтроллерами посещает меня давно и регулярно. А в последнее время эта идея превратилась в практику. Все мои проекты давно плотно интегрированы с Visual Studio. Первое время я использовал ее просто как средство взаимодействия с системами контроля версий. Потом начал частично писать в ней код, а теперь еще и использую встроенную в нее систему Unit тестов. Но компиляция и отладка всегда оставались где-то за бортом.


Увидев заголовок Visual C++ for IoT Development, я подумал, что век мучений закончился! Хватит писать код в одном месте, а компилироать и отлаживать в другом постоянно переключаясь то туда, то сюда. Появилась надежда все делать в Visual Studio.


enter image description here


Данное расширение появилось еще в марте 2016 года. И отзывы о нем не самые хорошие. Видимо поэтому почти целый год оно оставалось в тени.


Так что же такое Visual C++ for IoT Development? Оказалось что это "побочный" продукт попыток подключить GDB Debugger к Visual Studio.


Эта история началась в 2014 году. Сначала в Visual Studio появилась возможность удаленной отладки С++ кода под Android. Через пол года была анонсирована возможность удаленной отладки С++ кода уже просто под Linux системами. В ноябре 2015 появилась Preview версия. Ну а сейчас дополнение для удаленной отладки кода на Linux из-под Visual Studio уже полностью доступно и активно развивается. Последнее обновление было 22.12.2016. Об этом уже даже писали на хабре.


Причем тут IoT? А оказалось, что уже давным-давно существует проект под названием OpenOCD. Полное его название Open On-Chip Debugger Free and Open On-Chip Debugging, In-System Programming and Boundary-Scan Testing. Смысл данного проекта заключается в том, что он является "единым" отладочным интерфейсом практически для любого микроконтроллера. Аппаратная ли система отладки или программная, внешний ли JTAG/SWD адаптер или он "размазан" на отладочной плате — ему все равно. На текущий момент OpenODC имеет конфигурационные файлы практически под все существующие отладочные средства. И унифицирует он все это как раз в GDB.


Выглядит это примерно так:


enter image description here


При этом открывается сокет по адресу localhost:3333. Соответственно это и есть GDB сервер, который позволяет выполнять удаленную отладку. К нему то и подключается Visual Studio.


В общем-то, это все. Больше Visual C++ for IoT Development ничего нового делать толком и не умеет. Да, там можно настроить NMake и все-таки сделать компиляцию в консольном режиме. И еще есть настройки IntelliSense. Но это все и так было в проектах Makefile.


enter image description here


На текущий момент разработчики протестировали все совместно с ARM GCC tools. OpenOCD, pyOCD и JTAG отладчиком Segger.


Чего бы хотелось от этого дополнения? Полноценной работы с ARM GCC так же как с обычными проектами, а не настраивать NMake. Тогда можно весь проект будет вести в Visual Studio, пользуясь всеми ее удобствами.


Причем технических проблем для этого нет. Мало того, такие попытки уже делались. Даже есть коммерческие проекты — VisualGDB. Почему это не сделает сама Microsoft — остается загадкой.


Подводя итоги, можно сказать, что Visual C++ for IoT Development это здорово и пользоваться им вполне можно. Но неудобно. Есть несколько сценариев и все они предполагают "костыли" в лучшем случае в виде NMake. Надеюсь, что это расширение не будет заброшено и будет так же активно развиваться, как и Visual C++ for Linux Development. Хотя, так как последнее обновление было 31.03.2016, надежды могут быть и напрасны.

Поделиться с друзьями
-->

Комментарии (5)


  1. atd
    23.01.2017 11:11
    +1

    VisualGDB использую уже давно и достаточно активно (с китайским клоном jlink).

    Даже денег им заплатил, но не потому что богатый, а по своему опыту оценил их труд. Экстеншен для привязки GDB (или другого отладчика) кажется что написать нетрудно, но вся суть в мелочах, чтобы оно адекватно работало.

    Насчёт C++ for IoT: под IoT, как я понял, микрософт понимает что-то типа распберри на линуксе, а в сторону микроконтроллеров даже не смотрит (


    1. AlexandrSurkov
      23.01.2017 11:54

      Отладка Linux работает адекватно. Про IoT пока не могу особо ничего сказать.

      Насчет микроконтроллеров и Microsoft — согласен. Надеюсь все это сдвинется в лучшую сторону. Я регулярно поднимаю эту тему в общении с людьми из MS.


    1. monah_tuk
      23.01.2017 13:05

      Пока под Baremetal наиболее адекватная поддержка только, пожалуй, в Qt Creator: http://doc.qt.io/qtcreator/creator-developing-baremetal.html, пример использование в моей статье. Пожалуй, единственное ограничение, это то, что кросс-GDB для целевой платформы должен быть собран с поддержкой Python, что игнорируют многие строители тулчейнов. Но для популярных платформ дело только в пересборке или поискать уже готовый, а специфичные… трясти на предмет патчей, ибо GPL.


      PS На "Qt" не обращаем внимание :)


  1. ElectroGuard
    23.01.2017 15:59

    Лазарус работает с GDB, бесплатный, можно запустить прямо на Распбери, прямо на месте и отлаживать:

    https://www.getlazarus.org/setup/?download#raspberry_pi


  1. kekekeks
    24.01.2017 00:10

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

    Вообще говоря на проекте с ChibiOS даже нормально ReSharper for C++ завёл. Там нужно немного магии с msbuild-проектом, чтобы студия видела пути для инклудов как положено.