Chciałbym pisać swoje szkice, aby móc je budować / przesyłać za pomocą Arduino IDE lub opcjonalnie za pomocą GCC i makefile.
Wiem o dołączaniu deklaracji funkcji na górze, ale czy jest coś jeszcze, aby mój szkic mógł zostać uznany za prawidłowy C ++ przez mój kompilator?
Aktualizacja 1
Zrozumienie, co Arduino IDE robi z plikami .ino i .pde, jest w porządku, ale nie ma związku z moim pytaniem, więc nie jest to duplikat. Chcę wiedzieć, jak napisać program, który jest uważany za poprawny zarówno przez Arduino IDE, jak i g ++.
Oficjalny (?) Plik makefile dostępny tutaj wyjaśnia, co zrobić, jeśli używasz pliku makefile zamiast IDE:
# The Arduino environment does preliminary processing on a sketch before
# compiling it. If you're using this makefile instead, you'll need to do
# a few things differently:
#
# - Give your program's file a .cpp extension (e.g. foo.cpp).
#
# - Put this line at top of your code: #include <WProgram.h>
#
# - Write prototypes for all your functions (or define them before you
# call them). A prototype declares the types of parameters a
# function will take and what type of value it will return. This
# means that you can have a call to a function before the definition
# of the function. A function prototype looks like the first line of
# the function, with a semi-colon at the end. For example:
# int digitalRead(int pin);
... ale to nie wyjaśnia, jak używać zarówno IDE, jak i makefile.
Aktualizacja 2
Niedawno znalazłem PlatformIO, które nie odpowiada bezpośrednio na to pytanie, ale automatyzuje dużą część procesu (generuje dla Ciebie pliki Scons) i do tej pory wolę przepływ pracy niż zarówno Arduino IDE, jak i źródło + makefile. Dobre wsparcie ze strony autorów.
źródło
Odpowiedzi:
Według gcc / g ++ Myślę, że odnosi się to w szczególności do avr-gcc / avr-g ++. Twój kod arduino prawdopodobnie nie będzie uważany za prawidłowy kod C / C ++, ponieważ gcc spróbuje skompilować się z twoim komputerem jako systemem docelowym. Wiele makr w „WProgram.h” będzie odnosić się do niedostępnej pamięci w systemie docelowym.
Pod warunkiem, że dołączasz plik nagłówka „WProgram.h” i budujesz swój kod przy użyciu powyższego pliku Arduino Makefile (który używa avr-g ++ nie g ++), twoje pliki cpp powinny się poprawnie skompilować i połączyć. Podobnie, będziesz mógł otworzyć swój kod Arduino w IDE i tam zweryfikować swój kod. IDE umieszcza w tobie plik „WProgram.h”, więc technicznie byłby zawarty dwukrotnie. Jednak osłony dołączania zapobiegną kompilacji duplikatów kodu.
źródło
Zasadniczo musisz podać funkcje
setup()
iloop()
, są one tylko opakowaniami IDE:Działa to zarówno w IDE, jak i w wierszu poleceń. Gdy określisz Board i SerialPort w IDE, musisz także podać oba w Makefile. Skończysz z dwiema konfiguracjami.
Wiele osób opuszcza IDE, ponieważ wolą korzystać z różnych edytorów lub mają więcej opcji konfiguracyjnych, ustawiając przełączniki kompilatora i konsolidatora.
Aby było to naprawdę łatwe, możesz użyć Arduino Makefile . Dzisiaj wystąpił z 347 gwiazdkami.
Oto przykład Makefile:
Pliki „* .ino” nie muszą być zmieniane, a
Makefile
plik należy umieścić w tym samym katalogu.Tymczasem wolę
Makefile
sposób, ale nadal używam IDE do małych projektów.źródło
Zobacz: Jak uniknąć dziwactwa wstępnego przetwarzania pliku szkicu IDE .
Bez względu na chwilę, jak będzie wyglądał plik Makefile, prostą odpowiedzią na twoje pytanie, jak omówiono w powyższym linku, jest umieszczenie wszystkiego w kartach .cpp i .h w IDE i pozostawienie głównego „szkicu” (.ino plik) puste. To nadal będzie się kompilować pod IDE, a zatem będzie to również normalny C ++.
Upewnij się, że zaczynasz swoje pliki .cpp za pomocą:
Jeśli korzystasz z bibliotek (np. SPI), musisz uwzględnić je w głównym pliku szkicu, co spowoduje, że IDE skopiuje je do tymczasowego pliku kompilacji projektu. Makefile nie będzie się tym przejmował, ponieważ upewnisz się, że Twój Makefile zawiera wszystkie niezbędne pliki bibliotek.
Zobacz także moją odpowiedź tutaj: Klasy i obiekty: ile i jakich typów plików faktycznie muszę ich używać?
źródło