Skocz do zawartości

Pomocna odpowiedź

STM32 na większości pinów tolerują 5V. Wiele układów zasilanych z 5V traktuje sygnały w logice 3.3V poprawnie. Więc większości przypadków nie sprawia to żadnych problemów. Troszkę gorzej jest jeśli chodzi o sygnały analogowe, trzeba by dać dzielnik na 2 rezystorach na wejściach ADC, i ew. jakiś wzmacniacz na wyjściach DAC chociaż AVRy nie maja DAC, więc tutaj migracja na nie nie rozwiąże problemu

Miałem swego czasu Arduino Due, które ze względu na użyty mikrokontroler zalicza się chyba do stm32?! Fajna płytka, ale jej irytującym mankamentem było to, że właśnie tolerowała jedynie napięcie 3.3V, a napięcie 5V wystarczało aby ją spalić ... więc ją sprzedałem i mam teraz tylko małego stm32, o którym pisałem wyżej. Może się jakoś do niej przekonam, ale pierwsze wrażenie też jest nieciekawe, bo po zainstalowaniu sterowników dalej jest nierozpoznawalna na Win7 🙁

ElektronicznySt, nie, nie zalicza się.

Faktycznie ma procesor na rdzeniu ARM, Ale jest to

Atmel SAM3X8E ARM Cortex-M3 CPU

czyli rozwiązanie Atmela. Szczerze mówiąc nie rozumiem tej decyzji z ich strony, no ale.

Elvis, Wydajność, ilość pinów i ilość i rozbudowanie peryferiów, tolerowanie 5V, cena układu i tak dalej.

Poza tym Due jest już "retired" i najszybsze w rozsądnej cenie jest już chyba Mega.

Ale jeśli wykorzysta się Arduino IDE to wszystkie te zalety są stracone na rzecz zgodności z bibliotekami i interfejsem oryginalnego Arduino. Stąd było moje pytanie, albo raczej próba delikatnej sugestii, że jeśli STM32 to może warto zrezygnować z Arduino i mieć dostęp do pełnych możliwości platformy.

Elvis, Nie, dlaczego? Biblioteki "Arduino" są pisane pod konkretną platformę i ta sama operacja zajmuje znacznie mniej na szybszych platformach.

Testowałem z ESP8266 na przykład i to co sprawdzałem wykonuje się proporcjonalnie szybciej.

Także wciąż te biblioteki są wolniejsze niż operacje na czystych rejestrach, ale pisanie kodu jest znacznie szybsze, moim zdaniem warto.

Nie rozumiem skąd ci się wziął pomysł, że użycie IDE powoduje utratę dostępu do możliwości platformy. To trochę tak jak ja bym twierdził, że piszę kod w Vim-ie, bo wtedy szybciej działa.

Arduino IDE jest po prostu wygodnym sposobem na wgrywanie programu na te płytki. Dodatkowo, jeśli chcesz, możesz korzystać z funkcji bibliotecznych Arduino, dzięki czemu nie musisz szukać i się zastanawiać jak zrobić jakąś rzecz w miejscu, gdzie wydajność akurat nie ma znaczenia. We fragmentach twojego programu w których ma to znaczenie i w których potrzebujesz dostęp do specjalnych funkcji, to spokojnie możesz je sobie wołać. Możesz nawet wstawki w assemblerze używać. Nie ma zakazu.

A nawet abstrahując od tego, mimo wszystko nawet program napisany tylko z wykorzystaniem funkcji bibliotecznych Arduino nadal będzie znacząco szybszy na STM32 niż na atmega328p.

deshipu, trochę się zagalopowałeś - nie twierdzę, że wykorzystywanie edytora ma wpływ na wydajność kodu (chociaż pewnie taka korelacja istnieje, ale to temat na ciekawą pracę doktorską). Arduino IDE to dużo więcej niż edytor (czy wygodny to pewnie kwestia osobistych preferencji). W każdym razie wykorzystywanie Arduino IDE oznacza dwie rzeczy: biblioteki zgodne z Arduino oraz C++. Oczywiście można dyskutować na temat jakości, wydajności itd. bibliotek, jednak te dostarczane przez producenta na ogół pozwalają na wykorzystanie pełnych możliwości platformy. Natomiast to co dostajemy z Arduino bywa bardzo kiepskiej jakości. Nie mówię, że wszystkie biblioteki są złe, ale przeglądałem kod kilku i nie wykorzystałbym ich do żadnego poważnego projektu. Oczywiście Arduino jest platformą do nauki, co więcej miało służyć nie-informatykom. W takim zastosowaniu wydajność bibliotek, czy dostęp do większej liczby peryferiów nie ma dużego znaczenia.

