Skocz do zawartości
Adamos

Assembler jako pierwszy język programowania uC?

Pomocna odpowiedź

Adamos, jednak przyznasz chyba, że jeśli ktoś chce traktować mikrokontrolery jako hobby, to nie jest mu asm konieczny do szczęścia?

Udostępnij ten post


Link to post
Share on other sites

Generalnie uważam że warto znać troszkę asemblera. Pomaga to optymalizować programy. Jednak nie opłaca się robić w tym języku większych projektów. Jest to strasznie czasochłonne, a jeżeli brakuje nam zasobów to wybieramy mocniejszy mikrokontroler.

Udostępnij ten post


Link to post
Share on other sites
Adamos, jednak przyznasz chyba, że jeśli ktoś chce traktować mikrokontrolery jako hobby, to nie jest mu asm konieczny do szczęścia?

Masz rację, do szczęścia nie, ale i tak wszystko sprowadza się do asemblera, więc warto poznać ten język programowania. Asm pozwala tak naprawdę poznać uC od środka 🙂

Ja osobiście nie wyobrażam sobie innej drogi, ale to tylk omoje subiektywne i skromne zdanie 🙂

Pozdro600

Udostępnij ten post


Link to post
Share on other sites

Tak, najlepiej klepmy od razu kod maszynowy, przecież wszystko sprowadza się do kodu maszynowego więc po co pisać w jakimkolwiek innym języku?

Oczywiście że warto znać ASM, ale ciężko będzie znaleźć osobę, która musiała sięgnąć po niego, bo nie dało się czegoś zrobić w C. Nie uznałbym tego jako podstawy i pierwszego kroku w nauce programowania.

Udostępnij ten post


Link to post
Share on other sites
zdecydowanie polecam ASEMBLER.

Podstawa czego niby? Akurat podstawą jest C, bo z niego potem wychodzą języki podobne: C++, C#, Java itd. I tak samo jeśli chodzi o oferty pracy - jest masa wymagajacych C/C++, trochę wymagających Asm i C i żadnych wymagajacych tylko Asm i bez C. Asm to dodatek, który się przydaje (warto czasami znać znaczenie poszczególnych komend, ale nei ma potrzeby umeić w nim pisać).

Asm pozwala tak naprawdę poznać uC od środka

A ja się zapytam po co, skoro obecnie idzie sie w kierunku uniwersalności kodu (w końcu) aby dało się łatwiej przenosić go na inne procesory. Obecnie brzydkim rozwiązaniem jest już bezpośrednie odwoływanie się do rejestrów - powinno się to robić albo przez funkcje biblioteczne, albo ew. przez definicje preprocesora umieszczone w 1-2 plikach nagłówkowych dla całego projektu. W efekcie przy migracji nie zmieniasz 20 plików, tylko 3-4.

który język polecacie na początek?

Na koniec odpowiem na to pytanie: Zależy. Do uC tylko i wyłącznie C, zresztą masz jakiś wybór? Ja np. chętnie bym porobił w C++, nawet jeśli bym w 99% pisał kod w C. Klasy to jest genialna sprawa 🙂

Natomiast do programowania w ogóle to warto kilkanaście godzin poświęcić na Pascala albo jakiegoś Basica, aby widzieć, że kod może być tak napisany, aby był czytelny.

Udostępnij ten post


Link to post
Share on other sites
Podstawa czego niby? Akurat podstawą jest C, bo z niego potem wychodzą języki podobne: C++, C#, Java itd. I tak samo jeśli chodzi o oferty pracy - jest masa wymagajacych C/C++, trochę wymagających Asm i C i żadnych wymagajacych tylko Asm i bez C. Asm to dodatek, który się przydaje (warto czasami znać znaczenie poszczególnych komend, ale nei ma potrzeby umeić w nim pisać).

Przy takim podejściu to nawet nie będę Ci tłumaczył bo nie warto.

Udostępnij ten post


Link to post
Share on other sites

Nie ma co, piękne podejście 😃 Powienieneś podać jakiś konkretny argument.

Udostępnij ten post


Link to post
Share on other sites
Podstawa czego niby? Akurat podstawą jest C, bo z niego potem wychodzą języki podobne: C++, C#, Java itd. I tak samo jeśli chodzi o oferty pracy - jest masa wymagajacych C/C++, trochę wymagających Asm i C i żadnych wymagajacych tylko Asm i bez C. Asm to dodatek, który się przydaje (warto czasami znać znaczenie poszczególnych komend, ale nei ma potrzeby umeić w nim pisać).

Przy takim podejściu to nawet nie będę Ci tłumaczył bo nie warto.

No to kolega z odpowiedzią się nie popisał... rozwiń myśl, podaj argumenty itd.

Udostępnij ten post


Link to post
Share on other sites

Ja powiem jeszcze tak: nie twierdzę, że ASM jest bezużyteczny, ale jego użyteczność dla uC praktycznie minęła - już nie jest tak, że 99% układów to 8051 z identycznymi listami rozkazów, a kompilatory już o tyle lepiej optymalizują, że człowiekowi na piechotę niektóre rzeczy ciężko byłoby zrobić nawet podobnie dobrze. Kod w C na upartego możesz nawet na PC uruchomić i jeśli nie będzie korzystał z hardware to będzie działał.

