Комментарии 36
Ну что дорогие друзья, надеюсь материал был вам интересен и полезен!
В репо находится код выдранный из одного из моих сайдпроектов, так что местами требует рефакторинга и чистки, но тем не менее должен послужить неплохим примером :)
В ближайшее время будет интересный материал о таком красавце, как HTC Shift, который я купил у читателя за относительно небольшие деньги. Это очень интересный UMPC с двумя процессорами на борту - ARM и x86, которые работают на двух ОС: Windows Mobile и Windows Vista, а между ними можно переключаться нажатием одной кнопки!
И конечно-же не забудем о планшете-электронной книге на WinCE, о которой я рассказывал в статье!
Друзья! Ещё год назад мне пришла очень интересная идея для DIY-моддинга самопального крутого девайса. Для этого мне нужен будет планшет или дроид-нетбук по типу такого как в посте, но обязательно битый, нерабочий, и т.п, поскольку рабочий девайс мне не хотелось бы разбирать. Помню под одним из прошлых постов читатели предлагали заслать на проект подобный девайс, но сейчас я не могу найти их контакты.
Ссылка на исходный код никуда не ведет...
Ubuntu 16.04 LTS Xenial Xerus c April 30 2021 все. Только Extended Security Maintenance.
Почему не взять свежие образы тут:
https://www.armbian.com/orange-pi-one/
Или собрать за 10-15 мин тут:
https://github.com/armbian/build
Я ж не просто так написал, что под некоторые одноплатники возможно что и нет апдейтов или их ставить нецелесообразно (например, на устройства с 256Мб ОЗУ).
Статья интересная и познавательная. Но есть несколько вопросов:
1. Что насчет быстродействия? Ежу понятно, что если хочешь очень быстро -- делай на С/С++. Но есть ли инфа, насколько проседает быстродействие под .NET?
2. Насколько универсальна .NET платформа? Т.е. есть бинарники под все одноплатники или только под некоторые? Меня интересует, в частности, семейство Raspberry Pi. Тут ведь идет завязка на конкретное железо (GPIO, SPI, I2C, ...), для чего обычно используются дополнительные библиотеки (та же spidev, например).
3.Какая среда наиболее удобна для разработки? На ПК у нас есть Visual Studio со всеми плюшками, что вряд ли будет иметь место на одноплатнике. Поэтому возникает естественный вопрос о кросс-платформенной разработке (но надежды мало :-) ).
Понятно, что ответы можно нагуглить и самому, но тут больше интересует личный опыт, раз уж человек погрузился в тему.
Но есть ли инфа, насколько проседает быстродействие под .NET?
Учитывая что все общение происходит через юзерспейс, не думаю что дотнет здесь большой боттлнек.
Насколько универсальна .NET платформа? Т.е. есть бинарники под все одноплатники или только под некоторые? Меня интересует, в частности, семейство Raspberry Pi. Тут ведь идет завязка на конкретное железо (GPIO, SPI, I2C, ...), для чего обычно используются дополнительные библиотеки (та же spidev, например).
Да, под все. На малинке есть библиотеки, которые напрямую в регистры процессора пишут (кстати, как их защита памяти не кидает в сегфолт?)
Какая среда наиболее удобна для разработки? На ПК у нас есть Visual Studio со всеми плюшками, что вряд ли будет иметь место на одноплатнике. Поэтому возникает естественный вопрос о кросс-платформенной разработке (но надежды мало :-) ).
MonoDevelop!
3. На малине можно запустить VSCode, например, но если малина не 4 и выше то скорость работы вам не понравится - так что Remote Debugger надо настраивать, ИМХО.
2. Если на одноплатнике линукс, то переносимо в рамках одной архитектуры - но так как работаем с пинами то то что в /sys/, /proc/ и /dev/ все будет одинаково гарантии нет, так что как минимум номера пинов и ссылки на девайсы обязательно выносить в конфиг.
P.S. есть .NET nanoFramework, очень ограниченное подмножество .NET'а, но работает на ESP32, STM32 и подобных микроконтроллерах.
Нормально всё по быстродействию. Рантайм же все в итоге компилирует в обычный машинной код, а не интерпритирует. Плюс в NET8 многоуровневый оптимизатор, который налету hot paths сильнее оптимизирует.
Главное не делайте как автор, а используйте NET8 - он значительно быстрее на arm, чем mono, который всегда был глючным.
Для работы с переферией не изобретайте велосипед, а используйте вот это https://github.com/dotnet/iot
Для разработки можно использовать или мой рецепт из 2018 года https://habr.com/ru/articles/422141/ или на хабре есть статья, где человек подобное завернул в плагин для vscode и сделал всё по красоте.
В общем эта статья скорее сборник вредных советов о том, как делать НЕ надо
Единственное, к чему можно докопаться - это к Mono и к использованию фреймворка как профиля, о чём я честно предупредил. Ни в чем больше проблем не вижу.
This repository contains the System.Device.Gpio library and implementations for various boards like Raspberry Pi and Hummingboard.
Ну в дотнете ещё с 4.5 есть, например, матлиба, но это не значит что она подходит для всех кейсов и нет необходимости иногда городить велики. На мтк свой интерфейс к гпио, а не sysfs, на s3c6410 свой и т.д и iot не панацея)
Лишь бы обосрать)
Зачем обосрать, вы вводную статью делаете, мол, все кому интересно, делай как я.
Но а для новичков как лучше? Как вы сделали или основным маршрутом?
В репке iot главная польза - наличие базовых классов и абстракций, поверх которых накручены userspace драйверы к устройствам.
Реализовывать несколько абстрактных классов и имеешь кучу плюшек.
Для удаленной отладки в VSCode есть расширение .NET FastIoT
Честное слово, автор, ну нормально же всё было, классные статьи про древнее железо. А тут вы описываете подходы, которые при использовании навредят моей любимой платформе
Где конкретика?)
Отвечу сразу вам и @yri066
Вы говорите как классно писать на net для одноплатников и сразу же показываете использование mono. Не надо так. А то кто-то, кто не знает платформу, возьмёт и пойдёт таким путем, а потом будет говорить, какой net плохой и ужасный.
Ну и махонькая придирка - код в некоторых местах довольно неканоничен. Яб такое на ревью не пропустил.
Если вы за подход "критикуешь, предлагай", то могу написать что-то типа статьи-ответа с моим видением "правильного" использования .NET на одноплатниках.
Если вы за подход "критикуешь, предлагай", то могу написать что-то типа статьи-ответа с моим видением "правильного" использования .NET на одноплатниках.
Было бы реально очень круто!
Код выдран напрямую из сайдпроекта, там еще нужно порефакторить :)
Я пока не совсем понимаю придирки к моно насчет стабильности. Понятное дело что под армом жита (вроде) нет, дебажить моно неудобно но в остадьном вроде вполне норм. Положить рантайм в манагед среде у меня не получалось.
У NET выше производительность - среду специально тюнили под arm, GC работает сильно лучше, сейчас доступны режимы работы GC, которые не жрут кучу системной памяти.
Приложение на NET можно сделать selfhosted и потом затримить - можно не ставить рантайм на sbc.
У NET есть GenericHost от MS, который умеет интегрироваться с systemd в плане сигнализации состояния демона и системных логов
У NET есть нормально работающий удалённый отладчик.
Новые версии пакетов выходят по большей части под NET и standard2.1.
В конце концов у NET более приятные csproj и способ работы с nuget.
Начиная с NET7 доступен LibraryImport для более удобной и быстрой работы с unmanaged кодом.
В общем я хз, зачем сейчас использовать mono.
P.S. увидел у вас в логе работу с callStack- не надо так - бьёт по производительности и легко может показать ерунду, если метод будет заинлайнен.
P.P.S. похоже у меня больше горит от того, что вы показали пример нового проекта на mono
Статья была интересной, но чем она вредит данной платформе?
Если открыть сам Visual Studio, том есть много разных вариантов как писать на C# для платформ с Linux и Android.
Можно консольного типа приложение писать, как в статье, можно делать Blazor Web App (на Rasperry Pi такое есть), можно делать с использованием .NET MAUI (надо искать подходящий одноплатник). Тут бы анализ не помешал этих вариантов. Но консольное приложение видится худшим из них. Тогда уже лучше Arduino взять.
Но я бы выбрал писать на Java или на C++ под Android в Android Studio.
Поскольку будет развитое GUI и главное - мощный отладчик. Поскольку при наличии GPT не важно на каком языке писать. А в качестве одноплатника выбрал бы Banana PI BPI-M5, а не Orange. Поскольку для Banana есть данный момент поддерживаемый Андроид, а для Orange нет.
Угу. И огребать с планировщиком андройда, который может прибить твоё приложение просто потому что.
А как у андроид с доступом к gpio и шинам?
Вообще на шарпе можно взять Avalonia и нормально писать gui для одноплатника. При этом даже X или Wayland не нужен будет.
С Avalonia вижу проблему с IDE. Если это просто расширение к VS то будет криво и косо и критически зависеть от качества портирования .NET на конкретном одноплатнике. А в той среде про портирование .NET никто даже не в курсе.
А вот отладкчик Android Studio покроет все недостатки понимания его планировщика.
Не, какие проблемы. Аналония- это набор библиотек. Плагин для студии просто шаблоны и дизайнер добавляет.
Нет никакого качества портирования. NET зависит от небольшого набора системных библиотек.
А если говорить про gui без иксов, то авалония использует skia для отрисовки и просто пишет во фреймбуфер.
Так что, если на одноплатнике хоть как-то заводится графика, то проблем не будет
Тогда уже лучше Arduino взять.
Тогда можно взять dotnet nano framework. У него GUI это WPF подобный аналог.
Не имею понятия что такое профиль dotnet в одноплатниках, но при использовании dotnet на обычных ПК для него все же есть WinForms. Достаточно подключить nuget-пакет Core.System.Windows.Forms. Это порт WinForms из mono в dotnet. С System.Drawing тоже можно работать. Достаточно включить флаг EnableUnixSupport в runtime.template.json.
Использовать sysfs для управления GPIO в наше время это конечно же моветон. Почитайте мои посты про библиотеку Libgpiod, Работа с GPIO в Linux. Часть 6. Библиотека Libgpiod. Использование в C# .NET IoT. Часть 2. Мигаем светодиодом (LED) используя библиотеку Libgpiod. И расширение .NET FastIoT.
Пишем программы на C# для одноплатников: что, как и где на примере Orange Pi One