C ++ vs. język Arduino?

81

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

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

Mam doświadczenie w gotowych językach, takich jak JavaScript, PHP, i majstrowałem przy językach takich jak Java i Visual Basic. Innymi słowy, znam techniki programowania oraz klasyczną i prototypową orientację obiektową, ale nie mam nic na temat 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 strona pytań i odpowiedzi, która ma pomagać innym, tylko ogólne pytanie przedstawione na początku ma duże znaczenie, ale doceniłbym wszelkie komentarze na temat mojej sytuacji.

Przyjaciel Kim
źródło
16
Unikaj Arduino IDE, ponieważ nie zasługuje na nazwę IDE, jest nawet bardzo kiepskim edytorem: może być dobry dla początkujących i prostych szkiców, ale należy szybko przejść do czegoś lepszego.
jfpoilpret
4
Jest to dość zwięzły podział na to, co rozumie się pod (a co właściwie jest pod maską) „Arduino Programming Language”.
AdjunctProfessorFalcon
10
C++ vs. The Arduino Language?- „Arduino Language” to C ++. Jest trochę wstępnego przetwarzania, aby zaoszczędzić ci robienia prototypów funkcji, ale na pewno jest to C ++.
Nick Gammon
2
Nie ma czegoś takiego jak język arduino. To jest po prostu biblioteka.
Overdrivr
2
Nie tak związane z pytaniem, jak z komentarzami: studio Atmel jest bezpłatne, a IMHO jest lepsze niż studio wizualne do programowania arduino. Obsługuje również wtyczkę Visual Micro, chociaż nie jest wcale konieczne do programowania i debugowania arduinos.
cyberponk

Odpowiedzi:

55

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 wybrać C / C ++. Język arduino jest naprawdę świetny dla początkujących, ale ma pewne ograniczenia (np. Musisz mieć wszystkie pliki w tym samym folderze). I jest to w zasadzie uproszczenie C / C ++ (możesz praktycznie skopiować i wkleić kod arduino do pliku C / C ++, i to zadziała). Ma to również sens, że możesz przejść i używać całkowicie znanego IDE jako eclipse:

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

Początkowo wymaga to nieco więcej konfiguracji i konfiguracji środowiska programistycznego, ale IMHO warto dla programistów z doświadczeniem w dowolnym innym języku.

W każdym razie nie zaszkodzi ci zacząć używać języka arduino i IDE 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.

drodri
źródło
Dziękuję za twoje przemyślenia. Użyję Arduino IDE, aby nauczyć się kontrolować różne elementy sprzętowe, 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ążkami, które znalazłem, polega na tym, że zawierają one tyle, że nie potrzebuję, ponieważ korzystam z małego mikrokontrolera Atmel zamiast z komputera z interfejsem użytkownika.
Przyjaciel Kim
1
Jest przydatna książka „Programowanie C dla Arduino” Juliena Bayle'a. To nie jest język C ++, ale powinien pomóc w zrozumieniu podstawy.
fenix688,
To dobra prośba: krótka i dobra książka z podstawami języka C ++ dla programistów innych języków. Niestety nie mogę podać żadnych rekomendacji, nie znam żadnej dobrej. W rzeczywistości napisałem książkę z praktycznym naciskiem (opracowanie gry wideo) dla moich uczniów, ale jest ona tylko w języku hiszpańskim. Dla dobrej i praktycznej książki w języku C ++ polecam Deitel & Deitel Jak zaprogramować C ++, możesz pominąć wiele zaawansowanych rozdziałów.
drodri
1
C ++ obsługuje funkcje OO, język C nie.
Chris O
1
@FriendofKim Nie do końca to, co miałem na myśli (chociaż technicznie możesz, Due jest wystarczająco szybki, aby obsługiwać oprogramowanie do komunikacji szeregowej bez megabitów i ma w sumie 5 U (S) ARTS, podczas gdy biblioteki Arduino zapewniają tylko 4 ich, ale iirc, karta Due nie zapewnia i tak pinów dla jednego z USART); biblioteki Arduino konfigurują USART 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ż dane wejściowe musiały być traktowane jako surowy strumień bitów, więc żadnych bitów stop / etc.), co również wymagało modyfikacja domyślnej konfiguracji kontrolera PIO.
JAB
48

