Autor: Dondu
Hej!
Ponieważ często pytacie mnie za pomocą PW oraz w tematach na forum Elektrody, kiedy pojawi się następna książka oraz co w niej się znajdzie informuję więc, że podstawą jest rodzina XMega Atmel'a, a znajdziecie w niej sporo przykładowych programów, w tym o komunikacji (także radiowej) oraz coś dla miłośników robotyki.
Finalnie będzie około (a może ponad) 1000 stron, więc każdy coś dla siebie znajdzie. No i ciągle piszę nowe rozdziały ...
Tymczasem chciałbym poznać Wasze zdanie dot. C++, stąd mam gorącą prośbę o wzięcie udziału w krótkiej ankiecie oraz ewentualne jej skomentowanie poniżej.
Pozdrawiam,
Tomasz Francuz
znam C++ i moim zdaniem na uC to przerost...
OdpowiedzUsuńUważam że C++ nie nadaje do takich prostych mikrokontrolerów jak Atmega8/16/32. Powodowało by to nadmierną ilość bytów w ograniczonej pamięci. C++ jest dobry dla czegoś z conajmniej Cortexem. Oczywiście jak ktoś się uprze to może pisać w asemblerze na Cortexie-4 w JAVIE na atiny, tylko czy jest to optymalne rozwiązanie?
OdpowiedzUsuńDo kolegi od przerostu...
OdpowiedzUsuńPrzerost? Tak samo mówili kiedyś o pisaniu obiektowo na komputery. System operacyjny to też przerost, a jakoś się używa. Interfejs graficzny? Przerost... Przecież w konsoli możesz wszystko wklepać i nie obciążać sprzętu niepotrzebnie.
Podsumowując:
Wszystko zależy od zastosowania.
Jeśli C++ to przerost dla AVR, to takim samym przerostem jest C. C++ sam od siebie nie ma żadnych narzutów. Problemem jest raczej to, że osoby znające C próbują udowodnić, że C++ ma jakieś narzuty i piszą w nim jakieś przykłady (często po parę instrukcji) ilustrujące tą tezę. A że C++ nie znają to im babole wychodzą :) Aby nie toczyć jałowych dyskusji, proszę oponentów o konkretne przykłady kodów, pokazujące jaki to C++ jest be :)
OdpowiedzUsuńGorąca prośba. Tak na wszelki wypadek proszę ewentualnych dalszych komentujących o rzeczową i spokojną dyskusję. :-)
OdpowiedzUsuńpPoniekąd kiedyś ludzie odrzucali C++ na PC no bo "skoro UNIX w całości w C był pisany to nie ma nic lepszego". Pewnie już niedługi C++ i myślenie obiektowe w całości przejdzie do mikrokontrolerów, a "jakieś tam C" pozostanie dla fanatyków.
OdpowiedzUsuńJest w tym sporo prawdy, co można zauważyć w przeglądając historycznie dokumentację Microchipa. Stare przykłady zawierają wyłącznie assemblerze, nowe prawie wyłącznie w C. Co będzie dalej zobaczymy w następnych latach ...
OdpowiedzUsuńMyślę, że już tak się dzieje - np. gcc, który od lat był rozwijany w C, od wersji 4.8 jest przepisywany na C++. W przypadku mikrokontrolerów warto pamiętać, że przejście na C++ nie oznacza konieczności korzystania ze wszelkich mechanizmów jakie ten język udostępnia - np. wyjątków. Warto skorzystać z tego co jest wygodne, np. domyślnych zmiennych, lepszej kontroli typów, przeciążania operatorów, czy szablonów.
OdpowiedzUsuńNo cóż... Dzierganie tego samego kodu jest o tyle uzasadnione o ile jest wymagana odpowiednia szybkość działania oraz... koszt wykonania projektu na tyle duży aby tracić czas na debugowanie... Ponowne, tego samego kodu. Jednym słowem czyste "C" to +niekiedy+ strata czasu nawet jeśli mamy do dyspozycji genialne biblioteki. Na dokładkę STM32 można kupić poniżej 1$, który posiada wystarczające zasoby aby myśleć nawet o całkiem sporym programie napisanym w C++.
OdpowiedzUsuńZNAM PARE PROGRAMÓW NP JUZ WAM DAJE
OdpowiedzUsuńNA:
GDY KLIKNIESZ GUZIK DIODA SIE SWIECI:::::::
#include
#include
#define LED_PIN (1<<PB2)
#define LED_TOG PORTB ^= LED_PIN
#define KEY_PIN (1<<PB0)
#define KEY_DOWN ! (PINB & KEY_PIN)
uint8_t klawisz_wcisniaty(void) ;
int main (void)
{
DDRB |= LED_PIN;
PORTB |= LED_PIN;
DDRB &= ~KEY_PIN;
PORTB |= KEY_PIN;
while(1)
{
if( klawisz_wcisniaty() )
{
LED_TOG;
_delay_ms(200) ;
}
}
}
uint8_t klawisz_wcisniaty(void)
{
if( KEY_DOWN )
{
_delay_ms(80) ;
if( KEY_DOWN ) return 1;
}
return 0;
}
Uważam, że C++ wcale nie musi być przerostem nad C. Wykonałem kilka projektów w C++ i jestem bardzo zadowolony z rezultatu. Obecnie piszę prawie w całości w C++. Wciąż uczę się nowych rzeczy i ulepszam swój kod. Dlatego wydaje mi się że krążące złe opinie są wynikiem niewiedzy. Myślę że to byłby świetny pomysł, aby pojawiło się kilka artykułów na ten temat. Kto jak kto, ale Pan Panie Tomaszu najlepiej nadaje się do napisania ich. Czytałem wszystkie Pana książki oraz bloga i uważam że ma Pan odpowiednią wiedzę, doświadczenie i umiejętności, aby zebrać najistotniejsze informacje i opisać je w przystępnej formie.
OdpowiedzUsuńCała potęga C++ polega na tym, że ucząc się tego języka zaliczamy jednocześnie C oraz otwieramy drzwi do C#, Javy, PHP itp... Nieprawdą jest, że kod wynikowy C++ na AVRy jest dłuższy niż C. Wystarczy przejrzeć assemblerowy plik .lss w AVR Studio. Poza tym ilość pisanego kodu jest o niebo mniejsza niż w C; pod warunkiem, że korzysta się z klas, które skrywają całą mechanikę programu i operacji na danych. W C++ w jednej tylko deklaracji zmiennej np. Mojtyp zmienna; można ukryć wykonanie kilkudziesięciu funkcji, podczas gdy w C możemy jedynie zarezerwować pamięć. W języku C brakowało mi np referencji, przeciążania (operatorów, funkcji), szablonów. Korzystanie z C++ po prostu ułatwia mi i przyspiesza programowanie przede wszystkim na AVRach.
OdpowiedzUsuńSą jakieś poradniki jak programować w c++ na avr?
Usuńhttps://microgeek.eu/viewforum.php?f=70 Tutaj coś znajdziesz
OdpowiedzUsuńNa AVR powinno się pisać w C#, Java, Python wtedy byłoby jeszcze prościej.
OdpowiedzUsuń