C ++ kontra język Arduino?

Jakie są zalety każdego języka podczas korzystania z Arduino?

Myślę, że to dobre ogólne pytanie, ale ja „Dodam trochę o tym, dlaczego pytam, czy ktoś chce mi dać wskazówkę.

Mam doświadczenie w językach wstępnie przetworzonych, takich jak JavaScript, PHP, i bawiłem się takimi językami jak Java i Visual Basic. Innymi słowy, znam techniki programowania i zarówno klasyczną, jak i prototypową orientację obiektową, ale nie znam się na bezpośredniej komunikacji ze sprzętem.

Robię oktokopter i myślę, że podejście obiektowe będzie najłatwiejsze. (Oprogramowanie będzie miało bardzo wiele funkcji …) Jednak nigdy nie pisałem w C ++.

Ponieważ jest to Q & Witryna, która przypuszczalnie aby pomóc innym, tylko ogólne pytanie przedstawione na początku ma duże znaczenie, ale będę wdzięczny za wszelkie komentarze dotyczące mojej sytuacji.

Komentarze

  • Unikaj Arduino IDE, ponieważ nie zasługuje na swoją nazwę IDE, jest nawet bardzo słabym edytorem: może być dobry dla początkujących i prostych szkiców, ale należy szybko przejść do czegoś lepszego.
  • To jest dość zwięzłe zestawienie tego, co oznacza (i co właściwie ' kryje pod maską) ” Programowanie Arduino Język. ”
  • C++ vs. The Arduino Language? – The ” Język Arduino ” to C ++. Jest trochę wstępnego przetwarzania, aby zaoszczędzić ci wykonywania prototypów funkcji, ale zdecydowanie jest to C ++.
  • Nie ma czegoś takiego jak język arduino. To po prostu biblioteka.
  • Nie tak związane z kwestią co do komentarzy: studio Atmel jest darmowe i IMHO jest lepsze niż studio wizualne do programowania arduino. Obsługuje również wtyczkę Visual Micro, chociaż nie jest w ogóle konieczna do programowania i debugowania arduinów.

Odpowiedź

Moje osobiste doświadczenie jako profesora (programowanie, mechatronika) jest takie, że jeśli masz wcześniejsze doświadczenie w programowaniu i znasz pojęcia takie jak OOP, lepiej jest wybrać C / C ++. Język arduino jest naprawdę świetny dla początkujących, ale ma pewne ograniczenia (np. Musisz mieć wszystkie swoje pliki w tym samym folderze). I jest to w zasadzie uproszczenie C / C ++ (możesz praktycznie skopiować & wkleić kod arduino do pliku C / C ++ i zadziała). Ma to również sens, że możesz użyć w pełni znanego środowiska IDE jako eclipse:

http://playground.arduino.cc/Code/Eclipse

Początkowo potrzeba trochę więcej instalacji i konfiguracji twojego środowiska deweloperskiego, ale IMHO jest tego warte dla programistów z doświadczeniem w jakimkolwiek innym języku.

W każdym przypadku, nie zaszkodzi rozpoczęcie używania języka arduino i środowiska IDE dla arduino przez kilka dni, aby zapoznać się ze sprzętem arduino, a następnie przejść do C / C ++ z Eclipse, aby naprawdę rozwinąć swój projekt.

Komentarze

  • Dziękuję za przemyślenia. ' Użyję Arduino IDE, aby nauczyć się sterować różnymi urządzeniami elementy, takie jak czujniki i ekrany LCD itp. Następnie ' przejdę do C ++, aby stworzyć oprogramowanie dla oktokoptera. Czy znasz dobrą i krótką książkę dla osób znających inne języki? ” problem ” z wieloma książki, które ' znalazłem, zawierają tak dużo, że ' nie potrzebuję, ponieważ ' m na małym mikrokontrolerze Atmel zamiast na komputerze z interfejsem użytkownika.
  • Jest fajna książka ” C Programming for Arduino ” autorstwa Juliena Bayle, co jest przydatne. Jest to język C, a nie C ++, ale powinien pomóc ci zrozumieć podstawy.
  • To dobra prośba: krótka i dobra książka z podstawami C ++ dla programistów innych języków. Przepraszam, nie mogę podać żadnych zaleceń, nie znam żadnej dobrej. Faktycznie, napisałem książkę dla moich uczniów, skupiającą się na praktyce (stworzyć grę wideo), ale jest ona tylko w języku hiszpańskim. Aby uzyskać dobrą i praktyczną książkę o C ++, poleciłbym Deitel & Deitel Jak programować C ++, możesz pominąć wiele zaawansowanych rozdziałów.
  • C ++ obsługuje funkcje OO, język C nie.
  • @FriendofKim Nie do końca to miałem na myśli (chociaż technicznie możesz to zrobić, Due jest wystarczająco szybkie, aby obsługiwać rozwiązanie programowe do komunikacji szeregowej bez megabitów i ma 5 U (S) ARTS w sumie, podczas gdy biblioteki Arduino zapewniają tylko 4 z nich, ale iirc płyta Due i tak nie zapewnia pinów dla jednego z USART); Biblioteki Arduino konfigurują USARTy do korzystania z trybu asynchronicznego, ale potrzebowałem synchronizacji z prędkością do 6 Mb / s (i musiałem używać trybu SPI, ponieważ wejście musiało być traktowane jako surowy strumień bitów, więc nie ma bitów stopu / itp.).), co obejmowało również modyfikację domyślnej konfiguracji kontrolera PIO.