Teoretycznie ...
Tak naprawdę nie ma języka Arduino. 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. Jeśli nie posiadasz tych funkcji, będziesz musiał bawić się bezpośrednio specjalnymi rejestrami, aby kontrolować wszystko. Tak zazwyczaj wykonuje się programowanie wbudowane. Jest szybki, ale może być trudny do nauczenia się i zrozumienia.

Oprócz funkcji biblioteki dodają alternatywne nazwy dla niektórych typów. Na przykład booleani bytenie są w standardzie C ++. Są one jednak bezpośrednio równoważne z booli unsigned char.

Wszystkie te rzeczy oznaczają, że prawdopodobnie możesz bez trudu przenieść ogólny kod C ++ bezpośrednio na Arduino. Jednak cofnięcie się w drugą stronę może wymagać niewielkiej edycji.

W praktyce ...
Powiedziawszy to wszystko, programowanie w Arduino nie jest dokładnie tym samym, co ogólne programowanie w C ++. Wiele różnic jest jednak 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 Arduino IDE, istnieją różne denerwujące dziwactwa i ograniczenia dotyczące konfiguracji kodu. Istnieją obejścia we wszystkich przypadkach (o ile mi wiadomo), ale czasami są dość frustrujące.

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

Peter Bloomfield
źródło
25

Jakie są zalety C ++ w porównaniu z językiem Arduino podczas korzystania z Arduino? Mam doświadczenie w gotowych językach, takich jak JavaScript, PHP, i majstrowałem przy językach takich jak Java i Visual Basic.

Po pierwsze, kompilator Arduino / IDE akceptuje C i C ++ bez zmian. W rzeczywistości wiele bibliotek jest napisanych w C ++. Znaczna część podstawowego systemu nie jest zorientowana obiektowo, ale może tak być.

Zatem „językiem arduino” jest C ++ lub C.

C ++ nie jest odśmiecany. 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 to znajdziesz ledi inie rób ani nie wyciekaj, bez względu na to, ile razy dzwonisz blinkTimes.

Gdyby ibyła klasą, podobnie zostałaby usunięta po zakończeniu funkcji. Tak długo, jak nie używasz newpodobnych funkcji alokacji pamięci do tworzenia nowych obiektów, nie musisz się martwić o wycieki.

Nadal może zabraknąć pamięci, jeśli tworzyć ogromne klas i używać ich sporo w funkcji głęboko zagnieżdżonych, ale w ogóle nie zamierzamy wpaść w kłopoty, dopóki nie rozpocznie kontaktach z newi freefunkcje.

Jeśli używasz new, będziesz musiał zadzwonić deletew odpowiednim czasie. C ++, a przez to Arduino, nie ma automatycznego czyszczenia pamięci, musisz jawnie zarządzać własną pamięcią.

Adam Davis
źródło
1
Ok, jeśli obiekty tworzone za pomocą instancji (z nowymi) nie są zbierane, muszę się tego nauczyć. Podejrzewam, że każda książka o C ++ to obejmie. Dziękuję za dobrą odpowiedź!
Przyjaciel Kim
14

Językiem Arduino jest C ++, ale różni się bardzo od większości odmian C ++. Język Arduino ma wbudowane wiele abstrakcji, szczególnie w interfejsach sprzętowych, co czyni go bardzo łatwym w użyciu. Jeśli masz doświadczenie w Javie, C i C ++ powinny być bardzo podobne.

Główne różnice między Arduino i C ++ dotyczą pamięci. Zwykle nowoczesny komputer ma ponad 2 GB pamięci RAM, a Arduino Uno ma 2 kB (1 milion razy mniej). Arduino używa także instrukcji 8-bitowych zamiast 32-bitowych instrukcji używanych przez komputer. Wpłynie to głównie na ilość informacji, które można przechowywać w zmiennej.

Jeśli jesteś bardzo nowy w świecie Arduino, powinieneś poszukać samouczka, ponieważ istnieje wiele dobrych.

