Не так давно я рассказал о выходе в свет новой версии .Net Micro Framework. Технология интересная и перспективная, но при этом очень специфическая. Правда, как и многим open source-проектам, ей не хватает документации. Из-за этого требуется много времени для того, чтобы запустить простой пример, не говоря уже о решении каких-то реальных задач.

В данной статье я хочу исправить этот недостаток и рассказать о том, как быстро и просто установить все необходимое для работы с эмулятором .Net Micro Framework на Windows.




В данной статье речь пойдет о .Net Micro Framework версии 4.4. Начиная с этой версии, проект переехал на GitHub. Состоит он из двух веток:

  • llilum — новой платформы, которая использует компиляцию C# непосредственно в ассемблерный код микроконтроллера,
  • netmf-interpreter — .Net Micro Framework interpreter, “классической” ветки, использующей “порты” среды исполнения под конкретные аппаратные платформы.


Рассказывать я буду о netmf-interpreter, так как на текущий момент эта ветка лучше всего подходит для практического использования.

Более подробно о том, что такое .Net Micro Framework можно узнать из статьи “Знакомство с .Net Micro Framework” на хабре и докладов “Архитектура .Net Micro Framework” и “Краткий обзор .Net Micro Framework” на techdays.

Для начала нужно отметить, что netmf-interpreter 4.4 работает только с Visual Studio 2015 в редакциях Community, Pro и Ultimate.

Итак, начать работать netmf-interpreter 4.4 можно тремя разными способами:
  • Собрать установочные файлы из репозитория,
  • Скачать установочные файлы со страницы с релизами на GitHub,
  • Скачать установочные файлы через Extensions and Udpates Visual Studio 2015.


Сборка из репозитория



Этот способ наиболее трудоемкий. Зато он позволяет использовать самый свежий код из репозитория. Кроме того, умение работать с ним пригодится в дальнейшем, если нужно будет внести изменения в эмулятор или собирать собственные “порты” под другие аппаратные платформы.

Репозиторий находится тут. Можно скачать его как zip-архив, а можно получить используя git. Инструкции на английском языке о том, как получить репозиторий и собрать из него установочные файлы, можно посмотреть тут. На основе этих инструкций и написана статья. Версии репозитория, связанные с конкретными релизами, можно скачать в zip-архивах тут.

Чтобы получить репозиторий с помощью git, нужно сделать следующее:
  1. Создать публичную копию на вашем аккаунте на серверах GitHub сделав fork. Все pull-запросы должны идти с публичного GitHub репозитория.
  2. Получить локальную копию репозитория, используя clone. Например, вот так:
    git clone https://github.com/<your GitHub ID>/netmf-interpreter.git
    Важно: При выборе пути для локального репозитория нужно обязательно сделать хотя бы одну родительскую папку. Например, D:\NETMF\repo, где repo — папка для репозитория. Это требуется для его правильной сборки.
  3. Настроить локальный репозиторий, как Upstream. Это позволит получать с помощью pull изменения с последних официальных коммитов и разбирать все несоответствия при получении кода локально до выполнения запроса pull. Для настройки Upstream можно использовать следующую команду:
    git remote add upstream https://github.com/NETMF/netmf-interpreter.git


Важно: Требования к локальному пути (должна быть хотя бы одна родительская папка — см. п 2 работы с git) актуальны и при распаковке репозитория из архива.