Odpowiedź

Teoretycznie …
Tak naprawdę nie ma języka Arduino jako takiego. To naprawdę tylko C ++ z niektórymi bibliotekami specyficznymi dla domeny. Dodają one różne funkcje, takie jak funkcje, które można wywołać w celu sterowania sprzętem. Gdybyś nie miał tych funkcji, musiałbyś bezpośrednio bawić się specjalnymi rejestrami, aby kontrolować wszystko. Tak zwykle robi się programowanie osadzone. Jest szybkie, ale może być dość trudne do nauczenia się i zrozumienia.

Oprócz funkcji, biblioteki dodają alternatywne nazwy dla niektórych typów. Na przykład boolean i byte nie są w standardzie C ++. Jednak są one bezpośrednio równoważne z bool i unsigned char.

Wszystkie te rzeczy oznaczają, że prawdopodobnie możesz przenosić ogólne Kod C ++ bezpośrednio do Arduino bez trudności. Jednak cofnięcie się w drugą stronę może wymagać niewielkiej edycji.

W praktyce …
Mimo wszystko programowanie dla Arduino nie jest dokładnie tym samym, co ogólne programowanie w C ++. Jednak wiele różnic jest wspólnych dla wszystkich programów wbudowanych (takich jak ograniczona pamięć i moc obliczeniowa).

Warto również zauważyć, że jeśli używasz oficjalnego środowiska Arduino IDE, istnieje wiele irytujących dziwactw i ograniczeń dotyczących konfiguracji kodu. We wszystkich przypadkach (o ile wiem) istnieją obejścia, ale czasami są dość frustrujące.

Aby uzyskać pełną elastyczność, użyj IDE innej firmy (takiego jak Eclipse) z wtyczką do obsługi Arduino. To powinno dać ci wszystkie zalety C ++ wraz z bibliotekami Arduino.

Komentarze

Odpowiedź

Jakie są zalety języka C ++ w porównaniu z językiem Arduino podczas korzystania z Arduino? Mam doświadczenie w językach wstępnie przetworzonych, takich jak JavaScript, PHP, i bawiłem się językami takimi jak Java i Visual Basic.

Po pierwsze, kompilator / IDE Arduino akceptuje C i C ++ takie, jakie są. W rzeczywistości wiele bibliotek jest napisanych w C ++. Znaczna część bazowego systemu nie jest zorientowana obiektowo, ale może być.

Zatem „język arduino” to C ++ lub C.

C ++ nie jest bezużyteczny. Zarządza zmiennymi w zakresie – jeśli napiszesz:

int led = 13; void blinkTimes(int value) { int i; for(i=0;i<value;i++) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } } 

Wtedy „znajdziesz że led i i nie rosną ani nie wyciekają, bez względu na to, ile razy dzwonisz pod numer blinkTimes.

Jeśli i byłby klasą, podobnie zostałaby usunięta po zakończeniu funkcji. O ile nie używasz new lub podobne funkcje alokacji pamięci do tworzenia nowych obiektów, nie będziesz musiał martwić się o wycieki.

Jeśli utworzysz ogromne klasy i używaj ich wielu w głęboko zagnieżdżonych funkcjach, ale generalnie nie będziesz mieć problemów, dopóki nie zaczniesz zajmować się new i free.

Jeśli używasz new, wtedy „będziesz musiał zadzwonić pod numer delete w odpowiednich momentach. C ++, a co za tym idzie, Arduino, nie ma automatycznego czyszczenia pamięci, musisz jawnie zarządzać własną pamięcią.

Komentarze

  • OK, jeśli utworzono obiekty (z nowym) nie ' zbierane śmieci, ' też muszę się tego nauczyć. Przypuszczam, że każda książka o C ++ to omówi. Dziękuję za dobrą odpowiedź!

Odpowiedź

— Aktualizacja 170412
Napisałem oryginał odpowiedz trzy lata temu z punktu widzenia istnienia odrębnego „Arduino C ++”. Językiem używanym w IDE jest standardowy C ++, ponieważ jest zaimplementowany przez kompilator GNU C ++. Pojawiają się „pozorne” różnice, ponieważ IDE wykona pewne wstępne przetwarzanie, aby pomóc nowicjuszom w tym języku uniknąć kilku problemów, wypełniając niektóre #includes, f / ex. Ale możesz – i ja to robię – napisać do niego poprawny C ++ i uzyskać dokładnie to, czego oczekujesz.
— zakończ aktualizację

Ogranicz korzystanie z funkcji języka C ++ do tych, których implementacji Ty całkowicie rozumiem. Istnieją pewne funkcje, które kompilują się do kodu wymagającego większej ilości zasobów, niż jest to oczywiste po odczytaniu kodu źródłowego. Opcjonalnie wygenerowany list .lss (scalone źródło i zespół) może dać ci dobry wgląd w to, co kompilator C ++ zrobił, gdy nie patrzyłeś.

Do twojego pytania o pamięć: C ++ nie zbiera śmieci. Języki oparte na stosie, takie jak C i C ++, przydzielają tymczasowe miejsce na stosie dla automatycznych zmiennych przy wejściu do funkcji, które są następnie zwalniane, gdy funkcja zwraca, ale nie jest to prawdziwe zbieranie elementów bezużytecznych. Obiekty utworzone w pamięci sterty lub pamięci globalnej istnieją do momentu ich jawnego usunięcia. Upewnij się, że wiesz, gdzie, kiedy i na jak długo będą tworzone różne rodzaje obiektów. Naprawdę nie chcesz, aby Twój kod był new -ing i delete obiektami -ing, chcąc nie chcąc. Zostaną one wbudowane w pamięć sterty, pofragmentowanie go i spowodowanie, że dorośnie do stosu. Wtedy twój kod – i twój fajny „helikopter – ulegną awarii.

C robi mniej dla ciebie, więc może robić mniej do ciebie. To nie jest zły wybór. C z kilkoma funkcjami C ++ może być jeszcze lepszym wyborem, biorąc pod uwagę rozsądny wybór dodatkowych funkcji. C ++, jeśli masz dwie możliwości:

