Skocz do zawartości

Zmiana Arduino IDE na Atmel Studio


Bonkers

Pomocna odpowiedź

Witam,

W ostatnim czasie zacząłem interesować się programowaniem w Atmel Studio zamiast w Arduino IDE, ponieważ Atmel Studio ma więcej opcji niż IDE. Wiem, że istnieją takie opcje programowania Arduino po przez to środowisko za pomocą dodatku vMicro lub z poziomu tworzenia nowego projektu "Create Arduino Project from sketch". Jednak mnie najbardziej interesuje pisanie programów w "zwykłym C" tak jak dla innych avr'ów. I w związku z tym moje pytanie brzmi, czy da się w szybki sposób dodać lub przerobić biblioteki z Arduino do projektu, pisanym w języku C w Atmel Studio?

Edytowano przez Bonkers
Link do komentarza
Share on other sites

1 godzinę temu, Bonkers napisał:

w związku z tym moje pytanie brzmi, czy da się w szybki sposób dodać lub przerobić biblioteki z Arduino do projektu, pisanym w języku C w Atmel Studio?

Bywa różnie, czasem łatwo szybko i przyjemnie czasem nie. W każdym razie masz okazję zobaczyć jak większość bibliotek jest źle napisane i je poprawić.

Link do komentarza
Share on other sites

C jest językiem strukturalnym, Arduino jest oparte o C++ obiektowy. Przerobienie bibliotek jest możliwe i nie jest jakoś szczególnie skomplikowane. W większości bezpośrednio użyć się ich nie da. Jeśli pisałeś w Arduino nie używając klas i obiektów to właściwie pisałeś w C, wiec tu różnicy nie będzie, bo C to podzbiór C++.  Jeśli w programie masz jeden obiekt danego typu to i tak C++ tu średnio coś ułatwia.

  • Lubię! 1
Link do komentarza
Share on other sites

Dodam: przerobienie jest możliwe i nie jest szczególnie skomplikowane dla kogoś kto zna oba języki programowania (zarówno C, jak i C++), w większości przypadków (przerabianie kodu z obiektowego na strukturalny) lepiej i szybciej jest napisać taką bibliotekę w C od zera, wzorując się na rozwiązaniach (nie kodzie) odpowiedniej biblioteki Arduino.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bo pisanie w C na platformę typu arduino jest dużo wydajniejsze od pisania w C++. Osobiście nie lubię Atmel Studio bo muli okrutnie i nadaje się jedynie jako debugger już napisanego oprogramowania. W moim przypadku do AVR i STM wystarcza stary dobry SW4STM32 IDE. Przy odrobinie wyobraźni i niewielkiej dozy wiedzy można w C pisać w podobny sposób jak w C++ co zdecydowanie ułatwia przekładanie bibliotek. Wychodzi zdecydowanie lepiej niż pod frameworkiem arduino. Między innymi przydatne okazują się tu struktury i wskaźniki na funkcje i struktury. Stosując w niektórych przypadkach wstawki w asm można osiągnąć niemal maksymalną wydajność mimo "obiektowego" podejścia do programowania. Tak czy inaczej jak by się do programowania nie zabierać to wygoda programisty zawsze kosztuje wyższym wykorzystaniem cennych zasobów i tego się nie przeskoczy.

Link do komentarza
Share on other sites

23 godziny temu, InspektorGadzet napisał:

Bywa różnie, czasem łatwo szybko i przyjemnie czasem nie. W każdym razie masz okazję zobaczyć jak większość bibliotek jest źle napisane i je poprawić.

No właśnie zazwyczaj żeby przerobić jedną bibliotekę, trzeba przerabiać następną, następną itd... 

 

15 godzin temu, InspektorGadzet napisał:

AS umożliwia pisanie kodu w C++ ale autor się zaparł

 

Umożliwia, też próbowałem pisać w C++, ale tu z kolei, również trzeba przerabiać niektóre biblioteki, w tym główną "Arduino.h".

Jeśli dobrze rozumiem nie ma innego sposobu, niż przerabianie bibliotek? Czy może jednak istnieje jakaś strona, która posiada biblioteki w C dla konkretnych urządzeń przeznaczonych do Arduino?

Link do komentarza
Share on other sites

Jest cała masa softu pamiętająca czasy kiedy nie było jeszcze arduino a atmega32 już tak, niestety odkąd "arduino żondzi" trudniej znaleźć ale da się. Możesz zacząć poszukiwania od archiwum forbota lub https://www.avrfreaks.net/

Zasoby Atmela też są imponujące. Nie tylko C ale i asm i tony artykułów tylko poszukiwania są czasochłonne i musisz mieć świadomość, że cofasz się w czasie podejmując się tego.

Link do komentarza
Share on other sites

12 godzin temu, Bonkers napisał:

Umożliwia, też próbowałem pisać w C++, ale tu z kolei, również trzeba przerabiać niektóre biblioteki, w tym główną "Arduino.h".

Jakie programy zamierzasz pisać? Jeśli to tylko zabawa a nie chcesz się za bardzo angażować zostań przy Arduino. Jeśli to poważniejsze programy, zapomnij o Arduino, zapomnij o AVR i zajmij się ARM. Czy przenosisz bibliotekę Arduinową na AVR czy ARM, roboty tyle samo a AVR to dinozaur i w dodatku drogi.Wiele z nowych projektów, które realizuję, nie są do zrealizowania na AVR, chyba, że miganie wyświetlacza nie przeszkadza. Niektóre można zrealizować ale trzeba włożyć w to dużo pracy, czy warto? Namęczyć się aby program zadziałał na przestarzałym DROGIM mikrokontrolerze?

