Как стать автором
Обновить

.Net Micro Framework — Первые шаги

Время на прочтение2 мин
Количество просмотров5.3K
Тизер был воспринят консервативно, но положительно, так что продолжаем.

Hello, Habr!

Итак, коробку распаковали, кнопочки потыкали, повтыкали на отладочный вывод при запуске. Круто! Железяка-то работает.

Хотя, с другой стороны, она не делает ничего полезного.


Что нам необходимо для начала?




Установку IDE, SDK, и первичную прошивку железки я описывать не буду, т.к. с первыми двумя и так всё ясно, а прошивка — дело специфическое, и хорошо описана производителем.

Среда подготовлена? Поехали!



Disclaimer: Embedded платформу я в своих руках держу впервые. Опыта разработки нету (не думаю, что просмотра hackaday.com и чтения wasm.ru достаточно). Есть только смутные представления. Зато есть опыт написания на C#. Если вы суровый Asm/C эмбедщик и для вас эта история — суровые трудовые будни, то моя статья наверное не для вас.

А я пока что напишу коротенький хеллоу-ворлд!

Открываю студию, выбираю новый проект для ChipworkX Module.
Бодро пишу в main метод
Console.WriteLine("Hello, World!");


и тут-же получаю
Error	1	The name 'Console' does not exist in the current context

Ээ, проехали. Консолью тут и не пахнет. Мы пойдём другим путём.
— Экран есть?
— Есть!
— Значит будет рисовать картинки.

После недолгого поиска появляется следующая конструкция:
public class Program
{
    private static readonly int LCDHeight = SystemMetrics.ScreenHeight;
    private static readonly int LCDWidth = SystemMetrics.ScreenWidth;

    private static Bitmap LCD = new Bitmap(LCDWidth, LCDHeight);

    public static void Main()
    {
        Bitmap habr = Resources.GetBitmap(Resources.BitmapResources.Habr);

        LCD.Clear();
        LCD.DrawRectangle(Colors.White, 0, 0, 0, LCDWidth, LCDHeight, 0, 0, Colors.White, 0, 0, Colors.White, 0, 0, ushort.MaxValue);
        LCD.DrawImage((LCDWidth - habr.Width) / 2, (LCDHeight - habr.Height) / 2, habr, 0, 0, habr.Width, habr.Height);
        LCD.Flush();
        Thread.Sleep(Timeout.Infinite);
    }
}


Ресурс Habr это битмап, лежащий в обычном *.resx

Запускаю и лицезрею. Работает, картинку рисует, Хабру привет.

Но нам бы по-интерактивнее.

— Кнопки есть?
— Есть!
— Будем перехватывать прерывания.

После пробега по документации обнаружился класс InterruptPort, который позволяет вешать обработчик прерываний на GPIO пины.

Немножечко курения манов, и был написан код, который при нажати на центральную кнопку делает операцию поднять перо и опустить перо, подмигивая при этом светодиодом (класс OutputPort), а курсорные кнопки соответственно двигают перо по экрану.

Код: pastebin.com/AMF2Th2g

И результат :)

habrapaint

Прошло 3 с небольшим часа. Пока-что результат удволетворительный… На днях напишу чего-нибудь ещё.

P.S.

На обвязке есть акселерометр, так что продолжение эксперимента будет заключаться в общении с сенсором по I2C и отрисовывании катающегося шарика по экрану :)

P.P.S.
Литература:

Beginner's Guide to NETMF
MicroFrameworkProject.com
Теги:
Хабы:
Всего голосов 55: ↑39 и ↓16+23
Комментарии41

Публикации

Истории

Работа

.NET разработчик
49 вакансий

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань