Skocz do zawartości

Programowanie mikrokontrolerów w czystym C - jaka różnica względem Arduino?


tomecki

Pomocna odpowiedź

@tomecki temat rzeka, każde rozwiązanie ma swoich zwolenników. Wszystko zależy głównie od tego co chcesz robić. Główny "problem", który napotkasz podczas pisania w czystym C to brak gotowców i bibliotek, większość rzeczy trzeba zrobić samodzielnie. Wymaga to biegłego korzystania z not katalogowych, operacji na rejestrach itd. Początkujący często się wtedy zniechęcają 😉 Jeśli chcesz odejść od Arduino to w tym momencie lepszym wyborem byłoby chyba wybranie STM32 - widziałeś nasze kursy dotyczące tej tematyki? Poczytaj jak to wygląda to zobaczysz czy takie podejście jest odpowiednie dla Ciebie. Warto zerknąć na przykład tutaj: Kurs STM32 F1, migracja na HAL – #1 – wstęp, spis treści.

Powiedz też coś więcej na temat powodów Twojej chęci odejścia od Arduino - łatwiej będzie coś podpowiedzieć 😉

Link do komentarza
Share on other sites

Cytat

Powiedz też coś więcej na temat powodów Twojej chęci odejścia od Arduino - łatwiej będzie coś podpowiedzieć

Nie chodzi o odejście o arduino, lecz zgłębienie tematu programowania mikrokontrolerów. Kiedyś pisałem programy w asemblerze, więc taki poziom mi odpowiada. 

W zapytaniu chodziło mi o to, czy biblioteki sensorów dostarczone do arduino będą działać w czystym C. Z tego co piszesz, to raczej będzie problem z tym, więc to zniechęca. 

W takim tutorialu jak poniżej programowanie nie jest mocno skomplikowane. 

 

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

2 godziny temu, tomecki napisał:

Kiedyś pisałem programy w asemblerze, więc taki poziom mi odpowiada. 

Jeśli masz doświadczenie na poziomie ASM to na pewno dasz sobie radę, w takim razie działaj 😉

Link do komentarza
Share on other sites

2 godziny temu, tomecki napisał:

W zapytaniu chodziło mi o to, czy biblioteki sensorów dostarczone do arduino będą działać w czystym C. Z tego co piszesz, to raczej będzie problem z tym, więc to zniechęca. 

Wzięte z półki, raczej na pewno nie zadziałają, przynajmniej nie od razu. Arduino to od dawna już nie tylko płytki i biblioteki ale ogromny framework jak inne, gdzie masz setki różnych interfejsów i określonych API. Jeśli twój procesor ma wsparcie Arduino (ktoś napisał drivery), to po dołączeniu wszystkich zależności i bibliotek do peryferiów, które ta konkretna biblioteka potrzebuje raczej powinno ostatecznie zadziałać. Tylko właśnie problem w tym, że tych zależności może być sporo, które mogą wymagać kolejnych. Inna sprawa to fakt, że większość z tych bibliotek jest napisana w C++.  

Link do komentarza
Share on other sites

22 minuty temu, Matthew11 napisał:

Tylko właśnie problem w tym, że tych zależności może być sporo, które mogą wymagać kolejnych. Inna sprawa to fakt, że większość z tych bibliotek jest napisana w C++. 

I dlatego właśnie działanie programu napisanego z pominięciem arduino jest na ogół wiele szybsze i wydajniejsze ale coś za coś, arduino jest muliste ale wygodne i dlatego jest takie popularne. Nic nie stoi jednak na przeszkodzie aby miksować sobie kod dowolnie, w krytycznych czasowo miejscach wstawiać wstawki asm lub przerabiać napisane w C++ biblioteki na C, albo jeszcze oszczędzać pamięć rezygnując z zasobożernych operacji typu dzielenie, liczby zmiennoprzecinkowe lub nadużywanie zmiennych volatile lub static, gdzie się tylko da ale to wymaga czasu. Więc coś za coś, pod arduino masz wszystko na już co jest okupione często nawet 5-krotnie większym zużyciem pamięci.

Link do komentarza
Share on other sites

Dnia 11.12.2019 o 13:13, ethanak napisał:

Tak że każdego co narzeka na mulistość Arduino mogę porównać do słabego pływaka, co narzeka że woda jest za rzadka.

Przekonująco o tym opowiadasz ale nawet Ty wiesz, że oprogramowanie napisane w j. C jest dużo szybsze i wydajniejsze od spełniającego te same funkcje oprogramowania w C++ a widać to szczególnie dobrze na małych platformach gdzie zasoby są ograniczone. Różnica jest natomiast tego typu, że w C++ pisze się dużo wygodniej więc więcej czasu zajmuje napisanie tego samego kodu w C który jest mniej elasyczny. Niektórzy twierdzili nawet, że C++ nie nadaje się do programowania mikrokontrolerów ale to zależy też czego się wymaga. Dostępny na rynku sprzęt również jest coraz lepszy więc takie twierdzenia zaczynają być przestarzałe tak jak AVR z 30 letnim stażem. 

Jednak, kiedy się używa starego sprzętu chcąc wykorzystać wszystkie jego możliwości należy stosować metody do tego odpowiednie czyli w tym wypadku j. C będzie znacznie lepszym rozwiązaniem.

Link do komentarza
Share on other sites