Na Forbocie jest kurs (nie pozbawiony błędów) STM32. Poczytaj go i zobaczysz, że nie taki ARM straszny jak mówią. NUCLEO kupisz od 49zł. Jest książka dla początkujących do płytki KA-NUCLEO-F411 (tej za 49zł).

Pamiętaj, że książki takie zakładają, że znasz C. Jak nie znasz to od nauki C zacznij.

Edytowano przez InspektorGadzet
Link do komentarza
Share on other sites

Ja tylko dodam, że jest też rodzina płytek Teensy. Od wersji płytek 3.x wszystkie pracują na rdzeniach ARM. Można programować z poziomu Arduino IDE - biblioteki niskopoziomowe są napisane w C, a API zgodne z Arduino napisane w postaci wrapperów w C++ dla większości klas które występują w Arduino. Więc nadal masz zapewnioną wygodę w postaci zalet C++ ale równie dobrze możesz się odwoływać do funkcji napisanych w C jeśli zależy Ci na większej wydajności.

Teensy ma do tego bardzo prężnie działającą społeczność i sam twórca jest dostępny mailowo lub udziela się na forum. Jak ktoś jest zainteresowany to zdecydowanie polecam pisać w Visual Studio Code z dodatkiem PlatformIO (nie tylko w przypadku Teensy, ale ogólnie wszystkiego co jest zgodne z Arduino). 

Edytowano przez Matthew11
Link do komentarza
Share on other sites

22 minuty temu, Matthew11 napisał:

pracują na rdzeniach ARM. Można programować z poziomu Arduino IDE

I para idzie w gwizdek. Dawałem już link do tematu na Elektrodzie, gdzie zmiana z AVR na ARM nie dała NIC!  Było to temat wolnego odświeżania obrazu przez Arduino DUE (jakiś SAM) na wyświetlaczu. Jak się nie używa sprzętu tak jak to robią Arduinowe biblioteki to przyspieszenie będzie niezauważalne ewentualnie małe, bo CPU kręci się w kółko czekając na zdarzenie.

Link do komentarza
Share on other sites

Arduinowe biblioteki (sztandarowy przykład to Adafruit GFX) to tylko klasa z jedmą wirtualną metodą (putPixel czy jakoś tak), resxta prymitywów to faktycznie żmudne rysowanie pikslów. Dopiero sterownik konkretnego wyświetlacza (dla którego GFX jest klasą bazową) może nadpisać każdą metodę. Taki typowy przykład to drawLine i drawHLine - ta druga jest w bibliotece GFX po prostu wrapperem do drawLine, ale konkretny sterownik może je realizować po swojemu (np. putColor).

Tak że nie jest to sprawa złycj bibliotek do Arduino, tylko zastosowania uproszczonych sterowników ekranu. Zauważ: te uproszczone będą działać prawidłowo (chociaż powoli), a każda dodatkowa metoda kosztuje pamięć programu - a tej Arduina na AVR-ach specjalnie dużo nie mają.

I to, że ktoś na ARM-ie używa bibliotek przeznaczonych dla innej architektury nie oznacza, że te biblioteki są złe - ale że nie są dla niego.

Pytanie kontrolne i retoryczne: dlaczego rodzina printf w avr-glibc nie obsługuje floatów?

  • Lubię! 1
Link do komentarza
Share on other sites

55 minut temu, ethanak napisał:

Arduinowe biblioteki (sztandarowy przykład to Adafruit GFX) to tylko klasa z jedmą wirtualną metodą (putPixel czy jakoś tak),

Zgadza się. Wystarczy jednak, zamiast stawiać piksel na wyświetlaczu, robić to w RAM. Jak już wszystko jest narysowane, DMA start i po robocie.

 

55 minut temu, ethanak napisał:

każda dodatkowa metoda kosztuje pamięć programu - a tej Arduina na AVR-ach specjalnie dużo nie mają.

Mega1284 ma jej 16k. Do kolorowego wyświetlacza 320x240 nie wystarczy ale do 96x64 już tak. Można zmniejszyć liczbę kolorów do 256 lub 16 i dekompresować "w locie" (AVR nie mają DMA, więc w czasie gdy CPU kręci się w czekaniu na koniec transmisji po SPI, może dekompresować dane). Poza tym, ekran można rysować na 2 czy 4 razy. Niestety wymaga to sporego nakładu pracy.

Nie prościej wybrać ARM z wymaganą ilością pamięci? Najczęściej ów ARM będzie tańszy niż dużo gorszy od niego AVR! Kompilator na ARM rozwiązuje wiele problemów jakie są na AVR no i nie trzeba pamiętać o PROGMEM i _P.

 

55 minut temu, ethanak napisał:

Pytanie kontrolne i retoryczne: dlaczego rodzina printf w avr-glibc nie obsługuje floatów?

Używam printf  tylko sprintf i obsługuje ale trzeba włączyć w opcjach kompilatora i żegnaj ok 2 kB FLASH.

Edytowano przez InspektorGadzet
Link do komentarza
Share on other sites

Dnia 14.07.2019 o 21:02, Bonkers napisał:

Witam,

Jednak mnie najbardziej interesuje pisanie programów w "zwykłym C" tak jak dla innych avr'ów. I w związku z tym moje pytanie brzmi, czy da się w szybki sposób dodać lub przerobić biblioteki z Arduino do projektu, pisanym w języku C w Atmel Studio?

Cześć,

tutaj masz przykład takiej przeróbki biblioteki z Arduino (C++), na wersję nieobiektową (użycie struktury zamiast klasy):

Pozdrawiam

Link do komentarza
Share on other sites

Anonim
Ten temat został zamknięty.
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.