A jeśli chodzi np. o liczenie rozkazów: po pierwsze Gcc do AVRów tworzy plik z zapisem kodu w assemblerze, po drugie procesory potrafią robić kilka instrukcji w jednym takcie i teraz juz nei jest tak łatwo przeliczyć na zasadzie, że sobie zsumujemy liczbę taktów na instrukcję i będziemy znali czas wykonania. Co to to nie, teraz najdokładniejszym sposobem jest zmiana stanów nóżek na oscyloskopie i ocenainie na tej podstawie.

I ostatnie: czytelność kodu. W C idzie pisać czytelnie (chociaż niektórzy nie potrafią, a wiele sztuczek wymaga dodatkowego komentarza), w ASM już gorzej.

Udostępnij ten post


Link to post
Share on other sites
Generalnie uważam że warto znać troszkę asemblera. Pomaga to optymalizować programy.
Też tak długo myślałem, ale to było prawdą kilka(naście) lat temu. Obecnie kompilatory są bystrzejsze od połowy programistów 🙁

Moim pierwszym językiem na komputer (zaczynałem od 32-bitowego 386) był Assembler. Dlaczego? Ano, zajrzałem do PC Kuriera, działu dla praktyków, gdzie były kody źródłowe jakichś testowych programów. Były akurat 3 języki: Pascal (wydawał mi się rozlazły, mnóstwo pisania po angielsku, a wtedy byłem na poziomie Muzzy'ego z Gondolandu), C/C++ (widziałem same hashe i krzaki) i Assembler (bach! klarowny, krótkie polecenia, wydawał się najłatwiejszy 😅 )

Jak parę lat później zacząłem klepać w Pascalu, to pierwsze programy to i tak były begin asm {wstawka w asm} end; end.

Tak, znajomość Assemblera dodaje +30 do znajomości platformy, do wiedzy jak to tam działa, gdzie te bity lecą i co robią. Uznaję, że ta wiedza jest nieoceniona dla wytrawnego programisty chcącego do perfekcji opanować platformę.

ALE... jak pokazuje Arduino, dla zwyczajnych zjadaczy chleba, którzy chcą zacząć od migania diodą, zrobienia światłoluba etc, to wyższa warstwa abstrakcji daje mniejszy próg do przekroczenia, większą pewność w działaniu i krótszą krzywą nauki. Nic tak nie zniechęca, jak setna poprawka w rejestrach bo nam PWM krzywo wychodzi i serwo łamie zębatki.

Skoro już ustalono, że książka jest bardziej dla początkujących a nie TOP50, to zdecydowanie C będzie lepszym pomysłem niż Assembler. Do tego w necie mamy 300x więcej przykładów w C rozwiązania konkretnych problemów, co też ma dziś znaczenie. Jak ja uczyłem się języków, to nawet manuala do języka nie miałem, więc przepisywałem program, odpalałem, patrzyłem co robi, a potem metodą prób i błędów patrzyłem co robi po moich (na początku dość losowych) modyfikacjach. Teraz nauka programowania to bułka z masłem w porównaniu z latami 90.

Udostępnij ten post


Link to post
Share on other sites
Nie ma co, piękne podejście 😃 Powienieneś podać jakiś konkretny argument.

Powinienem ? Raczej Ty powinieneś podejść bardziej krytycznie do siebie.

Wypowiedź typu "programuję tylko w C" i nie mam pojęcia o asm, więc asm jest bee, niezbyt mnie przekonuje do tego żeby cokolwiek Ci tłumaczyć. Poczytaj trochę i wtedy pogadamy.

I wcale nie chcę nikogo przekonać, że należy programować tylko w asemblerze bo to było by bardzo nieefektywne gdy mamy do dyspozycji C lub bascom. Jednak pytanie dotyczyło który język polecamy na początek i w tym temacie będę upierał się przy swoim.

Pozdro

Udostępnij ten post


Link to post
Share on other sites

Tylko że wiesz, OldSkull już dość długo udziela się na forum, jakbyś sam trochę poczytał jego postów to byś wiedział, że traktując go w ten sposób trochę się ośmieszasz.

Jak na razie nikt nie podziela twojego zdania, a ty zamiast go bronić stwierdzasz że nie chce ci się tłumaczyć takim niedoukoum jak my. Jeśli oczekujesz oklasków tylko za to że potrafisz programować w ASM to niestety, ode mnie nie usłyszysz.

Wypowiedź typu "programuję tylko w C" i nie mam pojęcia o asm, więc asm jest bee, niezbyt mnie przekonuje do tego żeby cokolwiek Ci tłumaczyć

Jakoś nie znalazłem w tym temacie wypowiedzi, że ASM jest dla kogoś bee bo nie potrafi w nim programować.

Udostępnij ten post


Link to post
Share on other sites
Jakoś nie znalazłem w tym temacie wypowiedzi, że ASM jest dla kogoś bee bo nie potrafi w nim programować.

To że nie znalazłeś nie oznacza że nie ma takiej wypowiedzi. Bee to oczywiście przenośnia, ale możemy tak w nieskończoność łapać się za słówka.

Nikogo nie chciałem obrażać, a "niedoukom" to twoje (skoro już piszemy z małej litery) słowa.

Po prostu stwierdziłem, że nie ma sensu nic wyjaśniać bo i tak zostanie to skrytykowane jakkolwiek bym tego nie opisał.

Kończę temat. Pozdrawiam.

Udostępnij ten post


Link to post
Share on other sites

Adamos, pisałem zarówno w ASM, BASCOMIE, C, C++, C# i Javie. Uważam że C jest dość wydajnym dla większości aplikacji. Ja wolę napisać kilka fajnych aplikacji w C#, albo C (mikrokontrolery), niż poświęcić czas na jedną super wydajną.

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!

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