--- 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 new
i 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.