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?
arduino
.net-micro-framework
Chris B. Behrens
źródło
źródło
Odpowiedzi:
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:
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!
źródło
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.
źródło
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.
źródło
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.
źródło
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
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.
źródło
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
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.
źródło
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.
źródło