[Oryginalna odpowiedź] – C ++ to język ustandaryzowany Jest szeroko stosowany w wielu środowiskach, w tym w systemach wbudowanych, i dlatego jest dokładniej testowany niż język „Arduino” bardzo podobny do języka C ++. Jest to szczególnie ważne w przypadku aplikacji o znaczeniu krytycznym / bezpieczeństwa, takich jak planujesz. Uszkodzony kod oznacza rozbity „helikopter” i nawet jeśli nikomu nie zaszkodzi, zepsuje drogie urządzenie.

  • C ++ jest standardem, ponieważ jest przenośny. Chcesz zaktualizować swój procesor? Wszystko oprócz kodu specyficznego dla krzemu zostanie przeniesione na nowy. Chcesz zmienić zestaw narzędzi, system programowania, system operacyjny hosta? C ++ będzie obsługiwane wszędzie. Chociaż Arduino IDE będzie działać wszędzie tam, gdzie obsługiwana jest Java, jest to jedyne narzędzie, które używa Arduino C ++ i jest również bardzo ograniczone l. Jeśli chcesz używać Eclipse, narzędzi AVR, chodzić boso po linii poleceń, programować w Emacsie lub w jakimkolwiek innym środowisku, które preferujesz, obsługiwane będzie standardowe C ++.

  • Arduino IDE robi rzeczy za Twoimi plecami – w szczególności zawiera pliki .h, gdy uważa, że ich potrzebujesz. Nawet jeśli jest poprawna, naprawdę chcesz napisać lub przynajmniej zobaczyć i zrozumieć wszystko, co zobaczy kompilator. Języki programowania nie są stworzone dla komputerów (komputery zjadają kawałki na śniadanie); są stworzone dla ludzi, szczególnie tych, którzy śledzą Cię w projekcie, z których najważniejszy może być … Ty !, kiedy 6 miesięcy później napisałeś moduł, musisz wrócić, aby go ulepszyć lub, co bardziej prawdopodobne, naprawić. Naprawdę chcesz mieć możliwość zobaczenia wszystkiego, co widzi kompilator.

Komentarze

  • To NAPRAWDĘ dobra odpowiedź . Wydaje się jasne, że lubisz C ++ i że ja też to lubię! … Ale poważnie, ' przeskoczę od razu do C ++, gdy tylko ' zrozumiem, jak ” komunikacja ” z różnymi czujnikami itp. działa.
  • Czy znasz jakieś dobre książki na ten temat? (Odpowiedni dla mnie, który od lat programuje w innych językach i potrzebuje tylko ” części osadzonej ” C ++.)
  • Czy uważasz, że Accelerated C ++ to dobra książka do tego?
  • Chciałbym móc Ci pomóc z ' dobra ' książka, ale doszedłem do C ++ z całą masą C za mną i Kernighanem & Ritchie ' s Język programowania C nadal jest moją książką (zła kalambur) na wszystko, co nie jest jawnie C ++, a Ellis & Stroustrup ' s Podręcznik referencyjny języka C ++ z komentarzami dla języka C ++. Ale jeśli chodzi o pisanie na sprzęt, ' dobrze zrobisz, jeśli przejrzysz niektóre biblioteki urządzeń przesłane przez użytkowników pod adresem Arduino.cc . Zacznij od dostrajania portów we / wy za pomocą funkcji pinMode (), digitalWrite () i digitalRead (), a następnie ich analogowych odpowiedników we / wy, a ostatecznie …
  • … planuj pisać bezpośrednio do Rejestry we / wy dla poprawy szybkości i przestrzeni pamięci. Programy takie jak blinky.cpp i hello.cpp są dobrym miejscem do rozpoczęcia zabawy ze sprzętem. Dodaj prosty multimetr i kilka diod LED z odpowiednimi rezystorami ograniczającymi prąd na stałe przylutowanymi do jednej nogi, a powinieneś być w stanie zobaczyć prawdziwe, jeśli proste, wyniki swoich wysiłków. Następnie przeczytaj arkusze danych dowolnego sprzętu, który Cię interesuje, aby dowiedzieć się, jakie sygnały możesz odczytać / musisz zapisać, aby je odtworzyć. Czujniki temperatury są łatwe w użyciu i czy ' nie każdy potrzebuje rejestratora lodówki? Baw się dobrze!

Odpowiedź

Arduino to C ++, ale tak bardzo różni się od większości odmian C ++.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *