Windows 10 развивается бурно и охватывает все больше платформ. Однако есть ниша, куда даже версия Windows 10 IoT не сможет попасть: микроконтроллеры. Но и тут прогресс не стоит на месте. Неделю назад случилось очень интересное, но мало освещенное событие: вышла новая версия .NET Micro Framework 4.4. Чем это событие так знаменательно, я расскажу далее.
.NET Micro Framework — это порт известного всем .NET под микроконтроллеры. Основная цель данной платформы — использование мощи, простоты и удобства технологии .NET на системах с ограниченными объемами памяти и вычислительных ресурсов. Проект появился в 2001 году и изначально был коммерческим. По мере развития, в 2008 году он превратился в открытую open source платформу, поддерживаемую Microsoft. Ну а в наши дни, с ростом популярности IoT, он обрел второе дыхание.
Сейчас .NET Micro Framework переехал на GitHub и оброс множеством последователей. Существует две ветки развития проекта: netmf-interpreter и LLILUM.
Эта “классическая” ветка, продолжающая развитие первых идей .NET Micro Framework. Для каждой конкретной аппаратной платформы должен быть написан порт, реализующий работу в “железом”. Архитектура этого решения выглядит так:
Каждый слой снизу вверх все меньше зависит от конкретного микроконтроллера. Это позволяет на самом верху пользоваться всеми преимуществами управляемого кода разработки на Visual Studio.
Самым большим недостатком этого подхода является сложность портирования. Создание портов требует серьезных навыков и достаточно много времени, что отталкивает многих разработчиков.
Эти новое направление, построенное уже на других принципах работы. Тут центральное место занимает компиляция. Код сначала компилируется в Microsoft Intermediate Language (MSIL, предшественник CLI), а затем в Intermediate representation (IR). IR код подвергается существенной оптимизации и из него уже получается машинный код. По сути это немного измененная LLVM.
Такой подход позволяет получить существенный прирост производительности и экономию памяти. Сейчас поддерживается компиляция для наборов команд (ISA) ARMv4 и ARMv5 но без использования LLVM. Текущая версия может работать с набором команд Cortex-M, но уже с помощью LLVM.
Правда, нужно сказать, что данная ветка еще сыровата. LLILUM активно развивается, но многого еще не хватает.
Так чем же так примечательна .NET Micro Framework 4.4? В этой версии, помимо множества улучшений и исправлений, впервые появилась, пусть и не полная, но поддержка UWP — универсальной платформы Microsoft. Теперь .NET Micro Framework является частью единого пространства и становится в ряд с разнообразными версиями Windows 10.
Поддержка UWP в LLILUM будет развиваться и расширятся. В январе 2016 года разработчики обещают уже бета версию. Это значит, что в ближайшей перспективе можно будет использовать один и тот же код не только на устройствах с Windows 10, но и на микроконтроллерах Cortex-M. Таким образом, будут охвачены даже те устройства, на которые нельзя установить Windows 10 IoT.
Подробнее о .NET Micro Framework можно узнать прочитав статью “Знакомство с .Net Micro Framework” на хабре и посмотрев доклады “Архитектура .Net Micro Framework” и “Краткий обзор .Net Micro Framework” на techdays.
.NET Micro Framework — это порт известного всем .NET под микроконтроллеры. Основная цель данной платформы — использование мощи, простоты и удобства технологии .NET на системах с ограниченными объемами памяти и вычислительных ресурсов. Проект появился в 2001 году и изначально был коммерческим. По мере развития, в 2008 году он превратился в открытую open source платформу, поддерживаемую Microsoft. Ну а в наши дни, с ростом популярности IoT, он обрел второе дыхание.
Сейчас .NET Micro Framework переехал на GitHub и оброс множеством последователей. Существует две ветки развития проекта: netmf-interpreter и LLILUM.
netmf-interpreter
Эта “классическая” ветка, продолжающая развитие первых идей .NET Micro Framework. Для каждой конкретной аппаратной платформы должен быть написан порт, реализующий работу в “железом”. Архитектура этого решения выглядит так:
Каждый слой снизу вверх все меньше зависит от конкретного микроконтроллера. Это позволяет на самом верху пользоваться всеми преимуществами управляемого кода разработки на Visual Studio.
Самым большим недостатком этого подхода является сложность портирования. Создание портов требует серьезных навыков и достаточно много времени, что отталкивает многих разработчиков.
LLILUM
Эти новое направление, построенное уже на других принципах работы. Тут центральное место занимает компиляция. Код сначала компилируется в Microsoft Intermediate Language (MSIL, предшественник CLI), а затем в Intermediate representation (IR). IR код подвергается существенной оптимизации и из него уже получается машинный код. По сути это немного измененная LLVM.
Такой подход позволяет получить существенный прирост производительности и экономию памяти. Сейчас поддерживается компиляция для наборов команд (ISA) ARMv4 и ARMv5 но без использования LLVM. Текущая версия может работать с набором команд Cortex-M, но уже с помощью LLVM.
Правда, нужно сказать, что данная ветка еще сыровата. LLILUM активно развивается, но многого еще не хватает.
.NET Micro Framework 4.4
Так чем же так примечательна .NET Micro Framework 4.4? В этой версии, помимо множества улучшений и исправлений, впервые появилась, пусть и не полная, но поддержка UWP — универсальной платформы Microsoft. Теперь .NET Micro Framework является частью единого пространства и становится в ряд с разнообразными версиями Windows 10.
Поддержка UWP в LLILUM будет развиваться и расширятся. В январе 2016 года разработчики обещают уже бета версию. Это значит, что в ближайшей перспективе можно будет использовать один и тот же код не только на устройствах с Windows 10, но и на микроконтроллерах Cortex-M. Таким образом, будут охвачены даже те устройства, на которые нельзя установить Windows 10 IoT.
Подробнее о .NET Micro Framework можно узнать прочитав статью “Знакомство с .Net Micro Framework” на хабре и посмотрев доклады “Архитектура .Net Micro Framework” и “Краткий обзор .Net Micro Framework” на techdays.
Indemsys
На прошлой неделе скачал этот netmf-interpreter.
Ужасно все запутано.
Идут какие-то .sln файлы которые никакая версия не может открыть ни VS2010 ни VS2015.
Надо запускать какую-то сборку на .cmd файлах.
А дальше то что?
Вижу TCP стек сделан на той же lwIP.
Так не проще ли FreeRTOS поставить?
Какой уникальный middleware может предоставить .NET Micro Framework 4.4 которого нет в других открытых проектах для микроконтроллеров?
semmaxim
C#?
AlexandrSurkov
На мой взгляд тут нужно смотреть на контекст задачи. И дело тут не в C# как таковом. Сам по себе .NET Micro Fraimwork действительно не всегда несет преимущества. А вот если вы делаете устройство, которое работает с софтом, написанным под .NET (например сервером, собирающим данные с датчиков), то тут можно серьезно сэкономить силы и время.
Могу вам сказать, что сначала написать и проверить 80 команд протокола обмена на C для микроконтроллера, а потом сделать то же самое на C# под ПК — то еще удовольствие. А потом еще и эмулятор этого устройства писать на C#… А при использовании .NET Micro Fraimwork большая часть кода оказывается единой и для сервера и для эмулятора и для устройства. Да еще и удобные Unit тесты, рефакторинг и другие прелести Visual Studio.
Indemsys
Да ясно, технология интересная, чего уж там говорить. Тот же lwIP можно заменить чем нибудь посерьезней с хорошей операционкой, имею в виду MQX.
Скажите вы сами портировали netmf-interpreter на что-нибудь?
Можете дать объяснение странной структуре его .sln файлов?
AlexandrSurkov
Данную версию не портировал. Я работал с предыдущими версиями. Но знаю людей, которые плотно работают с 4.4 и собираюсь поработать с ней сам. Так что, думаю, еще напишу что-нибудь интересное на эту тему.
Indemsys
Да, напишите пожалуйста. Не упустите такие мелочи как настройка путей и все вспомогательные тулсы.
AlexandrSurkov
Я тут выяснил, что они выпустили в релиз репозиторий, который не собирается из-за 2х ошибок :) Но это все поправимо. Скоро будет статья на эту тему.
potan
Ну я бы хотел иметь возможность писать под встраиваемые устройства на чем-нибудь типа F#. Почему-то обычно под них предлагают использовать языки, которые я очень не люблю.
AlexandrSurkov
Видимо, дело в том, что F# для встраиваемых устройств достаточно экзотическая штука. По этому и нет его поддержки.