Wątek przeniesiony 2018-11-08 11:18 z Off-Topic przez Marooned.

C++ kontra AVR, Arduino i inne ATMELo podobne...

0

Co jest powodem tego że ludzie zajmujący się programowaniem mikroprocesorów zmuszeni są do nauki języka C zamiast nowszego (i moim zdaniem łatwiejszego) C++ ??

Jest na forum ktoś kto zajmuje się AVR?

0

Eh, nikt nikogo do niczego nie zmusza, Arduino powstalo w C, pytaj autora co mial na mysli. Samo AVR mozna programowac w C++, masz przecieŻ avr-g++.

0

Arduino i C? Raczej niezbyt.

Wykorzystuje się też C++ - natomiast jeśli masz do zaprogramowania urządzenie mające 2kb RAMu, nie siedzą Ci w głowie C++owe nowinki tak czy siak ;-) Więc koniec końców powstaje z tego takie c with classes .

0

Ile tak naprawdę jest prawdy z kompatybilnością wsteczną C++ z C?
Można (naprawdę można) śmiało powiedzieć że C++ rozpozna wszystkie "komendy" że tak powiem zapodane z C czy jednak gdzieś tam kiedyś będą problemy?

1
gavallon napisał(a):

Co jest powodem tego że ludzie zajmujący się programowaniem mikroprocesorów zmuszeni są do nauki języka C zamiast nowszego (i moim zdaniem łatwiejszego) C++ ??

C++ na pewno nie jest łatwiejszy. Może być wygodniejszy - jeśli się go zna.

C++ jest nowszy, ale może nie zawierać wszystkich elementów C. Nie znam szczegółów, ale C++ zwykle jest w stanie "ostatnio dodaliśmy ficzer X z C11".

No i zależy o jakich mikroprocesorach mówisz. Raczej chodzi Ci o mikrokontrolery?
W zależności od możliwości procesora dopasowuje się język. Przy procesorach gdzie pamięć liczy się w kB programujesz w ASM. Przy tych gdzie pamięć masz w megabajtach - spokojnie C/C++. A w Raspberry Pi można programować nawet w Python, Java, C#.

0

Trudność języka zależy od książki. Właśnie odebrałem "Szkołę Programowania Praty" do C i powiem szczerze że to jest to.

1

Powodów takiego stanu rzeczy jest bardzo wiele. Najważniejszym jest chyba to że branża jest bardzo konserwatywna. Do tego stopnia że jeśli nawet nowsze kompilatory C++ dzięki właściwościom dostępnym po C++11 lepiej kompilują kod niż kompilator C, często wybiera się ... C "racjonalizując wybór" :-) Poza tym na MCU C++ wymaga często dość specyficznego kodowania (np. rezygnowania z domyślnych alokatorów, mechanizmów domyślnej inicjalizacji). Aby uzyskać mały i wydajny kod, stosuje się konstrukcje szablonowe a dla wielu szablony to (do dzisiaj tak jest) "jakaś nieczytelna herezja". Szczególnie jeśli do tej pory pracowali w C i C++ znali na poziomie "C + klasy z lat 90'tych". Do tego dochodzi wiele mitów. Możesz o nich przeczytać tu: http://www.embedded.com/design/programming-languages-and-tools/4438660/Modern-C--in-embedded-systems---Part-1--Myth-and-Reality
Tu możesz posłuchać jak to jest być Don Kichotem:

0
gavallon:

Trudność języka zależy od książki.

Eee tam... Trudność języka zależy od wielu rzeczy, np. paradygmatu, składni, zakresu funkcjonalności czy istnienia wbudowanych mechanizmów ułatwiających pisanie kodu. Natomiast to że dana książka (czy inne materiały służące do nauki danego języka) nie pozwala na jego szybkie i bezbolesne zrozumienie, nie czyni go automatycznie trudnym. Książka ma za zadanie nauczyć programowania w przystępny i zrozumiały sposób, a jeśli tego nie robi to trzeba wybrać inną i już.

Owa trudność to pojęcie względne - dla jednych C jest prostym językiem, a dla innych trudnym jest Python.

0