К сожалению, релиз .NET Micro Framework v4.4 Release To Web (RTW) содержит ошибки, которые не позволяют сразу собрать установочные файлы из репозитория. Однако, эти ошибки можно исправить, и далее я расскажу, как это сделать.
После того, как репозиторий тем или иным способом оказался скопирован в локальную папку, нужно сделать следующее:

  1. Скачать binary tools zip файл. Этот файл содержит утилиты, необходимые для сборки как установочных файлов, так и “портов” для устройств. В будущем планируется отказаться от этих утилит, но пока еще они нужны.
  2. Разархивировать содержимое binary tools zip-файла в родительскую папку репозитория. Например для пути D:\NETMF\repo, где repo — папка для репозитория, папки bin и tools должны оказаться в папке D:\NETMF.
  3. Важно: В файле
    <repo folder>\Framework\Tools\BuildTasksInternal\BuildSigner\BuildSignerSpotBuild.csproj
    в строке 37 нужно заменить
    <HintPath>$(MSBuildProgramFiles32)\Microsoft Internal\Codesign.Submitter\CODESIGN.Submitter.dll</HintPath>
    на
    <HintPath>$(SPOROOT)\tools\x86\CODESIGN\CODESIGN.Submitter.dll</HintPath>

    Это исправление первой ошибки. Без такой замены собрать репозиторий не удастся. Как было сказано выше, .Net Micro Framework это open source проект и, к сожалению, он сталкивается с теми же проблемами, что и другие открытые проекты. Это исправление необходимо только для релиза .NET Micro Framework v4.4 Release To Web (RTW). В дальнейшем репозиторий уже будет содержать поправленные файлы. Про эту проблему можно почитать тут.
  4. Нужно скачать библиотеку CMSIS и положить ее в папку <repo folder>\СMSIS. Где ее брать и какая именно версия нужна, написано в файле <repo folder>\СMSIS\ReadMe.md.

    CMSIS расшифровывается как Cortex Microcontroller Software Interface Standart. Это не зависящая от конкретного производителя библиотека для работы с ядром Cortex-M, поставляемая и поддерживаемая разработчиками ядра — компанией ARM. Использование этой библиотеки позволяет существенно упростить создание “портов” на разные микроконтроллеры разных производителей.

    В случае с версией .Net Micro Framework 4.4 нужно скачать CMSIS не ниже версии 4.3. Библиотека поставляется в виде zip-архива (CMSIS-SP-00300-r4p3-00rel0.zip). Ее можно скачать на сайте ARM. Содержимое архива нужно положить в папку <repo folder>\СMSIS.
  5. Далее нужно установить .Net Micro Framework Cryptographic Libraries. Эти библиотеки используются для подписи сборок, которые будут исполняться на микроконтроллерах. Для работы нужны только исполняемые файлы криптографической библиотеки. Но, при желании, можно узнать как она устроена, так как можно посмотреть и исходные коды.

    Библиотеки доступны в виде установочного msi файла. Я рекомендую установить их в любую удобную папку (далее будем называть ее <crypto install folder> ), а затем копировать их в корень каждого репозитория, например D:\NETMF\repo и D:\NETMF\repo_master.

    Отдельная папка с криптографическими библиотеками потребуется для исправления второй ошибки сборки.


Наконец репозиторий и все необходимые библиотеки скачаны. Можно собрать файлы для установки. Сборка происходит с помощью платформы MSBuild. Несмотря на то, что в репозитории фигурируют знакомые многим sln и proj файлы, использовать Visual Studio напрямую не получится. MSBuild используется и в Vusial Studio, но сам по себе позволяет создавать более гибкие проекты.

Итак, нужно открыть командную строку и перейти в папку с репозиторием, например так:
cd /d D:\WORKDIR\NetMf\NetMFRepo\repo
Затем нужно выполнить файл build_sdk.cmd. Это запустит сборку репозитория:



Через несколько минут сборка будет окончена и, кроме множества библиотек, появятся файл
<repo folder>\BuildOutput\public\Release\Server\dll\NetmfVS14.vsix

Однако второй установочный файл не будет собран из-за второй ошибки. Последним шагом будет ее исправление. Нужно скопировать файл
<crypto install folder>\crypto\lib\x86\dll\crypto.dll
в папку
<repo folder>\BuildOutput\public\Release\Server\dll

Эта библиотека должна копироваться автоматически при построении репозитория, но этого не делается.

Если запустить сборку репозитория еще раз, то появятся оба файла:

<repo folder>\BuildOutput\public\Release\Server\dll\NetmfVS14.vsix
<repo folder>\BuildOutput\public\Release\Server\msm\MicroFrameworkSDK.MSI

Они-то и нужны для дальнейшей работы.

NetmfVS14.vsix — это плагин к Visual Studio.
MicroFrameworkSDK.MSI — это эмулятор и все необходимые библиотеки. Плагин настроится сам, нужно только запустить установку. Библиотеки нужно установить в Typical-варианте:



Установка из Visual Studio



Файлы MicroFrameworkSDK.MSI и NetmfVS14.vsix можно получить, воспользовавшись пунктом меню Tools->Extensions and Updates в Visual Studio:



В открывшемся диалоге нужно выбрать вкладку Online слева и ввести ключевое слово netmf в поиске (выделено красной рамкой):



Зелеными рамками выделено то, что нужно скачать и установить.

.NET Micro Framework project system — это плагин для Visual Studio. Он соответствует файлу NetmfVS14.vsix и устанавливается через окно Extensions and Updates.
.NET Micro Framework SDK — эмулятор, и все необходимые для работы библиотеки в виде установочного файла. Это MicroFrameworkSDK.MSI. Его необходимо скачать и инсталлировать, выбрав Typical установку:



