Arduino / Обработка против .NET Micro Framework? Лучший язык? Лучшее оборудование?


10

Некоторое время я возился с Arduino, и я нахожусь в процессе перехода от новичка к среднему. Я хотел бы высказать некоторые мнения о .NET Micro Framework с точки зрения производительности и доступности оборудования.

Я программист .NET, но я обнаружил, что обработка для Arduino практически не требует усилий ... Это настолько близко к C #, что все, что я хочу сделать, даже не требует использования документации.

Во всяком случае, что лучше?


Смотрите также этот вопрос (связанный с C ++): chiphacker.com/questions/3027/…
Кевин Вермеер

Ответы:


17

Если вы хотите перейти от новичка к среднему языку, вам нужно выучить язык C. Даже если вы отложите всю дискуссию о блокировке Windows, вам нужно хорошо разбираться в программировании на C, прежде чем вы сможете выполнять качественную работу над микроконтроллер на языке более высокого уровня, как .NET Micro или C ++.

Встроенные системы состоят из пирамиды знаний, и вам действительно нужно знать хотя бы некоторые из каждого шага, чтобы стать хорошим дизайнером:
^ Код пользователя
^^ Операционные системы
^^^ Язык C
^^^^ Язык ассемблера
^^^ ^^ Архитектура микроконтроллера
^^^^^^ Цифровой дизайн
^^^^^^^ Полупроводники ^^^^^^^^
Базовая электроника (закон Ома)

Платформа Arduino обеспечивает удобный хобби для любителей пирамиды где-то между языком Си и операционной системой.

Конкретные к вашему платформе .NET Framework Micro вопроса, О говорит:

Типичное устройство .NET Micro Framework имеет 32-разрядный процессор без модуля управления внешней памятью (MMU) и может иметь всего 64 КБ оперативной памяти (RAM).

Кроме того, брошюра отличает ее от Windows Mobile , Windows Embedded , CE 6.0 и .NET Compact Framework и сравнивает с Linux, Real-Time, Java и пользовательскими операционными системами. Это огромный скачок от фреймворка Arduino / Processing.

Ваш Arduino имеет 8-битный процессор с 1 КБ ОЗУ. В дополнение к 8-битной и 32-битной потере мощности, он также работает менее чем в два раза быстрее, чем большинство перечисленных процессоров. Хотя я бы не стал отговаривать вас от перехода на 32-разрядный процессор, я бы порекомендовал его как шаг от среднего до продвинутого.

Это действительно легко использовать много времени и памяти с несколькими строками в C # или C ++, которые незначительны для двухъядерного процессора, работающего на пару гигагерц с гигабайтами оперативной памяти, но которые могут иметь огромное значение для встроенного устройства , Пока вы не разбираетесь в ассемблере и / или C или не являетесь гуру в C # или C ++, я бы не рекомендовал использовать его для встроенного программирования.

Итак, я бы начал с загрузки WinAVR и запрограммировал бы простую процедуру мигания светодиода на C. Если C полностью вас смущает, сделайте немного собственного кода («Hello World») на вашем ПК, а затем перейдите к микроконтроллер, но это не должно быть необходимым. Затем перейдите к общению через UART, начните использовать прерывания и переделайте некоторые из ваших проектов Arduino на C. Затем найдите (или создайте!) Новую плату разработки с другим микроконтроллером, возможно, PIC или ARM , и некоторые лакомства, такие как ЖК-экран, Ethernet, SD-карта или все, что вы хотите, и попробуйте изучить новую систему. Добравшись туда, вы будете лучше знать, куда хотите пойти.

Мы будем здесь, чтобы помочь вам на этом пути!


6
Я не согласен с тем, что знание ассемблера и Си необходимы. Очень важно понимать, как работают микроконтроллеры . Изучение ассемблера (c, менее), безусловно, является одним из путей к этому пониманию, но не единственным.
Коннор Вольф

4
@ Фальшивое имя: Конечно, именно поэтому я сказал «по крайней мере, некоторые из каждого». После простой программы от C до ассемблера и шестнадцатеричного понимания каждого шага вы станете намного лучшим программистом. Позже вы можете позволить магии делать свое дело, если хотите, но вам нужно понимать возможности машины, с которой вы работаете.
Кевин Вермеер

