Arduino / Обробка проти .NET Micro Framework? Краща мова? Краще обладнання?


10

Я певний час возився з Ардуїно, і я переходжу від початкового до проміжного. Мені хотілося б отримати деякі думки щодо .NET Micro Framework з точки зору продуктивності та доступності обладнання.

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

Як би там не було, що краще?


Дивіться також це запитання (пов'язане з C ++): chiphacker.com/questions/3027/…
Кевін Вермер

Відповіді:


17

Якщо ви хочете перейти від початкового до середнього, мова, яку вам потрібно вивчити, - це C. Навіть якщо ви відкладете всю дискусію щодо блокування Windows в сторону, вам потрібно дуже добре програмувати на C, перш ніж ви зможете зробити якісну роботу над мікроконтролер мовою вищого рівня, як .NET Micro або C ++.

Вбудовані системи складаються з піраміди знань, і вам справді потрібно знати хоча б деякі кроки, щоб бути хорошим дизайнером:
^ Код користувача
^^ Операційні системи
^^^ Мова C
^^^^ Мова складання
^^^ ^^ Архітектура мікроконтролерів
^^^^^^ Цифровий дизайн
^^^^^^^ напівпровідники
^^^^^^^^ Основна електроніка (закон Ома)

Структура Arduino забезпечує зручний гачок для любителів піраміди десь між мовою С та операційною системою.

Про специфічне для вашого .NET Micro Framework питання, About говорить:

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

Крім того, брошура відрізняє її від Windows Mobile , Windows Embedded , CE 6.0 та .NET Compact Framework і порівнює її з Linux, реальним часом, Java та користувацькими операційними системами. Це величезний стрибок з Arduino / Processing Framework.

У вашого Arduino є 8-бітний процесор з 1 кб оперативної пам’яті. На додаток до 8-бітових та 32-бітних втрат електроенергії, вона також працює менше ніж удвічі швидше, ніж більшість перерахованих процесорів. Хоча я не заважав би вам перейти на 32-розрядний процесор, я б рекомендував це як проміжок від просунутого до просунутого.

Справді просто використовувати багато часу та пам’яті за допомогою декількох рядків у C # або C ++, які несуттєві для двоядерного процесора, що працює на пару гігагерців з гігабайтами оперативної пам’яті, але які можуть внести величезні значення у вбудований пристрій . Поки ви не вподобаєте мову мовлення та / або C, або гуру на C # або C ++, я б не рекомендував використовувати його для вбудованого програмування.

Отже, я б почав із завантаження програми WinAVR і запрограмував простий порядок мигання світлодіодів на C. Якщо C вас абсолютно заплутав, зробіть на своєму ПК трохи нативного коду ("Hello World"), а потім перейдіть до мікроконтролера, але це не повинно бути необхідним. Далі перейдіть до спілкування через UART, почніть використовувати переривання та повторіть кілька своїх проектів Arduino в C. Потім знайдіть (або зробіть!) Нову плату розробки з іншим мікроконтролером, можливо, PIC або ARM , і деякими смаколики, такі як РК-екран, Ethernet, SD-карта або все, що завгодно, і спробуйте дізнатися нову систему. Потрапивши туди, ви краще дізнаєтесь, куди хочете піти.

Ми будемо тут, щоб допомогти вам по дорозі!


6
Я не погоджуюся з тим, що знання асемблера та С є важливими. Важливо зрозуміти, як працюють мікроконтролери . Навчання асемблеру (з, меншою мірою) - це, звичайно, один шлях до цього розуміння, але він не єдиний.
Вонор Коннор

4
@Fake Ім'я: Звичайно, саме тому я сказав "принаймні деякі з кожного". Дотримуючись простої програми від C до складання до шестигранної та розуміння кожного кроку, ви зробите вас набагато кращим програмістом. Пізніше ви можете дозволити магії робити все, що вам потрібно, але вам потрібно зрозуміти можливості машини, з якою ви працюєте.
Кевін Вермер

Ну, вибачте. Пропущено "Деякі з".
Коннор Вольф

7

Я не маю досвіду роботи з ".NET Micro Framework", але я дуже підозріло ставлюсь до всього, що передбачає запуск віртуальної машини на вбудованих платформах з низьким потенціалом. Мені це просто здається марною. Вам потрібно більше процесорів живлення, більше пам’яті, більше енергоспоживання, щоб досягти такого ж ефекту, як і запуск більш виділеної платформи, яка збирається до основного машинного коду. Можливо, чому мій телефон із 528 МГц на Android з віртуальною машиною (подібний до JVM) часто відчуває себе повільніше, ніж попередній кількарічний 312 МГц Palm Treo, який запускає програми, зібрані для власного машинного коду.

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

Моя пропозиція: якщо Ардуїно зробить те, що ти хочеш, дотримуйся цього. Якщо ні, ви можете звернутися до більш потужних мікросхем ATMega або ATXmega, і вище, які працюють з ARM безпосередньо в C / C ++, без зайвого шару трансляції .NET над ним.


2
Я від душі погоджуюся, але не думаю, що це відбувається. Я думаю, що ІЛ перетворюється в специфічний для машини код, коли він розгортається. Ось посилання, що недооцінює це припущення: microsoft.com/downloads/… Я майже задоволений Ардуїно поки що ... Я думаю, що єдине, що, можливо, мене переконало - це те, що я знайшов досить вражаючий вибір щита на tinyclr.com .. . Я не бачив такого широкого вибору щита для Ардуїно.
Кріс Б. Беренс

1
Компенсація зусиль програміста також викликає завантаження та запуск програм стільки настільних ПК, як комп'ютери, які ми використовували 5 або 10 років тому.
Кевін Вермер

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

Так, але я думаю, що шари абстракції існують лише (або принаймні здебільшого лише) на розроблювальній машині. Але звичайно, це якраз потрібна мені інформація.
Кріс Б. Беренс

2
@Chris - абстракції поширюються аж до машинного коду. Зрештою, машина виконує операції з адресами: Завантаження, зберігання, додавання, умовна гілка і т. Д. Збірка - це переклад машинного коду один на один, і C відображає порівняно близько до нього. Однак для мов вищого рівня належить зробити багато роботи, оскільки немає, скажімо, інструкцій спробувати / ловити в жодному наборі інструкцій процесора. Машинний код, необхідний для реалізації обробника винятків, не є тривіальним.
Кевін Вермер

4

Якщо ви хочете перейти до проміжного, вам варто спробувати платформу поза оточенням Arduino. Їх можна вибирати дуже багато, ви можете залишитися на 8 бітах, навіть з Atmel MCU або перейти до одного від іншого постачальника. Використовуйте IDE, запишіть код C мовою, зрозумійте, як працює MCU, напишіть власний код завантажувача або скористайтеся вбудованим програмістом і продовжуйте рухатися.

Але якщо ви дійсно хочете спробувати написати в C # для мікроконтролерів, спробуйте це: http://www.trygtech.com/products/sh7619_evb.php

Він використовує набагато більший MCU, типовий слід .NET - це близько 512 КБ флеш-пам’яті та 256 Кб оперативної пам’яті.


2
Ця система використовує рамку .NET Micro. Саме Кріс шукав думок щодо Кріса.
Кевін Вермер

4

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


3

Найбільша проблема, що стосується Processing / Arduino, для мене - це відсутність гідного налагоджувача. У мене є дракон AVR, але це не дуже допомагає, тому що (а) налагоджувач AVR Studio повільний і глючний, або (b) налагодження в Eclipse - просто повільне і, тим не менш, все ще непохитне. У мене не було можливості спробувати це в WinAVR, але це далі в списку.

Звичайно, в IDE Arduino немає налагодження.

Коли ви виходите за межі простих програм і починаєте створювати додатки, які повинні виконувати пов'язані речі на рівні дротової та бездротової мережі, це зовсім неприємно. Це, головним чином, тому я серйозно поглядаю на .NET MF - граю з SDK і незабаром з’явиться деяке обладнання.


На жаль ... проміжок концентрації! Я використовую занадто ланцюжок WinAVR з затемненням ;-)

