C++ od zera na AVR

Tu poruszamy tematy związane z pisaniem programów w języku C++ dla AVR.
Zonced
Posty: 1
Rejestracja: poniedziałek 06 lis 2017, 22:44

C++ od zera na AVR

Postautor: Zonced » poniedziałek 06 lis 2017, 23:02

Witam.
Mam pytanie dotyczące C++ na AVR, strasznie ciężko coś w tym temacie znaleźć praktycznie wszystko opiera się na C.
Otóż chciałbym nauczyć się programowania AVR, ale o wiele bardziej interesuje mnie podejście bardziej obiektowe, jakie prezentuje C++, lecz nie wiem gdzie znajdę materiały dotyczące nauki C++ na AVR (składnie C++ znam i programowałem na komputery w nim). Mam na myśli tutaj od stworzenia najprostszej klasy, obsługi diody po jakieś trudniejsze rzeczy. Może są jakieś materiały dotyczącego tego po Angielsku. Z tego co widzę tutorial tutaj na forum wymaga już pewnego obycia z programowaniem AVRów w C.
Więc znacie jakąś książkę/tutorial wprowadzający w AVR w C++ od podstaw ?
Czy raczej moje zamiary są daremne i nie ma sensu na początku zaprzątać sobie głowy C++ ?

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1089
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: C++ od zera na AVR

Postautor: Antystatyczny » poniedziałek 06 lis 2017, 23:05

Zasadniczo publikujesz pytanie w dziale, w którym znajdują się poradniki dotyczące C++ i AVR (od zera). A oto link: viewforum.php?f=70" target="_blank

Edit:

Ok, Ty chcesz poradnik "od początku świata w C++"... No to raczej będziesz musiał poczytać o podstawach w kontekście języka C. Tego nie ma wiele tak naprawdę.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
piotrek
Newb
Newb
Posty: 69
Rejestracja: niedziela 05 lis 2017, 02:46

Re: C++ od zera na AVR

Postautor: piotrek » wtorek 07 lis 2017, 22:12

Pytanie na początek: czy chcesz się nauczyć C++? czy znasz dobrze C++?
To istotne, bo nauka programowania powinna się zacząć od pisania programów na PC, czyli w przyjaznym środowisku, z debugerem itp.
Zaczynanie programowania zorientowanego na mikrokontrolery to zły początek.
Programy na uc mają istotne ograniczenia, przykladowo:
- ograniczony rozmiar stosu;
- funkcje muszą być reentrantne, czyli nierekurencyjne - kazde wywolanie funkcji nie zmienia stosu;
- brak heapa, czyli niemożność wykonania new albo malloca.

Nauka programowania od zera zaczynajac mikrokontrolery to w ogole jakis poroniony pomysl wg mnie.
Mam tu na mysli wszelkie kursy programowania na arduino, avr itp.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1089
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: C++ od zera na AVR

Postautor: Antystatyczny » wtorek 07 lis 2017, 22:41

piotrek pisze:To istotne, bo nauka programowania powinna się zacząć od pisania programów na PC


Trudno się z tym zgodzić. Programowanie można opanować równie dobrze i szybko, ucząc się na mikrokontrolerach. Osobiście odnoszę wrażenie, że nauka na mikrokontrolerach jest momentami wręcz banalnie łatwa, bo wszystko jest transparentne.

piotrek pisze:funkcje muszą być reentrantne


Nie muszą być - o tym decyduje programista. Zasadniczo program realizowany jest liniowo, a więc wywołana funkcja wykonywana jest od początku do jej zaprogramowanego końca, a przerwać jej naturalny przebieg może przerwanie. Ponowne wywołanie funkcji, z której się nie wyszło, spowoduje trudne do przewidzenia przez programistę skutki. To jest oczywiście taki dość naciągany przypadek. Funkcje wywoływane w przerwaniach są zazwyczaj odpowiednio nazwane, by nikt nie miał wątpliwości, że właśnie do tego służą.

piotrek pisze:brak heapa, czyli niemożność wykonania new albo malloca.


Sterta (heap) jest jak najbardziej obecna i można z niej korzystać w AVR. Inną sprawą jest sensowność jej użycia, narzut kodu oraz fragmentacja pamięci. Malloc w AVR działa pierwszorzędnie, co niejednokrotnie sprawdziłem. Dynamicznej alokacji nie miały wcześniejsze wersje narzędzi programistycznych dla PIC16/18, ale ta sytuacja uległa zmianie. Mimo to malloc nie jest polecany przy PIC z powodu bankowanej pamięci i dodatkowych komplikacji z tym związanych. Temat jednak tyczy się AVR, a więc powtórzę, że sterta oraz dynamiczna alokacja są obecne i operatywne.

