Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[asm]STM32 czy AVR do nauki asemblera?

kop524 12 Kwi 2018 18:48 801 19
  • #1 12 Kwi 2018 18:48
    kop524
    Poziom 2  

    Witam otóż chcę się nauczyć asemblera ale nie wiem, który lepiej wybrać na początek AVR czy ARM??? Od razu mówię, że miałem na uczelni wstęp do asemblera na x86 ale chciałbym coś innego na pczątek więc co najlepiej z tych dwóch w tym celu i jakie środowisko do programowania tego?


    Pozdrowionka :)

    0 19
  • #2 12 Kwi 2018 19:22
    excray
    Poziom 39  

    Zdecydowanie AVR. Asembler w tych mikrokontrolerach jest prosty, przyjazny i logiczny.

    0
  • #3 12 Kwi 2018 19:22
    tmf
    Moderator Mikrokontrolery Projektowanie

    Najpierw zadaj sobie pytanie po co chcesz uczyć się asemblera? Bo o ile w przypadku AVR jeszcze jakiś sens tego jest, o tyle w przypadku ARM sensu to nie ma praktycznie żadnego. Oczywiście pisząc w języku wyższego poziomu warto mniej więcej orientować się w asemblerze, czasami się to przydaje, lecz uczenie się samego asemblera współcześnie jest lekko bez sensu.
    Poza tym asembler, jak to asembler, nauki tu za wiele nie ma, raptem kilkadziesiąt instrukcji wałkowanych na różne możliwości. Jeśli to ma być tylko chwilowa zabawa i powierzchowne poznanie asemblera, to w sumie obojętnie, chociaż jeśli zamierzasz tracić czas, to mniej go stracisz używając asemblera AVR :) Jak już zrozumiesz bezsensowność tego wyboru, to przejdź do języka wyższego poziomu, a tu platforma jest mniej więcej obojętna, gdyż główną zaletą jezyków wyższego poziomu jest abstrakcja od sprzętu.

    0
  • #4 12 Kwi 2018 19:29
    linuxtorpeda
    Poziom 20  

    Co znaczy "na początek"? Ucz się tego, co jest Ci potrzebne lub co sprawia Ci przyjemność.

    Jeśli chodzi o pracę zawodową, to znajomość assemblera jakiejkolwiek architektury nie jest zbyt pożądaną umiejętnością, ale jeśli już się gdzieś pojawia na ofertach, to jest to albo x86 albo ARM.

    0
  • #5 12 Kwi 2018 19:40
    JacekCz
    Poziom 36  

    tmf napisał:
    Najpierw zadaj sobie pytanie po co chcesz uczyć się asemblera? Bo o ile w przypadku AVR jeszcze jakiś sens tego jest, o tyle w przypadku ...
    Poza tym asembler, jak to asembler, nauki tu za wiele nie ma, raptem kilkadziesiąt instrukcji wałkowanych na różne możliwości. Jeśli to ma być tylko chwilowa zabawa i powierzchowne poznanie asemblera, ... jeśli zamierzasz tracić czas ...


    Zgadzam się. Znac dobrze, albo (prawie) wcale.

    Choć mam wrażenie że chodzi o bycie kul, trendi ... Konstytucja zapewnia wolność religijną, i każdy moze być prorokiem dla samego siebie.

    EDIT: dla chcących widzieć w szerszej perspektywie (albo nie zmarnować czasu przy kawie) posłuchajcie ludzi z tego kręgu:

    Link

    0
  • #6 12 Kwi 2018 20:18
    kop524
    Poziom 2  

    Otóż chodzi m i o to aby poznać co generuje taki kompilator C, C++ itp. jako wynik i się w tym orientować bo np. C czy Python jako tako ogarniam i chciałbym poznać od "podszewki" to co mi tworzy na wyjściu. Natomiast chodzi mi po to aby później można było właśnie przejść na C/C++ i robić dalej. A z tego co powiedzieliście lepiej wyjdę kupując STM32 Nucleo niżeli coś na AVR ew. jeśli są jakieś propozycje innych modułów dostępnych w polsce to czemu nie byle za sam moduł zamknąć się w 100pln + ew. wysyłka choć wolał bym się zmieścić w 100 :)

    Dzięki za wszystkie odp.

    0
  • #7 12 Kwi 2018 20:31
    3149400
    Użytkownik usunął konto  
  • #8 12 Kwi 2018 20:45
    JacekCz
    Poziom 36  

    Moim zdaniem wiedza niedokładnie przekłada się na pieniądze, nie jest liniowa, a wręcz jest konstrukcją szarpaną. Nie kosztuje 100zł.
    W zdobywaniu wiedzy (nie chcę wchodzić w filozoficzne konotacje, czy skądinąd ciekawe jak np angielski odróżnia od umiejętności) ... najciekawsze i najbardziej charakterystyczne jest "zmarnowanie" czasu i środków. W długiej perspektywie nie jest to zmarnowanie, ale nie da się tego z góry przewidzieć.

    Stawiam tezę za @tmf, ze wygenerowanego kodu ARM-owego nie przeanalizujesz. Target twórców procesora był "aby się dobrze pisało kompilatory" *) a nie "aby się dobrze pisało kod maszynowy" **) (mój faworyt , choć z przeszłości, Z80). Otrzymałeś od tmf radę, pytasz odwrotnie o stówkę.

    A w sensie węższym, sztuki i języków programowania, ukułem kiedyś swoje własne twierdzenie ;)
    ucząc się trzeciego języka programowania, ale mówię o poziomie naprawdę dobrym, dopiero zaczyna się głęboko rozumieć pierwszy

    A jak dodając A+C, ale może dokładniej C+Python, zainteresowałeś się bebechami?
    API Pythona od strony C jest udokumentowane, jak się robi rozszerzenie i integruje itd... pouczające doświadczenie. bez ani złotówki.

    *) duża ilośc niemal jednakowych rejestrów.
    **) niewielka ilość rejestrów, w praktyce każdy ze smaczkiem, który trzeba znać (pod doświadczonych programistów)

    0
  • #9 12 Kwi 2018 21:07
    tmf
    Moderator Mikrokontrolery Projektowanie

    kop524 napisał:
    Otóż chodzi m i o to aby poznać co generuje taki kompilator C, C++ itp. jako wynik i się w tym orientować bo np. C czy Python jako tako ogarniam i chciałbym poznać od "podszewki" to co mi tworzy na wyjściu.

    Do podglądu nie potrzeba sprzętu. Skompiluj sobie program na dowolną platformę, gcc ma możliwość zostawienia pliku asm, który wygeneorwał, możesz sobie więc podglądnąć jak to się przekłada. Akurat zabawy jest z tym na parę dni, potem to nudne. Sam kod można zasymulować, np. dla AVR masz symulator w Atmel Studio, więc bez procesora sobie to prześledzisz. Symulator w tym przypadku będzie nawet lepszy niż prawdziwy sprzęt. Możesz też poczytać o bebechach kompilatora, do gcc masz pełną dokumentację. W sumie to, w jaki sposób kompilator tłumaczy kod np. C jest IMHO ciekawsze niż efekt końcowy, czyli gotowy plik asemblerowy. Pożytek z tej wiedzy też żaden, o ile nie chcesz zostać developerem gcc, ale przynajmniej poznasz jakieś nowe koncepcje.
    Resztę wyjaśnił kol. @JacekCz

    0
  • #10 12 Kwi 2018 21:34
    3149400
    Użytkownik usunął konto  
  • #11 12 Kwi 2018 21:48
    JacekCz
    Poziom 36  

    nowyARM napisał:
    JacekCz napisał:
    a nie "aby się dobrze pisało kod maszynowy" **) (mój faworyt , choć z przeszłości, Z80).

    MC68k ma najprzyjemniejszy Assembler.


    Minęło mnie programowanie w/w, ale pasjami o nim czytałem. Nie będę się kłócić :)
    Przez mgłę pamięci wydaje mi się taki "środkowy" w sensie symetrii/asymetrii rejestrów

    0
  • #12 12 Kwi 2018 21:48
    kop524
    Poziom 2  

    2łaśnie do tego zachęcił mnie artykuł nt. "kompilatory od środka" z linux magazine mnie zachęcił do poznawania tych rzeczy :)

    0
  • #13 12 Kwi 2018 21:54
    tmf
    Moderator Mikrokontrolery Projektowanie

    kop524 napisał:
    2łaśnie do tego zachęcił mnie artykuł nt. "kompilatory od środka" z linux magazine mnie zachęcił do poznawania tych rzeczy


    Kompilator od środka nie znaczy asembler. Poczytaj np. "gcc internals". Samo przełożenie tego co wygeneruje kompilator na asembler platformy docelowej to zaledwie ostatni, malutki kroczek w złożonym procesie kompilacji programu. W dodatku najprostszy i chyba najnudniejszy :) No, może nudniejszy jest etap konsolidacji.

    0
  • Pomocny post
    #14 12 Kwi 2018 22:47
    linuxtorpeda
    Poziom 20  

    kop524 napisał:
    Otóż chodzi m i o to aby poznać co generuje taki kompilator C, C++ itp. jako wynik i się w tym orientować bo np. C czy Python jako tako ogarniam i chciałbym poznać od "podszewki" to co mi tworzy na wyjściu.


    Zainteresuj się twórczością Yuricheva https://beginners.re/ . Analizuje od podszewki programy kompilowane na x86 i ARM.

    0
  • #15 13 Kwi 2018 08:41
    BlueDraco
    Specjalista - Mikrokontrolery

    Jeżeli chcesz się uczyć języka asemblerowego w celu lepszego zrozumienia komputera, to sugerowałbym x86. Nie jest to jakaś jasna i prosta konstrukcja, ale konwencja wołania i schematy rozwijania kodu przez kompilator są w miarę proste i przejrzyste, więc łatwo się czyta, pisze i rozumie.
    Asembler ARMa jest dla ekspertów - nie jest ani łatwy do nauki, anie pożyteczny w praktyce. Asembler AVR, całkiem sympatyczny jak na 8-bitowce, tylko po co?
    Odradzam też 51, PIC12/16 - proste, wręcz prymitywne, ale przestarzałe i zupełnie niepodobne do niczego, co współczesne

    Można zastanowić się nad:
    68k - piękny i dydaktyczny, ale zupełnie bezużyteczny (za to jest ładne środowisko dydaktyczne Easy68k na PC)
    MIPS - jeszcze ładniejszy i RISC, jest parę zgrabnych symulatorów dydaktycznych, np. MARS.

    0
  • #16 13 Kwi 2018 08:52
    kop524
    Poziom 2  

    A macie jakieś dobre źródła do nauki asm X86?? Może być po polsku lub angielsku to mi obojętne.

    0
  • #17 13 Kwi 2018 09:06
    JacekCz
    Poziom 36  

    kop524 napisał:
    A macie jakieś dobre źródła do nauki asm X86?? Może być po polsku lub angielsku to mi obojętne.


    Pierwsze, co Ci wrzucę, to same tytuły.
    Symbol 86 jakby się doktoryzować oznacza 16 bitowiec (rejestry AX,BX itd oraz segmentowe DS,ES,CS ... ), gdy większość internetowych treści idzie linią 32b (dostępną od 386) z rejestrami AEX itd
    Przypomina mi to żydowski dowcip o restauracji w Nowy Yorku, i ku zdumieniu gości kelnerzy Chińczycy mówią perfekcyjnym Jidysz. Na pytanie któregoś z gości "Ćśśśśśś, oni myślą, że uczą się po angielsku"

    0
  • #18 13 Kwi 2018 09:49
    BlueDraco
    Specjalista - Mikrokontrolery

    Współcześnie (zresztą od 25 lat) "x86" oznacza 32-bitową wersję 86, którą programuje się praktycznie wyłączenie w trybie "płaskim", w którym programista może zapomnieć o istnieniu rejestrów selektorów. Gdzieś Ty się uchował z tymi 16 bitami?

    "Dobre źródła" - to wielki manual Intela, opis konwencji wołania x86 i studiowanie tego, co wypluwa kompilator oraz tysiące różnej jakości witryn internetowych. Jest też ciekawa witryna www.agner.org..

    0
  • #19 13 Kwi 2018 10:47
    JacekCz
    Poziom 36  

    BlueDraco napisał:
    Współcześnie (zresztą od 25 lat) "x86" oznacza 32-bitową wersję 86, którą programuje się praktycznie wyłączenie w trybie "płaskim", w którym programista może zapomnieć o istnieniu rejestrów selektorów. Gdzieś Ty się uchował z tymi 16 bitami?


    Sądzę, ze produkcyjnego kodu 32b nie wykonałem ani linijki, a 16b bywało, panocku, bywało, czasem order dali, czasem uścisk ręki prezesa, czasem nic (wg wojskowej definicji 0,5l / 2)
    Mowa o ASM/inline C.

    0
  • #20 13 Kwi 2018 11:59
    _lazor_
    Moderator Projektowanie

    Moim zdaniem nauka sama w sobie assemblera nie ma sensu, w czystym assemblerze już raczej nikt nie pisze, co innego intrinsics które są namiastką assemblera i bez nich nie da się wyciągnąć pełnych możliwości niektórych architektur (np cortexy m3 w górę).

    Inna sprawa analiza assemblera, to już warto znać gdyż kompilator (zwłaszcza przy optymalizacji) potrafi trochę namieszać, najczęściej z błędu programisty. I wtedy do wyszukania błędu warto przeglądnąć assemblera.

    Bardziej wartościowym w moim mniemaniu jest naprawdę porządne nauczenie się C, gdyż udowodniono mi że używanie takich rzeczy jak const, volatile czy restricted można naprawdę mocno wpłynąć na kod wynikowy i optymalizację kodu.

    Polecam stronkę:

    https://godbolt.org/

    Dzięki niej możesz zobaczyć różnice w kodzie wynikowym między różnymi kompilatorami, optymalizacjami czy zapisem samego kodu.

    0