Doktor
źródło
Wspominasz o pamięci. Mam Due, który ma 96 KB pamięci RAM. Ale ostatnią rzeczą, której chcę, to awaria helikoptera z powodu wycieku pamięci (posiadanie bardzo drogiego aparatu zamontowanego na helikopterze).
Przyjaciel Kim
Czy pamięć w C ++ jest obsługiwana automatycznie (podobnie jak moduł czyszczenia pamięci w Javie), jeśli nie podano inaczej?
Przyjaciel Kim
2
Standard C ++ nie gwarantuje żadnych rozmiarów pamięci - c ++ działa już na wbudowanym sprzęcie bez modyfikacji.
Michael Thorpe
2
Opisujesz różnice między platformami sprzętowymi, a nie C ++.
Cybergibbons,
5
@FriendofKim W C ++ istnieją dwa różne sposoby tworzenia instancji zmiennych / obiektów. Jeśli utworzysz je lokalnie (np. int blah = 5;), Zostaną one automatycznie zniszczone, gdy wyjdą poza zakres (tj. Na końcu pętli lub funkcji). Jeśli jednak utworzysz je na stosie (np. int *blah = new int(5);), Musisz je zwolnić samodzielnie. Jednak zwykle nie jest rozsądne wykorzystywanie danych sterty w programowaniu osadzonym.
Peter Bloomfield
14

--- Aktualizacja 170412
Oryginalną odpowiedź napisałem trzy lata temu z perspektywy istnienia wyraźnego „Arduino C ++”. Językiem używanym w IDE jest standardowy C ++, ponieważ jest on implementowany przez kompilator GNU C ++. Wkraczają „pozorne” różnice, ponieważ IDE wykona wstępne przetwarzanie, aby pomóc nowym użytkownikom języka uniknąć kilku „gotcha”, wypełniając niektóre #include, f / ex. Ale możesz - i ja to robię - napisać do niego poprawny C ++ i uzyskać dokładnie to, czego oczekujesz.
--- koniec aktualizacji

Ogranicz korzystanie z funkcji języka C ++ do tych, których implementację w pełni rozumiesz. Istnieje kilka funkcji, które kompilują się do kodu bardziej wymagającego zasobów, niż wynika to z czytania kodu źródłowego. Opcjonalnie wygenerowana lista .lss (scalone źródło i zestaw) może dać ci dobry wgląd w to, co zrobił kompilator C ++, kiedy nie patrzyłeś.

Na twoje pytanie dotyczące pamięci: C ++ nie śmieci. Języki oparte na stosach, takie jak C i C ++, przydzielają tymczasowe miejsce przechowywania na stosie dla zmiennych automatycznych przy wprowadzaniu funkcji, które następnie są zwalniane po powrocie funkcji, ale nie jest to prawdziwe odśmiecanie. Obiekty utworzone w pamięci sterty lub globalnej są aktywne do momentu ich jawnego usunięcia. Upewnij się, że wiesz, gdzie, kiedy i jak długo będą tworzone różnego rodzaju obiekty. Naprawdę nie chcesz, żeby twoje obiekty do kodowania newi delete-ing chciały nie chcąc. Zostaną one wbudowane w pamięć sterty, fragmentując ją i powodując, że wyrósł na stos. Wtedy twój kod - i twój miły 'copter' ulegnie awarii.

C nie mniej dla ciebie więc można zrobić 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ądne wybranie dodatkowych funkcji C ++, jeśli są to dwie opcje:

