.NET Micro Framework – это реализация методологии разработки программного обеспечения .NET, предназначенная для 32-разрадных микроконтроллеров. Основная идея .NET MF – предоставить разработчикам компактных и даже карманных устройств возможность использовать современный язык программирования C# совместно с мощной библиотекой классов, предоставляющей широкие возможности работы с различными устройствами, файловыми системами, аппаратными интерфейсами, сетью и многим другим. За счёт этого программисты могут сконцентрироваться на решении функциональных задач разрабатываемого устройства и не беспокоиться о том, например, как реализовать стек протоколов TCP/IP или алгоритм рисования закрашенных полупрозрачных эллипсов на экране. А самое главное – благодаря .NET Micro Framework можно гораздо быстрее получить нужный результат, проверить идею, перейти к промышленному производству. Hardware Layer Этот слой содержит микропроцессор и другие компоненты, из которых состоит ваша аппаратная платформа. На текущий момент .NET Micro Framework может быть запущен на процессорах таких архитектур, как ARM7, ARM9, Cortex, XScale, ARC и ADI Blackfin. Runtime Component Layer Этот слой состоит из 3-х компонентов: • .NET Micro Framework common language runtime (CLR); • Hardware abstraction layer (HAL); • Platform abstraction layer (PAL). CLR Среда исполнения .NET Micro Framework CLR (TinyCLR) является подмножеством .NET Framework CLR. TinyCLR отличается от «большой» CLR тем, что она была специально переработана для использования в небольших встраиваемых устройствах. .Net Micro Framework Porting Kit поставляется вместе с исходными кодами TinyCLR. Данные коды представляют собой аппаратно-независимую библиотеку, которая может быть скомпилирована разными компиляторами для разных архитектур. HAL и PAL TinyCLR взаимодействует с нижележащей аппаратной частью через HAL и PAL. Как HAL, так и PAL состоят из набора функций, вызываемых из TinyCLR. Эти функции написаны на C++. Вполне понятно, что функции HAL очень тесно связаны с «железом». Функции, входящие в PAL, наоборот, спроектированы так, чтобы Class Library Layer Библиотека классов .NET Micro Framework представляет собой объектноориентированную коллекцию типов, которые разработчики используют при написании встраиваемых приложений. Сюда могут быть включены и сторонние типы. Например, разработчики отладочных плат добавляют сюда классы для работы с периферийными устройствами, расположенными на этих платах. Application Layer Этот уровень содержит приложения, которые вы создаете для своих устройств. На сегодняшний день единственным языком разработки таких приложений является C#. Таким образом, основной задачей портирования является написание функций и конфигураций уровня HAL. Теперь посмотрим, каким образом это делается. Solutions в .NET Micro Framework Porting Kit Каждый порт в рамках .Net Micro Framework Porting Kit представляет собой Solution. Solution в свою очередь состоит из нескольких Project’ов. Всего существует 5 видов Project’ов: • NativeSample • PortBooter • TinyBooter • TinyBooterDecompressor • TinyCLR NativeSample — это простой «Hello, World» проект. Основной задачей при его реализации является написание достаточного количества функций HAL, чтобы вывести строку «Hello, World» в отладочную консоль. TinyCLR – собственно, сама среда исполнения. Получение работоспособной TinyCLR и есть цель портирования. В процессе работы над этим проектом дописываются оставшиеся функции HAL. TinyCLR включает в себя TinyBooter. TinyBooter — это загрузчик .NET Micro Framework. В момент подачи питания он производит всю необходимую инициализацию и запускает TinyCLR. Кроме того он позволяет прошивать новые версии TinyCLR. В процессе реализации этого проекта в HAL добавляется еще несколько новых функций. TinyBooterDecompressor — это специальная надстройка, призванная минимизировать физический размер TinyBooter. TinyBooter хранится в заархивированном виде и при включении питания распаковывается и загружается с помощью TinyBooterDecompressor. PortBooter – загрузчик порта. Он позволяет прошивать новые версии TinyCLR в процессе разработки и отладки порта. Реализации этого проекта требует добавления новых функций HAL к уже написанным для NativeSample. Это переходный проект для подготовки к реализации следующих проектов. Таким образом, реализовывая эти проекты по очереди, вы создаете слой HAL. Плата FEZ Panda II содержит встроенный в плату светодиод (впрочем как и Arduino). Данная демо-программа просто заставляет мигать данный светодиод с периодичностью 500 мс.