Skocz do zawartości
tomecki

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

Pomocna odpowiedź

Czy programowanie mikrokontrolerów np. atmel w czystym C jest dużo bardziej skomplikowane od arduino?

Czy warto się tym zająć? Czy jest problem z komunikacją z sensorami, czy wystarczy wgrać odpowiednie biblioteki jak do arduino i nie będzie problemów?

Jakie są plusy, minusy takiego rozwiązania?

Udostępnij ten post


Link to post
Share on other sites

@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ć 😉

Udostępnij ten post


Link to post
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. 

 

Udostępnij ten post


Link to post
Share on other sites
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 😉

Udostępnij ten post


Link to post
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++.  

Udostępnij ten post


Link to post
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.

  • Lubię! 1

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

Ale wiesz, że zacytowane zdanie poza kontekstem jest bez sensu? Pisałem  bibliotekach, a nie o języku.

Udostępnij ten post


Link to post
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. 

Udostępnij ten post


Link to post
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...

 

 

Udostępnij ten post


Link to post
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. 

Udostępnij ten post


Link to post
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 😉

 

Udostępnij ten post


Link to post
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!

Gość
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...