[Oryginalna odpowiedź] - C ++ jest znormalizowanym językiem. Jest szeroko wdrażany w wielu środowiskach, w tym w systemach wbudowanych, dlatego jest bardziej gruntownie przetestowany niż bardzo podobny do C ++ język „Arduino”. Jest to szczególnie ważne w przypadku aplikacji o znaczeniu krytycznym / bezpieczeństwa, takich jak planowane. Rozbił kod oznacza rozbity helikopter, a nawet jeśli to nie boli kogoś, że będzie złamać drogie maszyny.

  • Standardowo C ++ jest przenośny. Potrzebujesz zaktualizować procesor? Wszystko oprócz kodu specyficznego dla krzemu przeniesie się do nowego. Chcesz zmienić zestaw narzędzi, system programistyczny, system operacyjny? C ++ będzie obsługiwany wszędzie. Chociaż Arduino IDE będzie działało wszędzie tam, gdzie obsługiwana jest Java, jest to jedyne narzędzie, które korzysta z Arduino C ++ i jest to bardzo ograniczone narzędzie. Jeśli chcesz korzystać z Eclipse, narzędzi AVR, chodzić boso w wierszu poleceń, rozwijać w Emacsie lub w innym preferowanym środowisku, obsługiwane będzie standardowe C ++.

  • Arduino IDE robi rzeczy za twoimi plecami - w szczególności # zawiera pliki .h, kiedy myśli, że ich potrzebujesz. Nawet jeśli jest to poprawne, naprawdę chcesz napisać, a przynajmniej zobaczyć i zrozumieć wszystko, co kompilator zobaczy. Języki programowania nie są tworzone dla komputerów (komputery jedzą kawałki na śniadanie); są stworzone dla ludzi, w szczególności osób śledzących cię w ramach projektu, z których najważniejszym może być ... ty !, kiedy 6 miesięcy po napisaniu modułu musisz wrócić, aby go ulepszyć, lub więcej prawdopodobnie napraw to. Naprawdę chcesz widzieć wszystko, co widzi kompilator.

JRobert
źródło
2
To NAPRAWDĘ dobra odpowiedź. Wydaje się jasne, że podoba Ci się C ++ i że ja też powinienem! ... Ale tak na poważnie, przejdę do C ++, gdy tylko zrozumiem, jak działa „komunikacja” z różnymi czujnikami itp.
Przyjaciel Kim
Czy znasz jakieś dobre książki na ten temat? (Odpowiednie dla mnie, który programuję od lat w innych językach i potrzebuję tylko „wbudowanej części” C ++.)
Przyjaciel Kim
Czy uważasz, że Accelerated C ++ to dobra książka do tego?
Przyjaciel Kim
2
Chciałbym ci pomóc z „właściwą” książką, ale przyszedłem do C ++ z dużą ilością C za mną, a język programowania C Kernighana i Ritchiego wciąż jest moją ulubioną książką (kiepska gra słów) na wszystko, co nie jest jawnie C ++ oraz Ellis & Stroustrup's The Annotated C ++ Reference Manual for C ++. Ale pisząc na sprzęcie, dobrze jest spojrzeć na niektóre biblioteki urządzeń udostępnione przez użytkowników w Arduino.cc . Zacznij od poprawiania portów we / wy za pomocą funkcji pinMode (), digitalWrite () i digitalRead (), a następnie ich analogowych odpowiedników we / wy, a ostatecznie ...
JRobert
1
... planujesz pisać bezpośrednio do rejestrów I / O w celu poprawy prędkości i ilości miejsca w pamięci. Programy takie jak blinky.cpp i hello.cpp są dobrym miejscem, aby zacząć bawić się sprzętem. Dodaj prosty multimetr i kilka diod LED z odpowiednimi opornikami ograniczającymi prąd przylutowanymi na stałe do jednej nogi i powinieneś być w stanie zobaczyć prawdziwe, choć proste, wyniki swoich wysiłków. Następnie przeczytaj arkusze danych dla dowolnego interesującego Cię sprzętu, aby dowiedzieć się, jakie sygnały możesz odczytać / zapisać na nich, aby je odtworzyć. Czujniki temperatury są łatwe w obsłudze i czy nie każdy potrzebuje rejestratora lodówki? Baw się dobrze!
JRobert
10

Z mojego doświadczenia wynika, że ​​najlepiej jest unikać nowych i usuwać je na komputerach z ograniczoną pamięcią.

  • Samo zarządzanie pamięcią wykorzystuje cenne miejsce na program i pamięć RAM
  • Wektory ISR są ustawiane przy kompilacji tme. Wystąpienie klasy ISR w czasie wykonywania jest trudne (niemożliwe?)
  • Ogólnie podczas kompilacji będziesz wiedział, jakich instancji klasy potrzebujesz - np. Debugerów z 3 przyciskami, sterownika ekranu i 2-liniowego sterownika ekranu
  • Zarządzanie pamięcią wprowadza nieznane opóźnienia przy użyciu nowego lub usuwania.