piotrek pisze:Nauka programowania od zera zaczynajac mikrokontrolery to w ogole jakis poroniony pomysl wg mnie.
Mam tu na mysli wszelkie kursy programowania na arduino, avr itp.


Każdy średnio rozgarnięty człowiek nauczy się tego, w stopniu umożliwiającym pisanie prostych programów, w ciągu kilku miesięcy. Nie widzę w tym pomyśle niczego poronionego. Bierzesz kawałek mikrokontrolera oraz książkę/kurs i zaczynasz studiować. Jak dla mnie najlepsza nauka (sam się tak nauczyłem).
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
piotrek
Newb
Newb
Posty: 69
Rejestracja: niedziela 05 lis 2017, 02:46

Re: C++ od zera na AVR

Postautor: piotrek » wtorek 07 lis 2017, 23:31

A co jeżeli taki programista, który zaczynał od programowania uc, jest już pewien swoich umiejętności i dostanie zadanie np. posortować tablicę miliona intów albo znaleźć liczbę elementów w pewnym przedziale czy chociażby wyświetlić wszystkie elementy drzewa w kolejności od lewej do prawej.

Takich rzeczy nie nauczy się w ograniczonym środowisku AVR. Nie wspominam tutaj nawet o takich dobrodziejstwach C++ jak biblioteka STL czy boost.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1089
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: C++ od zera na AVR

Postautor: Antystatyczny » środa 08 lis 2017, 00:05

piotrek pisze:A co jeżeli taki programista, który zaczynał od programowania uc, jest już pewien swoich umiejętności i dostanie zadanie np. posortować tablicę miliona intów albo znaleźć liczbę elementów w pewnym przedziale czy chociażby wyświetlić wszystkie elementy drzewa w kolejności od lewej do prawej.


Wtedy taki programista poszerzy wiedzę, którą dotychczas posiadał. Co za problem doczytać o Boost, STL czy Qt? Również nikt nie będzie płakał z powodu braku biblioteki SDL2 na AVR, a trzeba przecież napisać grę. Te "a co jeżeli" można mnożyć niemal w nieskończoność, przerzucać argumenty na szale jednej lub drugiej strony w dyskusji, a prawda jest taka, że ludzie mają różne zapotrzebowania. Dla Ciebie kluczowe są wspomniane już biblioteki, a dla mnie kluczowy jest dostęp do "drutów", a z bibliotek lubię HAL czy odchodzący już w niebyt SPL.

Żeby już nie przedłużać...

Zonced pisze: (składnie C++ znam i programowałem na komputery w nim)


Autor wątku wyraźnie zaznaczył, że nie jest początkującym programistą w ogólnym znaczeniu. Składnia języka oraz zasady programowania są mu znane, a pyta o warstwę sprzętową i jej najbliższe okolice.

Myślę, że w bibliotekach pisanych dla środowiska arduino można znaleźć rozwiązania dotyczące dostępu do "drutów" z poziomu języka C++.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
mokrowski
User
User
Posty: 157
Rejestracja: czwartek 08 paź 2015, 20:50
Lokalizacja: Tam gdzie Centymetro

Re: C++ od zera na AVR

Postautor: mokrowski » środa 08 lis 2017, 00:21

@Zonced rzeczywiście, mało jest literatury na ten temat. Przychylam się do zdania @Antystatyczny. Zacznij od C na AVR poszerzając swoją wiedzę o C++ programując na PC. Tworzenie wydajnego kodu w C++ na AVR (zresztą nie tylko na tym MCU), wymaga już biegłego zaznajomienia się np. z szablonami.
Dość że jak zapytasz, bardzo chętnie odpowiem a i przykłady kodu chętnie wrzucę :-)
Jest kilka wątków na tym forum związanych z pisaniem kodu w C++ na AVR. W nich także pytaj :-)

PS. O sortowanie miliona int'ów i drzewa także możesz zapytać :-)
,,Myślenie nie jest łatwe, ale można się do niego przyzwyczaić" - Alan Alexander Milne: Kubuś Puchatek


Wróć do „Programowanie AVR w C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość