Arduino / Przetwarzanie kontra .NET Micro Framework? Najlepszy język? Najlepszy sprzęt?

10

Od jakiegoś czasu bawię się Arduino i przechodzę od początkującego do średnio zaawansowanego. Chciałbym poznać opinie na temat .NET Micro Framework , pod względem wydajności i dostępności sprzętu.

Jestem programistą .NET, ale odkryłem, że Processing for Arduino ma prawie zerowe tarcie ... Jest tak blisko C #, że wszystko, co chcę zrobić, nie wymaga nawet podróży do dokumentacji.

W każdym razie, co jest lepsze?

Chris B. Behrens
źródło
Zobacz także to pytanie (związane z C ++): chiphacker.com/questions/3027/…
Kevin Vermeer

Odpowiedzi:

17

Jeśli chcesz przejść od początkującego do średnio zaawansowanego, językiem, którego musisz się nauczyć, jest C. Nawet jeśli odłożysz całą debatę na temat blokowania systemu Windows, musisz być bardzo dobry w programowaniu w C, zanim będziesz mógł wykonać dobrą pracę na mikrokontroler w języku wyższego poziomu, takim jak .NET Micro lub C ++.

Systemy osadzone składają się z piramidy wiedzy i naprawdę musisz znać przynajmniej część każdego kroku, aby być dobrym projektantem:
^ Kod użytkownika
^^ Systemy operacyjne
^^^ Język C
^^^^ Język
asemblera ^^^ ^^ Architektura mikrokontrolera
^^^^^^ Projektowanie cyfrowe
^^^^^^^ Półprzewodniki ^^^^^^^^
Podstawowa elektronika (prawo Ohma)

Środowisko Arduino zapewnia haczykom wygodny zaczep do piramidy pomiędzy językiem C a systemem operacyjnym.

Specyficzne dla danego pytania .NET Micro ramowej O mówi:

Typowe urządzenie .NET Micro Framework ma 32-bitowy procesor bez jednostki zarządzania pamięcią zewnętrzną (MMU) i może mieć zaledwie 64 KB pamięci o dostępie swobodnym (RAM).

Ponadto broszura odróżnia go od Windows Mobile , Windows Embedded , CE 6.0 i .NET Compact Framework i porównuje go z systemami Linux, Real-Time, Java i niestandardowymi systemami operacyjnymi. To ogromny skok w stosunku do frameworka Arduino / Processing.

Twoje Arduino ma 8-bitowy procesor z 1k RAM. Oprócz 8-bitowej vs. 32-bitowej utraty mocy działa również mniej niż o połowę szybciej niż większość wymienionych procesorów. Chociaż nie zniechęciłbym cię do przejścia na procesor 32-bitowy, polecam go jako przejście od średnio-zaawansowanego do zaawansowanego.

Naprawdę łatwo jest zużyć dużo czasu i pamięci z kilkoma liniami w C # lub C ++, które są nieistotne na dwurdzeniowym procesorze działającym na kilku gigabajtach z gigabajtami pamięci RAM, ale mogą mieć ogromną różnicę na wbudowanym urządzeniu . Dopóki nie będziesz dobry w asemblerze i / lub C lub guru w C # lub C ++, nie polecam używania go do programowania wbudowanego.

Zacznę więc od pobrania WinAVR i zaprogramowania prostej procedury migania diod LED w C. Jeśli C jest dla Ciebie całkowicie mylące, zrób trochę natywnego kodu („Hello World”) na komputerze, a następnie przejdź do mikrokontroler, ale nie powinno to być konieczne. Następnie przejdź do komunikacji przez UART, zacznij używać przerwań i ponów niektóre projekty Arduino w C. Następnie znajdź (lub stwórz!) Nową płytę programistyczną z innym mikrokontrolerem, może PIC lub ARM , i niektóre gadżety takie jak ekran LCD, Ethernet, karta SD lub cokolwiek chcesz, i spróbuj nauczyć się nowego systemu. Gdy tam dotrzesz, będziesz wiedział lepiej, dokąd chcesz się udać.

Będziemy tutaj, aby Ci pomóc po drodze!

Kevin Vermeer
źródło
6
Nie zgadzam się, że znajomość asemblera i C jest niezbędna. Niezwykle ważne jest zrozumienie działania mikrokontrolerów . Nauka asemblera (c, mniej) jest z pewnością jedną z dróg do tego zrozumienia, ale nie jedyną.
Connor Wolf,
4
@Fake Name: Jasne, dlatego powiedziałem „przynajmniej niektóre z nich”. Postępując zgodnie z prostym programem od C do asemblera i zrozumieniem każdego kroku, będziesz znacznie lepszym programistą. Możesz później pozwolić magii zrobić to, co chcesz, ale musisz zrozumieć możliwości maszyny, z którą pracujesz.
Kevin Vermeer
Ups, przepraszam. Brakowało „Some of”.
Connor Wolf,
7

Nie mam doświadczenia z „.NET Micro Framework”, ale jestem bardzo podejrzliwy w stosunku do wszystkiego, co wiąże się z uruchomieniem maszyny wirtualnej na słabo zasilanych platformach wbudowanych. Wydaje mi się to marnotrawstwem. Potrzebujesz więcej procesorów mocy, więcej pamięci, większego zużycia energii, aby osiągnąć ten sam efekt, co uruchomienie bardziej dedykowanej platformy, która kompiluje się do natywnego kodu maszynowego. Być może mój telefon z Androidem 528 MHz z maszyną wirtualną (podobny do JVM) często działa wolniej niż mój poprzedni kilkuletni Palm Treo 312 MHz, który uruchamia aplikacje skompilowane dla natywnego kodu maszynowego.

W skrócie .NET MF wymaga procesora ARM, który jest o krok wyżej pod względem mocy i złożoności od 8-bitowych układów ATMega używanych w Arduino.

Sugeruję, że jeśli Arduino robi to, co chcesz, trzymaj się tego. Jeśli nie, możesz spojrzeć na mocniejsze układy ATMega lub ATXmega, a powyżej, które działają z ARM bezpośrednio w C / C ++, bez dodatkowej warstwy translacji .NET.

davr
źródło
2
Serdecznie się zgadzam, ale nie sądzę, że tak się dzieje. Myślę, że IL jest tłumaczony na kod specyficzny dla maszyny, kiedy jest wdrażany. Oto link, który potwierdza to założenie: microsoft.com/downloads/ ... Jak dotąd jestem bardzo zadowolony z Arduino ... Myślę, że jedyną rzeczą, która może mnie przekonać jest to, że znalazłem całkiem imponujący wybór tarcz na tinyclr.com .. Nie widziałem tak szerokiego wyboru tarczy dla Arduino.
Chris B. Behrens
1
Kompromis między energią a programistą powoduje również, że nasze komputery stacjonarne tak samo długo uruchamiają i uruchamiają programy, jak komputery, z których korzystaliśmy 5 lub 10 lat temu.
Kevin Vermeer
@Chris - Problem nie polega na tym, że nie uruchamia kodu maszynowego, lecz na tym, że przepuszcza go przez szereg abstrakcji. Abstrakcja, obiekty, biblioteki ogólne, modułowość itp. Są dobre, ponieważ upraszczają programowanie, ale wymagają czasu i przestrzeni.
Kevin Vermeer
Tak, ale myślę, że warstwy abstrakcji istnieją tylko (lub przynajmniej głównie tylko) na maszynie programistycznej. Ale to jest właśnie taka informacja, jakiej potrzebuję.
Chris B. Behrens
2
@Chris - Abstrakcje są propagowane aż do kodu maszynowego. Na koniec maszyna wykonuje operacje na adresach: ładuj, przechowuj, dodawaj, gałąź warunkowa itp. Asemblacja to tłumaczenie kodu maszynowego jeden na jeden, a C odwzorowuje go stosunkowo blisko. Jednak języki wyższego poziomu mają dużo pracy, ponieważ w zestawie instrukcji procesora nie ma, powiedzmy, instrukcji try / catch. Kod maszynowy wymagany do implementacji procedury obsługi wyjątków nie jest trywialny.
Kevin Vermeer
4

Jeśli chcesz przejść do średnio zaawansowanego, powinieneś wypróbować platformę poza środowiskiem Arduino. Istnieje wiele z nich do wyboru, możesz pozostać przy 8 bitach, nawet z MCU Atmel lub przejść do jednego od innego dostawcy. Użyj IDE, napisz kod C, zrozum, jak działa MCU, napisz własny kod bootloadera lub użyj programatora i kontynuuj pracę.

Ale jeśli naprawdę chcesz spróbować napisać w C # dla mikrokontrolerów, spróbuj tego: http://www.trygtech.com/products/sh7619_evb.php

Używa znacznie większego MCU, typowy ślad .NET to około 512 KB pamięci flash i 256 KB pamięci RAM.

Andre Oliveira
źródło
2
Ten system wykorzystuje platformę .NET Micro. To jest dokładnie ten system, o którym Chris szukał opinii.
Kevin Vermeer
4

Właśnie widziałem Netduino, które może być dla ciebie interesującym kompromisem. Nie mam pojęcia o specyfikacji systemu ani szczegółach, ale wydaje się, że używa .NET Micro, więc wydaje się, że to dobry sposób na przynajmniej wypróbowanie tego frameworka.

Otherdave
źródło
3

Największym pojedynczym problemem dla mnie w Processing / Arduino jest brak przyzwoitego debuggera. Mam smoka AVR, ale to niewiele pomaga, ponieważ (a) debuger AVR Studio jest powolny i zawiera błędy lub (b) debugowanie w środowisku Eclipse jest po prostu wolne, a jeszcze mniej błędne. Nie miałem okazji wypróbować go w WinAVR, ale to jest następne na liście.