Mogą istnieć przypadki, w których uzasadnione jest użycie dynamicznej budowy i niszczenia instancji, ale podejrzewam, że są rzadkie.

kiwiron
źródło
Będąc całkowicie nowym użytkownikiem C ++, mam kolejne pytanie dotyczące STD. Czy mądrze jest używać pamięci? Jeśli nie, jak można go dodać (Eclipse)? Skonfigurowałem kompilator AVR i działa dobrze.
Przyjaciel Kim
1
Wszystko, co mówisz, jest poprawne, ale nie rozumiem, jak to jest odpowiedź na pytanie OP. newi deletesą również dostępne w Arduino IDE.
jfpoilpret
To nie jest odpowiedź, ale bardzo pomocne informacje, które naprawdę doceniam.
Przyjaciel Kim
8

Jak wspomniano w kilku odpowiedziach, jeśli ogólnie programujesz system wbudowany, powinieneś unikać nowego, chyba że zarządzasz własną stertą pamięci i naprawdę wiesz, jakie będą cykle życia obiektu. Zmienne alokacji statycznej lub stosu są znacznie bezpieczniejsze. To powiedziawszy, jedną z powszechnych sztuczek zarządzania takimi rzeczami, jak bufory o zmiennej długości przydzielane na czas trwania funkcji, jest posiadanie zmiennej automatycznej (na stosie), która jest obiektem, który wywołuje nowy w swoim konstruktorze, a następnie umieszcza usunięcie w destruktorze więc gdy obiekt wykracza poza zasięg, bufor jest zwalniany z powrotem na stos. Ponownie, jest to zwykle ograniczone zastosowanie w małych mikroskach, ale jest to fajny wzór do zapamiętania.

bd2357
źródło
6

Oprócz powyższych komentarzy chciałbym jeszcze bardziej podkreślić problemy z działającą pamięcią RAM, które masz na płytach Arduino, szczególnie z Uno (i innymi, które mają ten sam mikrokontroler). Niedawno napisałem prostą grę Space Invaders działającą na matrycy LED 32x32 i wielokrotnie napotykałem problemy spowodowane niską pamięcią.

Uno ma tylko 2048 bajtów pamięci RAM. Biblioteka mojej matrycy zajęła ponad 3/4 tej wartości, pozostawiając mi około 400 bajtów na grę. Ponieważ moim zamiarem jest „uaktualnić” projekt w pewnym momencie, aby uruchomić wiele gier z tym samym programem w oparciu o mocniejszy Due, zaprojektowałem kod z zasadami OO i dużym dziedzictwem klasowym. (Klasa gry została odziedziczona z wirtualną aktualizacją i losowaniami, wszystkie elementy gry zostały odziedziczone).

Prawie zabrakło mi pamięci po prostu dodając najeźdźców. Próbowałem zaoszczędzić pamięć poprzez bit-fielding ich zmiennych składowych, ale zabrakło mi ponownie przy dodawaniu obiektów shield. Po nieco więcej skrobaniu zabrakło mi dodawania bomb / pocisków. W tym momencie przeszukałem kod i usunąłem wszystkie „wirtualne” tagi (wszystkie prototypy moich klas są zbudowane z fragmentu Visual Assist, a wszystkie destruktory są wirtualne automatycznie). To natychmiast zmniejszyło o połowę zużycie pamięci, uwalniając wystarczająco dużo, aby móc dokończyć kod.

Krótko mówiąc, wynikiem końcowym jest kod C ++, który tak naprawdę nie korzysta z żadnych funkcji C ++. Równie dobrze możesz trzymać się C i być bardzo świadomym wykorzystania pamięci. Jeśli nie przekroczysz 2 KB, nie uzyskasz żadnej pomocy - szczególnie jeśli korzystasz z alokacji dynamicznej, kod po prostu przestaje działać i pozostajesz przez chwilę drapiąc się w głowę, dopóki nie rozważysz możliwości przepełnienia pamięci.