Brak oprogramowania do sensorów jest ogromnym minusem takiego rozwiązania. 

Prędkość działania w C i C++ jest praktycznie taka sama lub lepsza w c++. Najszybsze działanie będzie w asemblerze.

Przy wyborze platformy liczy się też to, jak długo trzeba pisać dany kod. Dostępność bibliotek, gotowych rozwiązań, popularności jest też wyznacznikiem z jakiego rozwiązania należy korzystać. Np. w programowaniu obecnie lepiej korzystać z C# niż z c++, chociaż c++ jest znacznie szybsze w działaniu. 

Link do komentarza
Share on other sites

1 godzinę temu, tomecki napisał:

Brak oprogramowania do sensorów jest ogromnym minusem takiego rozwiązania. 

A do jakiego sensora brakuje Ci oprogramowania? Bo ostatnio spotkałem się z odwrotnym przypadkiem (konkretniej dla VL53L1X, gdzie z gotowców miałem pełną śliczna bibliotekę w C od ST i jakiś paszczaty wrapper w C++). Poza tym jeśli masz kod w C++ to napisanie na jego podstawie kodu w C to zabawa.

Ech, woda rzadka 😉

2 godziny temu, tomecki napisał:

Prędkość działania w C i C++ jest praktycznie taka sama lub lepsza w c++. Najszybsze działanie będzie w asemblerze.

Pozwolę sobie się nie zgodzić.

Jeśli mamy kod w C/C++ który jest prawidłowy w obu językach - będzie skompilowany na taki sam kod wynikowy. Co więcej: jeśli będziemy w C programować obiektowo, to kod w C :

x = MyMethod(&MyObject, argument);

powinien być skompilowany na ten sam kod wynikowy co kod w C++ :

x = MyObject.MyMethod(argument);

Co do asemblera... i tak, i nie. W wielu przypadkach kod wygenerowany przez kompilator z włączoną maksymalną optymalizacją będzie szybszy, niż ręcznie dziubany kod w asemblerze. Oczywiście nie jest to regułą, szczególnie dla ośmiobitowców (możliwość użycia 8-bitowej arytmetyki zamiast wymaganej w C/C++ int). Tak że nie można twierdzić że asembler będzie zawsze szybszy od C/C++.

2 godziny temu, tomecki napisał:

Np. w programowaniu obecnie lepiej korzystać z C# niż z c++, chociaż c++ jest znacznie szybsze w działaniu. 

Mówisz o programowaniu ośmiobitowych AVR-ów czy pecetów z Windowsem (bo już pod Linuksem pisanie w C# traci sens)? Bo to samo o domniemanej "lepszości korzystania" można powiedzieć o Javie czy Pythonie...

 

 

Link do komentarza
Share on other sites

4 godziny temu, ethanak napisał:

A do jakiego sensora brakuje Ci oprogramowania? Bo ostatnio spotkałem się z odwrotnym przypadkiem (konkretniej dla VL53L1X, gdzie z gotowców miałem pełną śliczna bibliotekę w C od ST i jakiś paszczaty wrapper w C++). Poza tym jeśli masz kod w C++ to napisanie na jego podstawie kodu w C to zabawa.

czyli jednak są biblioteki do sensorów w C. Otworzyłem wątek w celu uzyskania takiej odpowiedzi. 

Jeszcze nie zacząłem bawić się w to, ale wygląda to obiecująco. Szczególnie ze względu na edytor - Atmel studio  z możliwością debugowania kodu. 

4 godziny temu, ethanak napisał:

 

Co do asemblera... i tak, i nie. W wielu przypadkach kod wygenerowany przez kompilator z włączoną maksymalną optymalizacją będzie szybszy, niż ręcznie dziubany kod w asemblerze. Oczywiście nie jest to regułą, szczególnie dla ośmiobitowców (możliwość użycia 8-bitowej arytmetyki zamiast wymaganej w C/C++ int). Tak że nie można twierdzić że asembler będzie zawsze szybszy od C/C++.

Masz rację - kod w c++ może być szybszy niż w asm. Czyli programowanie w asm traci sens, oprócz wielkości programu. 

https://www.codeproject.com/Articles/1182676/Need-for-Speed-Cplusplus-versus-Assembly-Language

4 godziny temu, ethanak napisał:

Mówisz o programowaniu ośmiobitowych AVR-ów czy pecetów z Windowsem (bo już pod Linuksem pisanie w C# traci sens)? Bo to samo o domniemanej "lepszości korzystania" można powiedzieć o Javie czy Pythonie...

 

 

mówiłem o programowaniu komputerów. Zamiast c# można było podstawić javę czy pythona lub ruby. 

Link do komentarza
Share on other sites

28 minut temu, tomecki napisał:

Czyli programowanie w asm traci sens, oprócz wielkości programu. 

Nie. Często bywa potrzebne, ale raczej nie w stylu pisania całego programu w asemblerze, ale raczej do krótkich wstawek, które w C byłyby albo nieefektywne, albo zgoła niemożliwe do implementacji.

 

29 minut temu, tomecki napisał:

mówiłem o programowaniu komputerów

A miało być o mikrokontrolerach, prawda? Zresztą - nawet w świecie mikrokontrolerów masz MicroPythona, o Micro(C#|Java|Ruby) jeszcze nie słyszałem 😉

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.