Oczywiście w Arduino IDE nie ma debugera.

Gdy wyjdziesz poza proste aplikacje i zaczniesz budować aplikacje, które muszą robić zaangażowane rzeczy na poziomie sieci przewodowej i bezprzewodowej, jest to dość frustrujące. Właśnie dlatego poważnie przyglądam się .NET MF - gram z SDK i wkrótce pojawi się sprzęt.


źródło
Ups ... zanik koncentracji! Ja korzystając z toochain WinAVR z zaćmienia ;-)
1
Przyznaję się ... nigdy nie przyszło mi do głowy, że w żadnym systemie będzie debugger, poza pinem 13. To zdecydowanie wymaga drugiego spojrzenia na Netduino ...
Chris B. Behrens
Tak; możesz użyć DebugWire na mniejszych ATMegas i JTAG na większych chipach (chyba 1280 i wyżej), aby przeprowadzić debigowanie aplikacji Arduino na chipach za pośrednictwem dwóch wyżej wymienionych środowisk. Musisz jednak mieć sprzęt, aby to zrobić, a dla mnie Smok za około 50 USD był dobrym zakupem
Ale, jak wspomniałem, obie opcje wydawały się przeciętne przy najlepszych doświadczeniach. Z niecierpliwością czekam na porównanie debugowania z netduino, które mam.
1
Aktualizacja tego - otrzymałem netduino plus kilka dni temu i bawiłem się nim. Muszę powiedzieć, że gotowe doświadczenie jest niesamowite w porównaniu z obecnym stanem gry w Arduino. Nic wymyślnego nie jest wymagane - tylko studio wizualne (możesz użyć darmowej wersji „ekspresowej”) i kabel USB i możesz zacząć działać z pokładowym debugowaniem w mgnieniu oka. Wszystkie rzeczy intellisense działają w IDE i muszę powiedzieć - mimo że zrobiłem sporo pracy w c / c ++ na innych platformach, użycie .NET sprawia, że ​​wbudowany kod jest przestępczo łatwy ;-)
2

Może chcesz sprawdzić Netduino . Został zbudowany tak, aby był kompatybilny z układem Arduino i pinami i obsługuje .NET Micro Framework. Możesz więc pisać w C #, a nawet debugować w Visual Studio!

Jak dotąd uważam, że jest bardzo dobry i łatwy w obsłudze. Chociaż nie znalazłem wielu samouczków, myślę, że możesz po prostu przenieść wiele rzeczy z Arduino. Będąc nowicjuszem, mogłem łatwo przenieść port fotorezystora / fotokomórkę i kod z samouczka Arduino.

John Bubriski
źródło
1

Możesz rozważyć opracowanie C w stylu Arduino na STM32 (ARM M3) za pośrednictwem jednego z kilku projektów typu open source. LeafLabs i xduino mają działający sprzęt i łańcuchy narzędzi oparte na Arduino. Korzystam z płytki Maplabs Maple, gdy potrzebuję 32-bitowego mikrokontrolera w porównaniu ze zwykłymi układami Atmega


źródło
1

Możesz spojrzeć na http://www.hpinfotech.ro/html/cvavr.htm, który jest łatwym w użyciu IDE dla Atmela i napisać, że CI użył tego profesjonalnie i jest bardzo dobry, bardziej podobny do poziomu wygody pobierz z IDE jak Visual Studio. Mam Eclipse, aby być trochę niezręcznym w tworzeniu Androida, a nie tak eleganckim, jak kupionym.

Mam Netduino, w którym zaimplementowałem system sterowania Tricopter dla zabawy, który działa w czasie rzeczywistym i działa niezawodnie, napisany w C # z Visual Studio 2010. Debugowanie na urządzeniu jest ogólnie doskonałe, mam automatyczną synchronizację danych za pośrednictwem Wi-Fi i mam mały serwer HTTP w samolocie.

Nacięcie
źródło
0

Używamy .NET Micro Framework w aplikacjach produkcyjnych (precyzyjne urządzenia pomiarowe). To działa dobrze.

Dzisiejsze mikroprocesory osiągnęły stan, w którym można użyć paradygmatu „stwórz-zobacz-profil-zmień-zobacz ...”. Ilość pamięci jest teraz dość duża i tania, więc najprawdopodobniej nie będziesz kumulować się w warunkach braku pamięci.

A jako programista C # wiesz, że odpowiednie profilowanie, aby osiągnąć pożądany warunek, jest lepszym sposobem na życie niż zgadywanie, co jeszcze i bardziej skomplikowane, co powinieneś zrobić podczas tworzenia kodu, aby twój kod (a może nie) był nieco szybszy.

MajesticRa
źródło