PS - Zmienne pola bitowego są złe. Bardzo źle. Oprócz dodawania narzutu przetwarzania straciłem kontrolę nad tym, ile razy dodałem nowy stan do gry, ale kod nie działał i nie mogłem zrozumieć, dlaczego. Moja zmienna stanu nie była wystarczająco szeroka, aby pomieścić nową wartość stanu, więc otrzymałem jakiś nieoczekiwany stan.

Mick Waites
źródło
4

Językiem Arduino jest C ++ (aczkolwiek zwykle implementowany w stylu bardziej podobnym do „C z klasami”, co w rzeczywistości jest dość powszechne w świecie mikrokontrolerów systemów wbudowanych). Koniec opowieści. Wystarczy, że ludzie myślą, że to już inny język! Wykorzystuje kompilator g ++.

Dowód:

Włącz pełne wyjście podczas kompilacji w Preferencjach i przesyłaj, a nauczysz się dużo po prostu czytając te wiersze.

Oto kilka dodatkowych informacji:

Moje własne słowa:

Kod Arduino to C ++. Podstawowe funkcje Arduino to po prostu zestaw klas i bibliotek C ++, których można używać. Jest budowany i kompilowany przy użyciu kompilatora GNU gcc / g ++ . Twoje funkcje setup () i loop () są po prostu umieszczane w obowiązkowej funkcji main () ( właśnie tutaj - zauważ, że plik to „main.cpp”, który jest plikiem źródłowym w C ++) automatycznie dla ciebie i jest kilka dodatkowych wstępne przetwarzanie wykonane, aby upewnić się, że jest to poprawny program C ++ (np. skanowanie wszystkich prototypów funkcji [aka: deklaracje] dla ciebie, abyś mógł użyć funkcji, nawet jeśli jej prototyp pojawi się później w pliku .ino). Jednak duża część Arduino jest napisana w „stylu C”, dlatego wymaga # extern "C" {}otaczających go nawiasów klamrowych, aby zapobiec używaniu C ++wywołanie funkcji „zmiany nazwy” (znanej również jako „dekorowanie nazwy / dekorowanie nazwy” ) do funkcji C implementowanych przez AVR-libc , która jest implementacją C dla ATmega328 i innych mikrokontrolerów architektury AVR .

Słowa Arduino:

Czy mogę zaprogramować tablicę Arduino w C?
W rzeczywistości już jesteś; język Arduino to tylko zestaw funkcji C / C ++, które można wywołać z kodu. Twój szkic podlega drobnym zmianom (np. Automatyczne generowanie prototypów funkcji) a następnie jest przekazywany bezpośrednio do kompilatora C / C ++ (avr-g ++). Wszystkie standardowe konstrukcje C i C ++ obsługiwane przez avr-g ++ powinny działać w Arduino. Aby uzyskać więcej informacji, zobacz stronę procesu kompilacji Arduino . ”

Źródło: https://www.arduino.cc/en/Main/FAQ#toc13

Kiedy używać biblioteki Arduino zamiast czystego C lub C ++?

Dlatego używaj języka Arduino, w którym to upraszcza, i pisz własne funkcje, w których potrzebujesz większej specjalizacji. Radzę jednak szybko uciec od IDE do pisania kodu - użyj go do kompilacji. Ustaw preferencje IDE, aby używały „Edytora zewnętrznego”. Następnie użyj profesjonalnego edytora kodu źródłowego / IDE, takiego jak Sublime Text 3 , Atom , Visual Studio Code lub Eclipse CDT, aby napisać kod. Następnie możesz kliknąć z powrotem do Arduino IDE, aby skompilować i przesłać. Jeśli korzystasz z Eclipse, możesz to zrobić w Eclipse (zobacz inne odpowiedzi tutaj i zobacz artykuł o Eclipse na placu zabaw Arduino ), więc zastanów się również nad użyciem tych technik.

Gabriel Staples
źródło