Natomiast C++ na mikrokontrolerach to oddzielny temat. Wiadomo, że kompilatory są coraz lepsze, niektórzy nawet wierzą że czynią cuda. Jednak w większości przypadków za cenę wykorzystania obiektowości musimy zapłacić "cenę" w postaci gorszej jakości wygenerowanego kodu. Są przypadki, kiedy wykorzystanie C++ jest dobrym pomysłem, ale pisząc prosty programik do sterowania mini-robotem, zostanie przy C pozwala na zaoszczędzenie wielu zasobów mikrokonotrolera. Poza tym w C++ bardzo łatwo "niechcący" wygenerować potwornie długi i niewydajny kod.

Chumanista, chciałem Cię tylko zachęcić do przemyślenia czego oczekujesz od platformy. Jeśli prostego programowania, nauki podstaw, wtedy Arduino jest wręcz idealne.

Ale jeśli chcesz optymalizować kod, wykorzystywać procesor do granic możliwości, przemyśl czy Arduino jest na pewno do tego idealne.

Elvis wydaje mi się, że jesteś mocno uprzedzony i powtarzasz mity.

Po pierwsze Arduino IDE i biblioteki Arduino to dwie osobne rzeczy i użycie jednego nie pociąga za sobą użycia drugiego. Możesz użyć Arduino IDE bez używania bibliotek Arduino, możesz użyć bibliotek Arduino bez używania IDE, możesz użyć obu jednocześnie.

Po drugie, w Arduino IDE możesz ze spokojem pisać w C. Albo w asemblerze. Oczywiście nie użyjesz wówczas dołączonych C++-owych bibliotek, ale tak jak piszesz, są przecież biblioteki dostarczone przez producenta.

Po trzecie, użycie C++ nie musi za sobą pociągać użycia obiektów, dynamicznej alokacji pamięci, klasy String czy innych udogodnień, które pochłaniają zasoby. Nie wiem skąd ci się wziął pomysł, że C++ od razu automatycznie oznacza wykorzystanie obiektowości.

Po czwarte, nie zawsze i nie wszędzie potrzebujemy mieć wszystko zoptymalizowane do granic możliwości. Powiedziałbym nawet, że bardzo rzadko. Można spokojnie użyć "marnotrawnych" ale wygodnych funkcji bibliotecznych tam, gdzie nie ma to i tak znaczenia, a tam gdzie ma, wycyzelować ręcznie super-zoptymalizowany kod w assemblerze. Zaleta jest taka, że nie musisz cyzelować cały czas i tworzyć kodu, który jest co prawda szybki, ale nie daje się zrozumieć. Zamiast tego piszesz szybko większość, a potem siedzisz i optymalizujesz to co musisz.

Po piąte, często się przesiadamy na mocniejszą platformę właśnie po to, żeby zaoszczędzić sobie pracy z bezsensownym optymalizowaniem wszystkiego, a zamiast tego szybko zbudować dobrze działającego robota czy inny projekt. Przecież o to w tym na koniec chodzi.

Nie powiedziałbym że jestem uprzedzony. Po prostu próbowałem się do Arduino przekonać, ale bez skutku. Wydaje mi się, że trochę za duży offtop się zrobił. Proponuję zakończyć dyskuję tym, że każdy powinien używać takiego środowiska i języka programowania, jakie lubi. Czasem są zastosowania, w których drobne różnice mają znaczenie, ale ogólnie zarówno procesor, jak i język programowania nie jest najważniejszy - nic nie zastąpi umiejętności samego programisty.

  • 2 tygodnie później...

Po czwarte, nie zawsze i nie wszędzie potrzebujemy mieć wszystko zoptymalizowane do granic możliwości. Powiedziałbym nawet, że bardzo rzadko. Można spokojnie użyć "marnotrawnych" ale wygodnych funkcji bibliotecznych tam, gdzie nie ma to i tak znaczenia, a tam gdzie ma, wycyzelować ręcznie super-zoptymalizowany kod w assemblerze. Zaleta jest taka, że nie musisz cyzelować cały czas i tworzyć kodu, który jest co prawda szybki, ale nie daje się zrozumieć. Zamiast tego piszesz szybko większość, a potem siedzisz i optymalizujesz to co musisz.

Trafiłeś w sedno, po co kod ma być optymalizowany jeśli i bez tego realizuje swoje zadanie... Ja do tej pory tylko raz spotkałem się z sytuacją w której trzeba było sięgnąć po assemblera i zrobił to Mirek Kardaś przy obsłudze diod WS2812 z wykorzystaniem ATmegi gdzie trzeba było uzyskać impuls o szerokości kilkudziesięciu us 🙂 w STM'ach się z taką sytuacją nie spotkałem. Szczególnie mając do dyspozycji DMA szybkość kodu nie ma już takiego znaczenia 🙂 Przez Elvisa przemawia chyba doświadczenie i duża wiedza na temat tych układów, dla nas początkujących ma być prosto łatwo i przyjemnie 😃

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...