Wydaje mi się też że trudność każdego języka zależy także w głównej mierze od sposobu podejścia do nauki. U mnie akurat jest tak że jeszcze mam spory zapał :-)
Piszę że "jeszcze" mam bo sam nie wiem czy kiedyś się skończy. Mam nadzieję że nie. Naj-naj ważniejsze jest to że przestałem się bać. Jeszcze 2,3 tygodnie temu gdy
otworzyłem jakąkolwiek książkę do C/C++ to miałem "oczopląs". Nie wiem czy kiedykolwiek na forum wspominałem ale C/C++ to moje pierwsze języki programowania w życiu. Nigdy z tym styczności nie miałem prócz kilku lekcji w TM lata temu. Programowanie w prawdzie znałem ale nie można dzisiaj tego już tak nazwać bo to były czasy Basica i komputerków typu zabawka. Zaczęło się jakoś w 1986/87r od Atari XE65. Szybko przeszło na Atari 520ST. Później C64. Później komplet Amigi czyli A500/600/1200. Skończyło się jakoś w 1990-1991 gdy nabyłem pierwszego blaszaka i szczerze mówiąc - nie potrafię odpowiedzieć na pytanie "dlaczego się skończyło". Basic mnie znudził?
Nie potrafię zrozumieć dlaczego na początku lat 90-tych gdy miałem już pierwszego blaszaka dałem na luz. Przecież C już istniał.
Fakt jest jeden. Obsługa PC w tamtych czasach była katastrofą :-) choć MSDOSA szybko załapałem i pamiętam do dziś. Może winą tego że dałem na luz była właśnie elektronika? Kiedyś sądziłem że programowanie to nie dla mnie. Nie widziałem swojej osoby w tym temacie :-) a dzisiaj? A dzisiaj wszystko się zmieniło.
Siedzę nad C/C++ od - tak szczerze - może 2,3 tygodni. Niby nic nie wiem bo tak naprawdę nic nie wiem ale czuję że się przełamałem :-) i to jest najważniejsze.
Normalnie aż korci "czytać", "pisać" i "kombinować". Normalnie spać się nie da wiedząc że coś nie działa :-)

Moim pierwszym błędem były ... antykwariaty. Nie sądziłem że programowanie mi się spodoba, szkoda było mi kasy na drogie książki i zacząłem błędnie właśnie od
antykwariatów czyli od wygrzebanych staroci za grosze. To był błąd numer jeden. Stare książki z lat 80/90 dot. C i C++ nie mają nic wspólnego z rzeczywistością.
Niby język C się nie zmienił za bardzo (C11 vs C99 itp.) ale jednak przykłady z dzisiejszych czasów sporo pomagają. W książce Praty a jest ona z 2016r mamy wszystko to co jest aktualnie na czasie. Nawet opis IDE nie wprawia w zakłopotanie bo mowa jest o czymś co jest na czasie (Visual Express 2012).

Plusem nowej książki jest to że mój mózg wreszcie wykasował myśl pt. "to jest stare, nie wiadomo czy będzie działać, nie wiadomo czy tego ktoś jeszcze używa, nie wiadomo czy w C99/C11 tego nie pominięto, nie wiadomo czy warto się tego uczyć..."
i o to chodziło bo teraz bez problemu zapamiętuje co trzeba! Wcześniej było inaczej no ale przysłowiowy "żyd" ma za swoje i tyle :-)
W planach mam jeszcze zakup najnowszego wydania do C++ i do JAVY.

0

Zapewne każdy używa tego co lubi i w czym mu się wygodnie pracuje. Ja osobiście asm i C++ w mikrokontrolerach i innych embedded.

I to niezalenie od tego czy RAM-u jest te kilka kilobajtów, czy (mniej/więcej), bo akurat w C++ się mi wygodnie pisze zwięzły, prosty i optymalny kod. Problemem może być brak biblioteki standardowej i STL-a. Pomijając kwestie typów, alokatorów, których się raczej nie używa, to nie tylko to znajduje się w bibliotece. Boli jednak to, że nie można nic sensownego pometa-programować "out-of-the-box", bo nawet typowych narzędzi, prymitywów, czy traitsów do tego niezbędnych nie ma. Trzeba samemu rzeźbić masę templejtów i wynajdywać koło od nowa (a raczej je pisać). Nie wspominając o meta-zabawkach z boosta.

No i avr-g++ jest trochę w tyle jeśli chodzi o standardowy g++ i wsparcie nowych ficzerów.

Akurat właśnie męczę mały fragment kodu pod AVR-em i trochę to upierdliwe downgradować dobry kod ;)

0

Szczerze mówiąc nie wiem na co się zdecydować. Układy mają być bardzo proste i chciał bym aby były najtańsze o ile to się da.
Różnica 3-4-5zł za jakiegoś Atmela8 vs wypasiony 32k (18-28zł) jest spora. Malcom, gdzie kupujesz bebechy? Wolumen + AVT czy obcykałeś gdzieś coś tańszego?

Na początek potrzebuję prostych układów które będą zajmować się tylko i wyłącznie załączaniem/wyłączaniem napięcia na pin-outach mikrokontrolera.
Im więcej takich pin-outów z możliwością wysterowania z poziomu PC tym lepiej.