1
Зізнаюся, мені ніколи не спадало на думку, що в будь-якій системі не буде налагоджувача, окрім шпильки 13. Це, безумовно, потребує повторного погляду на Netduino ...
Кріс Б. Беренс

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

Але, як я вже згадував, обидва варіанти в найкращому досвіді здавалися середніми. Я з нетерпінням чекаю порівняння налагодження з netduino, в якому я приходжу.

1
Оновлення щодо цього - отримав netduino плюс пару днів тому і пограв з ним. Я мушу сказати, що досвід роботи в цій галузі є вражаючим порівняно з поточним станом гри в Ардуїно. Нічого фантазійного не потрібно - просто візуальна студія (ви можете використовувати безкоштовну «експрес-версію») та кабель usb, і ви працюєте з налагодженням на борту в один раз. Всі матеріали intellisense працюють в IDE, і я мушу сказати - хоча я зробив купу c / c ++ роботи на інших платформах, використовуючи .NET робить вбудований код вбудованого кримінально легким ;-)

2

Ви можете перевірити Netduino . Він створений для сумісності з макетом arduino та штифтами та працює .NET Micro Framework. Таким чином, ви можете кодувати в C # і навіть налагоджувати всередині Visual Studio!

Поки що я вважав, що це дуже добре і легко працювати. Поки я не знайшов багато навчальних посібників, я думаю, що ви можете просто перенести багато матеріалів Arduino. Будучи новичкою, я міг легко перенести налаштування фоторезистора / фотоелементи та код з навчального посібника Arduino.


1

Ви можете розглянути можливість створення розробки в стилі 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. Налагодження на пристрої, як правило, чудово, у мене він автоматично синхронізує дані через wifi, і у мене є крихітний сервер HTTP в літаку.


0

Ми використовуємо .NET Micro Framework у виробничих додатках (пристрої точного вимірювання). Це чудово працює.

Сьогоднішні мікропроцесори досягли стану, коли можна використовувати парадигму "створити-побачити-профіль-змінити-побачити ...". Обсяг пам’яті зараз досить великий і дешевий, тому, швидше за все, ви не будете стекатися з умовами, що не входять в пам'ять.

І як розробник C # ви знаєте, що адекватне профілювання для досягнення бажаної умови є кращим способом життя, ніж здогадуватися, що ще і складніше вам слід зробити, створюючи свій код, щоб зробити ваш код (а може і ні) трохи швидшим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.