Скачивание с GitHub



Файлы MicroFrameworkSDK.MSI и NetmfVS14.vsix можно скачать со страницы с релизами:



NetmfVS14.vsix — это плагин к Visual Studio.
MicroFrameworkSDK.MSI — это эмулятор и все необходимые библиотеки. Плагин настроится сам, нужно только запустить установку. Библиотеки нужно установить в Typical-варианте:



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



Выполнив установку одним из 3-х выше перечисленных путей, мы можем приступить к созданию первого проекта на .Net Micro Framework.

Плагин для Visual Studio уже содержит несколько примеров. Нужно только выбрать, какой больше нравится.

Правда, есть один нюанс. Эмулятор устанавливается на системный, диск и его обязательно нужно запускать в режиме администратора, иначе он не сможет правильно работать. Так как эмулятор запускается из-под Visual Studio, то её и нужно запускать от имени администратора.

Итак, запускаем Visual Studio с правами администратора и создаем новый проект:



Если установка была выполнена верно, то появится новый template проекта Micro Framework:



Выберем Windows Application, как наиболее наглядный проект.

Создав solution, можно зайти в свойства проекта:



В настройках проекта появилась новая вкладка .NET Micro Framework:



Для работы с эмулятором можно оставить все значения по умолчанию.

После запуска и компиляции проекта появится окно эмулятора:



У эмулятора есть экран, 5 кнопок, две виртуальные SD-карточки и COM-порт. Все это вполне работоспособно. Например, нажатие кнопок выводит их код в окно Output Visual Studio:



На мой взгляд, этого вполне достаточно, чтобы начать знакомство с .Net Micro Framework на практике.

Заключение



.Net Micro Framework — перспективный open source-проект, позволяющий писать код на C# под микроконтроллеры. С развитием идей IoT и появлением концепции UWP его развитие получило новый импульс. Со временем он должен закрыть нишу совсем маленьких устройств, на которых нельзя запустить Windows 10 IoT, и при этом полностью поддерживать концепцию UWP.

Однако, как и множество open source проектов, у .Net Micro Framework есть проблемы с документацией. Поэтому разобраться с тем, как его использовать, не всегда легко. Я постарался исправить эту ситуацию и показать, что начать работать с ним можно, потратив всего 5 минут.

Тем, кому интересно поработать не с эмулятором, а с реальным устройством на базе .Net Micro Framework, предлагаю набраться терпения и дождаться следующей статьи.

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


  1. coolspot
    20.11.2015 00:18

    Что только не придумают люди, лишь бы C/C++ не учить ;-)


  1. HomoLuden
    20.11.2015 13:38

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

    Сколько памяти должен иметь МК для запуска самого минималистичного проекта?
    Какого размера будет куча, скажем, на STM32F103C8T6, если влезет?

    Я какое-то время назад натыкался в сети (MSDN?) на страницу с маппингом памяти в случае разворачивания (какой-то версии) NetMF в STM32F4 Discoveryю И там от памяти для кучи оставались мизерные гроши. Ситуация поменялась с выходом 4.4 Ililum?


    1. AlexandrSurkov
      20.11.2015 15:16

      Я в следующей статье как раз буду писать про компиляцию и запуск 4.4 на STM32F4 Discowery. Хотя аналогичная статья уже есть, но там не рассмотрены вопросы сборки бинарников, да и версия там 4.2.

      Сразу могу сказать, что в случае netmf-interpreter ситуация не поменялась. Если вы хотите делать реальный проект — то вам нужна внешняя flash и внешняя RAM. И нужны соответственные изменения порта. Иначе ничего никуда не влезет.

      Кстати, я знаю коммерческий проект, сделанный на netmf interpreter. Так что, если кто думает, что это все игрушка — зря :)

      А вот про llilum пока ничего не могу сказать. Ответ на ваш вопрос будет думаю что ближе к новому году :)


      1. HomoLuden
        20.11.2015 16:01

        Подписался и буду теперь «кентвэйтить с нетерпением».


  1. HomoLuden
    20.11.2015 13:45

    Я полюбопытствую чуток…
    Интересно, теоретически, можно ли будет странслировать в ассм для Cortex-M4 решение Iron Ruby поверх NetMF/Ililum?


    1. AlexandrSurkov
      20.11.2015 15:18

      Теоретически думаю что с помощью llilum — да. В netmf-interpreter есть еще jitter. С его помощью, тоже теоретически, тоже можно сделать трансляцию.