Widzę to tak:
Mam podłączony jakiś tani mikrokontrolerek z PC, wysyłam komendy załączające napięcie (wystarczy mi sygnał +3/+5V lub zero) i tyle.
Resztą zajmą się przekaźniki i osobne zasilanie.
W późniejszym jednak czasie przydało by mi się z czytywanie danych z różnych czujników a w szczególności czujniki ABS w aucie.
Z przeróbką analoga do digitala że tak powiem od strony elektroniki nie będzie problemu. Problemem może okazać się wydajność mikrokontrolera.
Czy ta "taniocha" poradzi sobie z taką ilością danych?
Jedyne dane z przetwornika jakie otrzyma mikrokontroler to informacja 0 / 1 (jest / nie ma) ale będzie tego bardzo dużo w czasie ot by 1sek.
Wyobraźcie sobie czujnik ABS zamontowany przy przegubie. Na półośce (przegubie) jest koło z ząbkami. Między ząbkami brakuje kilku ząbków.
Obecność ząbków przyjmijmy za 1 a brak za 0.
Podczas jazdy autem jest masa obrotów koła więc podczas jazdy ot by z prędkością 100km/h takich obrotów jest w ciul i jeszcze trochę.
W czasie jednej sekundy procesor otrzyma z przetwornika nawet kilkadziesiąt informacji typu: jest / nie ma/ jest / nie ma i tak dalej.
Jakaś tania Atmega to udźwignie?

1

W czasie jednej sekundy procesor otrzyma z przetwornika nawet kilkadziesiąt informacji typu: jest / nie ma/ jest / nie ma i tak dalej.
Jakaś tania Atmega to udźwignie?

"nawet kilkadziesiąt" myślę, że da radę ;-)

Masz do wykorzystania max 20 MHz (jeśli chodzi np. o Atmegę 328p i wiele innych, nie licząc tych chłodzonych azotem #pdk), a w tym czasie można zrobić wbrew pozorom bardzo dużo - http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm tu na przykład koleś generuje obraz VGA z takiego mikroprocesora. Istnieje na przykład również projekt V-USB, który implementuje programowo cały protokół USB również na Atmegach. I to działa .

Choć oczywiście istnieje górna granica związana z wydajnością układu - musiałbyś sprawdzić czy w Twoim konkretnym przypadku nie jest ona przekraczana.

2

Takie prędkości to nie problem nawet dla starej Atmegi 8, poza tym można użyć układów zewnętrznych np. do zliczania impulsów.
Jeśli nie masz kasy na książki, to polecam ci na Youtube kanał użytkownika Atnel - mirekk36.
Na początek:

0

Kasa jest ale nie chciał bym popełnić tego samego błędu który popełniłem przy zakupie książek do C/C++. Nakupowałem starego szmelcu
i skończyło się tym że musiałem kupić raz jeszcze. Tym razem nim kupię coś do AVR i Arduino to to przemyślę :-)

0
gavallon napisał(a):

Malcom, gdzie kupujesz bebechy? Wolumen + AVT czy obcykałeś gdzieś coś tańszego?

Ja kupowałem swego czasu dużo w Chinach i na allegro, na Wolumenie rzadko mi się zdarza, chyba że się poluje na jakiś starszy sprzęt retro ;) W AVT kupowałem w młodości przełom lat 90/2000… teraz od nich to EdW/SR .

gavallon napisał(a):

Problemem może okazać się wydajność mikrokontrolera. Czy ta "taniocha" poradzi sobie z taką ilością danych?

Jak koledzy wyżej napisali, przy taktowaniu 16-20MHz można zrobić dużo, a jak Ci się okaże, że nie wyrabia, to zawsze możesz wziąć jakiegoś ARM-a, ich ceny są porównywalne z AVR-ami, a czasami nawet tańsze.

Szmelcu raczej nie kupisz, nawet dzisiaj używa się '51 i innych. Pytanie czy lubisz poznawać różne rzeczy niekoniecznie dla czegoś więcej niż satysfakcji. Ja sam nawet lubię czasem pobawić się nieco starszymi zabawkami. Niezła frajda przy retro ;)

Żeby nie wtopić jeśli chodzi o sprzęt to jeśli się nie bawiłeś tematem, to najtaniej chyba wyjdzie jakaś mała zabawa na klonach Arduino, ale niekoniecznie z ich IDE. Chyba ze nie chcesz zbytnio się wgłębiać w elektronikę. Inna opcja to stykówka + goły AVR + programator usbasp… ewentualnie jakieś zestawy testowe/deweloperskie, jeśli nie chcesz ciągle bawić się z podłączaniem przewodzików.

Odnośnie książek to się nie wypowiem, mam już trochę technicznej literatury, ale lubię ją czytać bardziej dla rozrywki, niż jakieś nauki. W obecnych czasach manul i masa dokumentacji oraz materiałów w sieci stwarza dobre warunki do nauki czegokolwiek ;)

0

Od jakiegoś czasu AVT wariuje z cenami. Znalazłem odpowiednika tyle że w Malborku. Praktycznie wszystko to samo co w AVT lecz tańsze o minimum 40%.
Czasami nawet i 100%. Nie wiem dlaczego AVT aż tak z cenami robi. Ponoć wszystko jest na czasie więc trzeba skubać ile wlezie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1