Ой, прости. Пропустил "Некоторые из".
Коннор Вольф

7

У меня нет опыта работы с «.NET Micro Framework», но я очень подозрительно отношусь ко всему, что связано с работой виртуальной машины на низкоэнергетических встроенных платформах. Для меня это просто пустая трата времени. Вам нужно больше процессоров питания, больше памяти, больше энергопотребления, чтобы добиться того же эффекта, что и запуск более выделенной платформы, которая компилируется в машинный код. Возможно, почему мой Android-телефон с 528 МГц, на котором установлена ​​виртуальная машина (аналогичная JVM), часто чувствует себя медленнее, чем мой предыдущий 312-МГц Palm Treo, работающий несколько лет назад, который запускает приложения, скомпилированные для машинного кода.

Вкратце, для .NET MF требуется процессор ARM, который на шаг выше по мощности и сложности по сравнению с 8-битными чипами ATMega, используемыми в Arduino.

Я предлагаю, что если Arduino делает то, что вы хотите, придерживайтесь этого. Если нет, вы можете обратиться к более мощным чипам ATMega или ATXmega, а также к ним, которые работают с ARM непосредственно в C / C ++, без дополнительного уровня перевода .NET поверх него.


2
Я искренне согласен, но я не думаю, что это то, что происходит. Я думаю, что IL будет переведен в машинно-специфический код при его развертывании. Вот ссылка, которая подтверждает это предположение: microsoft.com/downloads/… Я до сих пор очень доволен Arduino ... Думаю, единственное, что может убедить меня, - это то, что я нашел довольно впечатляющий выбор щитов на tinyclr.com .. .Я не видел такого обширного выбора щита для Arduino.
Крис Б. Беренс

1
Компромисс между программистом и его потребностями также является причиной того, что нашим настольным ПК требуется столько же времени для загрузки и запуска программ, сколько компьютерам, которые мы использовали 5 или 10 лет назад.
Кевин Вермеер

@Chris - проблема не в том, что он не запускает машинный код, а в том, что он запускает его через кучу абстракций. Абстракция, объекты, универсальные библиотеки, модульность и т. Д. Хороши тем, что упрощают программирование, но занимают время и пространство.
Кевин Вермеер

Да, но я думаю, что уровни абстракции существуют только (или, по крайней мере, в основном только) на компьютере разработчика. Но, конечно, это именно та информация, которая мне нужна.
Крис Б. Беренс

2
@Chris - абстракции распространяются вплоть до машинного кода. В конце концов, машина выполняет операции с адресами: загрузка, сохранение, добавление, условная ветвь и т. Д. Сборка - это перевод машинного кода «один к одному», и C сопоставляется сравнительно близко к нему. Тем не менее, у языков более высокого уровня есть много работы, потому что, скажем, в любом наборе команд процессора нет инструкции try / catch. Машинный код, необходимый для реализации обработчика исключений, не является тривиальным.
Кевин Вермеер

4

Если вы хотите перейти на промежуточный уровень, вы должны попробовать платформу вне среды Arduino. Их много на выбор, вы можете остаться на 8 битах, даже с микроконтроллером Atmel, или перейти к другому поставщику. Используйте IDE, напишите язык кода C, поймите, как работает MCU, напишите свой собственный код загрузчика или используйте встроенный программист и продолжайте двигаться.

Но если вы действительно хотите попробовать написать на C # для микроконтроллеров, попробуйте это: http://www.trygtech.com/products/sh7619_evb.php

Он использует гораздо больший MCU, типичный объем .NET занимает около 512 КБ флэш-памяти и 256 КБ ОЗУ.


2
Эта система использует .NET Micro Framework. Это именно та система, о которой Крис искал мнения.
Кевин Вермеер

4

Я только что видел Netduino, который может быть интересным компромиссом для вас. Я понятия не имею о системных спецификациях или деталях, но похоже, что он использует .NET Micro, так что это похоже на хороший способ, по крайней мере, попробовать эту среду.


3

Самой большой проблемой для Processing / Arduino является отсутствие приличного отладчика. У меня есть дракон AVR, но это мало помогает, потому что (а) отладчик AVR Studio работает медленно и глючит, или (б) отладка в Eclipse просто медленная и, хотя и менее, все еще глючит. У меня не было возможности попробовать это в WinAVR, но это следующее в списке.

Конечно, в Arduino IDE нет отладчика.

Как только вы выходите за рамки простых приложений и начинаете создавать приложения, которые должны выполнять сложную работу на уровне проводных и беспроводных сетей, это довольно разочаровывает. Именно поэтому я серьезно смотрю на .NET MF - играю с SDK, и у меня скоро появится некоторое оборудование.


Ой ... упадок в концентрации! Я использую тулчейн WinAVR с eclipse ;-)

1
Признаюсь ... мне никогда не приходило в голову, что в любой из систем, кроме вывода 13, будет отладчик, что определенно требует второго взгляда на Netduino ...
Крис Б. Беренс,

Ага; вы можете использовать DebugWire на более мелких ATMegas и JTAG на более крупных чипах (думаю, 1280 и выше) для отладки на кристалле приложений Arduino через две среды, упомянутые выше. Однако для этого нужно иметь аппаратное обеспечение, и для меня Дракон по цене около 50 долларов США был хорошей покупкой

Но, как я уже говорил, оба варианта в лучшем случае казались средними. Я с нетерпением жду возможности сравнить отладку с netduino, который у меня появится.

1
Обновление об этом - получил netduino плюс пару дней назад и играл с ним. Я должен сказать, что опыт из коробки удивителен по сравнению с текущим состоянием игры в Arduino. Ничего особенного не требуется - просто visual studio (вы можете использовать бесплатную «экспресс-версию») и USB-кабель, и вы сразу же приступите к отладке на плате. Все средства intellisense работают в среде IDE, и я должен сказать - хотя я и выполнил кучу работ по c / c ++ на других платформах, использование .NET значительно упрощает встраивание встроенного кода

2

Вы можете проверить Netduino . Он создан для совместимости с компоновкой и выводами arduino и запускает .NET Micro Framework. Таким образом, вы можете кодировать на C # и даже отлаживать в Visual Studio!

До сих пор я обнаружил, что с ним очень хорошо и легко работать. Хотя я не нашел много учебников, я думаю, что вы можете просто портировать много вещей из Arduino. Я, будучи новичком, смог легко перенести настройку фоторезистора / фотоэлемента и код из учебника Arduino.


1

Вы могли бы рассмотреть возможность разработки в стиле C на Arduino на STM32 (ARM M3) через один из нескольких проектов с открытым исходным кодом. LeafLabs и xduino имеют работающее аппаратное обеспечение и наборы инструментов на основе Arduino. Я использовал плату Leaflabs Maple, когда мне нужен 32-битный микроконтроллер, по сравнению с обычными чипами Atmega


1

Вы могли бы взглянуть на http://www.hpinfotech.ro/html/cvavr.htm, которая является хорошей простой в использовании IDE для Atmel, и написать, что некоторые CI использовали это профессионально и это очень хорошо, больше похоже на уровень удобства, который вы получить из IDE, как Visual Studio. У меня есть Eclipse, чтобы быть немного неуклюжим для разработки Android, не так гладко, как купленный.

У меня есть Netduino, в которой я реализовал систему управления Tricopter для развлечения, которая работает в режиме реального времени и надежно работает, написана на C # с Visual Studio 2010. Отладка на устройстве, как правило, превосходна, у меня есть автоматическая синхронизация данных через Wi-Fi, и у меня есть крошечный HTTP-сервер в самолете.


0

Мы используем .NET Micro Framework в производственных приложениях (точные измерительные приборы). Работает нормально.

Современные микропроцессоры достигли состояния, когда вы можете использовать парадигму «создать-увидеть-профиль-изменить-увидеть ...». Объемы памяти сейчас довольно большие и дешевые, поэтому, скорее всего, вы не будете складываться в условиях нехватки памяти.

И, как разработчик C #, вы знаете, что адекватное профилирование для достижения желаемого условия - лучший способ жить, чем угадывать, что еще и что нужно сделать сложнее, создавая код, чтобы сделать ваш код (и, возможно, нет) немного быстрее.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.