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

Pisanie programów i używanie bibliotek w C i Asemblerze

kamyczek 07 Wrz 2016 22:39 8250 260
  • #91 07 Wrz 2016 22:39
    JacekCz
    Poziom 37  

    Jeśli w liście rozkazowej są np skoki jednakowo pisane (o jednakowym mnemoniku) ale skutkujące innym kodem (rodzaj, zasięg skoku), taki przykład najłatwiej podać. W moim odczuciu (lekko akademickim) ma to cechy kompilacji. Jak jeszcze poszerzymy ogląd na makroassembler, zdecydowanie jest tam więcej kompilacji niż debilnego podstawiania bajt *) za ciąg literek. Tam jest proces decyzyjny (choćby zbudowanie mapy komórek aby ocenić skok - a jak miejsce nie jest jeszcze znane, drzewo syntaktyczne, które później tzreba przemarszować)

    Nie jest to proces dużo głupszy od zgarniania wejścia strumienia literek w Forth w symbole czy TCL (podałem języki które wg mojej wiedzy same z siebie nie mają w syntaxie nawet koncepcji podstawienia, 'IF' czy 'FOR')
    Nikogo nie pobiję jak powie na asemblację kompilowanie. a może poprę.



    *) scena sprzed 30 lat w labolatorium, w trójkę wykonywanym. Palcowanie kodu maszynowego z kartki z projektem, znajdz to binarnie, przez klawiaturę hex, wyświetlacz 4 cyfry do płytki ewaluacyjnej.
    Jeden był translatorem z notą listy procesora, jeden readerem źródeł, trzeci palcował itd... I taka sekwencja: pierwszy (chyba ja) "mov c,b" drugi zmęczony jak kazałem mu mówić, to MÓWI "cebe", trzeci to wpisał jako 0xCB.

  • Computer Controls
  • #92 07 Wrz 2016 23:07
    grko
    Poziom 33  

    @JacekCz Definicja z wiki:

    Cytat:

    Asembler (z ang. assembler) – termin informatyczny związany z programowaniem i tworzeniem kodu maszynowego dla procesorów. W języku polskim oznacza on program tworzący kod maszynowy na podstawie kodu źródłowego (tzw. asemblacja) wykonanego w niskopoziomowym języku programowania bazującym na podstawowych operacjach procesora zwanym językiem asemblera, popularnie nazywanym również asemblerem. W tym artykule język programowania nazywany będzie językiem asemblera, a program tłumaczący – asemblerem.


    i dalej
    Cytat:

    Języki asemblera (zwyczajowo asemblery) to rodzina języków programowania niskiego poziomu, których jedno polecenie odpowiada zasadniczo jednemu rozkazowi procesora. Języki te powstały na bazie języków maszynowych danego procesora poprzez zastąpienie kodów operacji ich mnemonikami. Dzięki stosowaniu kilkuliterowych skrótów poleceń zrozumiałych dla człowieka pozwala to z jednej strony na tworzenie oprogramowania, z drugiej strony bezpośrednia odpowiedniość mnemoników oraz kodu maszynowego umożliwia zachowanie wysokiego stopnia kontroli programisty nad działaniem procesora. Składnia języka asemblera zależy od architektury procesora, ale i używanego asemblera, jednak zwykle autorzy asemblerów dla danego procesora trzymają się oznaczeń danych przez producenta.


    W moim rozumieniu asemblera nie ma elementu translacji z jednego języka na drugi tak jak to jest w przypadku kompilatora. Zazwyczaj są pewne ułatwienia dla programisty w postaci pseudo instrukcji czy automatycznego podstawienia odpowiedniej instrukcji skoku. Jednak nadal działamy w obrębie jednego języka gdzie jedna (w 99% przypadków) instrukcja w asm jest zamieniana na jeden lub kilka słów kodu rozkazu. Jeżeli już są pseudo instrukcje, to wyraźnie jest napisane w co są zamieniane w danych okolicznościach.

    Natomiast w kompilatorze mamy do czynienia z translacją jednego języka na drugi, który jak wiemy to można wykonać na wiele różnych sposobów. W przeciwieństwie do asemblacji ten proces jest nieodwracalny w 100%. Naprawdę uważacie to za to samo?

  • #93 07 Wrz 2016 23:23
    kamyczek
    Poziom 34  

    Witaj Freddie Chopin Dawno cię tu nie widziałem ;) . Wiem że mocno bawi cię ta dyskusja . Mnie również . Najlepsze jest to że wszystko zaczęło się od asemblera i to fundament każdego praktycznie języka powiedział bym w przenośni że to alfabet , c to słownik słów zbudowany z takiego alfabetu i w zależności od platformy zmienia się właśnie ten alfabet . Nikt tu tej dyskusji nie wygra może większość przekrzyczy tylko swoje zdanie , ale to nie zmieni faktu że bez niego nie było by innych języków programowania . Pisząc że kompilator optymalizuje kod lepiej niż programista przyznajecie się do podstawowej rzeczy mianowicie tego że nie piszecie optymalnego kodu ze względu na mniejszą wiedzę od tych którzy potrafili ten kod napisać lepiej, znali i rozumieli mechanizmy działania mikrokontrolerów i znali ich budowę a tyle by znaleźć sposób na zrobienie tematu łatwiej , szybciej , lepiej ci ludzie robią to w asemblerze niestety . Co więc jeśli używacie tylko c i piszecie że was nie interesuje jak zbudowany jest mikrokontroler ja to określam mianem hołota techniczna umie jeździć autem nie umie wymienić koła . Szkoda że bycie programistą sprowadza się do znajomości strzępków wiedzy z określonej puli zagadnień . Dziękuję że udało mi się was tu skupić bo w temacie strony przybywają jak szalone i może wreszcie gadamy razem nie koniecznie zgadzając się ale broniąc swoich przekonań ;)

    Moderowany przez dondu:

    Proszę by kolega powstrzymał się od tego typu stwierdzeń, bo to nie pierwszy raz, a nie chciałbym kolegi nagradzać, czy przerywać dyskusji, bo niektóre jego argumenty są słuszne.

    3.1.9. Nie ironizuj i nie bądź złośliwy w stosunku do drugiej strony dyskusji. Uszanuj odmienne zdanie oraz inne opinie na forum.

  • Computer Controls
  • #94 07 Wrz 2016 23:30
    michalko12
    Specjalista - Mikrokontrolery

    Szooook!!!! No i wszyscy zostali hołotą techniczną!! Błeeeeeh!!!

    I po co wam to było?

  • #95 07 Wrz 2016 23:32
    2675900
    Użytkownik usunął konto  
  • #96 07 Wrz 2016 23:34
    grko
    Poziom 33  

    Cytat:

    Szkoda że bycie programistą sprowadza się do znajomości strzępków wiedzy z określonej puli zagadnień.


    Ciekawe czy to również odnosi się do ludzi religijnie programujących tylko w jednym języku?

    Cytat:

    wiki to nie Koran drogi kolego fundamentalisto. W chrześcjaństwie tak nazywano scholastyków - nie uznających niczego poza tym co powiedziane i napisane i tylko na podstawie tego dokonywać wymyślania tworów kolejnych - co oczywiście prowadziło do absurdów - np. Czy chimera unosząc się w próżni może tworzyć intencje wtórne - co nieco przypomina naszą dyskusję.


    Co to za bełkot? To jest techniczne forum a nie sprawozdania przeżyć po dopalaczach.

    Moderowany przez tmf:

    Proszę niepotrzebnie nie podgrzewać atmosfery. To samo można wyrazić łagodniej.



    Cytat:

    Naprawde w asemblerach gdzie możesz tworzyć struktury danych (struktury, unie, tablice) i operować na nich a program przeliczy te operacje na odpowiednie instrukcje (lub grupy instrukcji) jesteś w stanie odwrócić ten proces?


    Oczywiście że jesteś. I 90% kodu będzie taka sama.

    Cytat:

    Częsc asemblerów umożliwia automatyczną zmianę sekwencji rozkazów aby optymalnie wykorzystać pipelining czy inne właściwości sprzętu - czy to da się odwrócić?


    Również ten proces jest odwracalny. To tylko kolejność.

    Czy użycie preprocesora w plikach asemblerowych również nazwiesz kompilacją? W końcu można sobie zorganizować asemblera tak, żeby wstawił w ten sam kod makra wielu miejscach.

  • #97 07 Wrz 2016 23:39
    Freddie Chopin
    Specjalista - Mikrokontrolery

    @kamyczek, dopóki nie pokażesz jakiegoś super-optymalnego kodu, to ja sobie mogę pisać że jestem mistrzem kung-fu i będzie to tyle samo warte co Twoje zapewnienia, że jesteś lepszy w optymalizacji od kompilatora. Sorry. Ta dyskusja jest bezcelowa, ponieważ założenia mogą sprawić że jej główna teza jest prawdziwa lub fałszywa. Przykładowo miganie diodą na '51 albo na jakimś mikromikromikrokontrolerze może i ma sens w assemblerze, za to raczej nie sądzę abyśmy kiedykolwiek zobaczyli - przykładowo - stos TCP/IP w czymkolwiek "niżej" niż C.

    P.S. Mam nadzieję, że nie używasz kalkulatorów, bo to by oznaczało że masz "mniejszą wiedzę od tych którzy potrafili ten kalkulator zbudować lub znali i rozumieli zasady matematyki i znali ją na tyle by znaleźć sposób na zrobienie danego obliczenia łatwiej, szybciej, lepiej". Dzielenie nad kreską FTW!

    P.P.S. Żeby było jasne, obecnie używam tylko C++11, choć jak ktoś dobrze poszuka to znajdzie moje posty sprzed 10ciu lat w których twierdziłem uparcie, że liczy się tylko assembler. Od tego czasu więc albo zmądrzałem, albo zgłupiałem.

  • #98 08 Wrz 2016 00:11
    jesion40
    Poziom 27  

    Ta dyskusja jest o tyle zabawna, że mający zdecydowaną przewagę prześmiewcy wyszydzający pisanie w asemblerze bez trudu rozprawiają się z tezami, które sami stawiają. Nie zauważyłem, by tu jakiś zwolennik asm napisał, że jest gotów napisać system operacyjny, bazę danych czy choćby odtwarzacz mp3 w asemblerze i na dokładkę zrobi to szybciej, lepiej, krótko mówiąc optymalnie. Inni z kolei są łaskawi na tyle, że wielkopańskim gestem przyznają, że miganie jednym LED-em w 51 może i da się optymalnie napisać w asm, ale tu mniej więcej przebiega granica.

    Tymczasem spektrum zagadnień informatycznych jest na tyle szerokie, że trudno generalizować i nie popełnić gafy. Kolega kamyczek nie bez powodu pisał o tosterach i mikserach i na tych przykładach pytał o sensowność pakowania do nich 64bitowych uC z megabajtami pamięci. Owszem, hardware tanieje. Czy to powód by zapychać te dostępne za grosze megabajty śmietnikiem?

    Ktoś tam z pogardą skwitował to w ten sposób, że Kolega kamyczek po prostu nie zna dobrze C i dlatego z uporem godnym lepszej sprawy broni asm. Cóż, on przynajmniej swoich braków nie ukrywa. Ciekaw jestem ilu z was byłoby w stanie napisać coś poważniejszego od migania jednym LED w asm? Uprzedzając głosy oburzenia nie kwestionuję, że znacie asm, pytam na ile go znacie naprawdę? Wszak Kolega kamyczek z pewnością zna C, tyle że to nie załatwia sprawy prawda?

    Dla mnie podstawią do oceny optymalizacji współczesnego oprogramowania jest to, że np. przyzwoity edytor WUSIWUG mieścił się na dyskietce 320kB i dał się używać na Z80. Dziś bez kilku wolnych GB na dysku i dwurdzeniowego procesora taktowanego na poziomie GHz nawet nie ma się co zabierać za instalację. Tak, komputery są bez porównania szybsze, dyski pojemniejsze itd itp. Do tego słyszę że kod jest w końcu optymalny. Jeżeli jest tak dobrze, to czemu jest tak źle?

    I niech mnie nikt nie rozśmiesza pisząc o przepaści w funkcjonalności tych programów...

  • #99 08 Wrz 2016 07:56
    BlueDraco
    Specjalista - Mikrokontrolery

    Parę uwag ogólnych:

    1. Istnieje rodzina procesorów, których jedyny dostępny asembler ma składnię zbliżoną do C. Co na to kol. Kamyczek?

    2. Asembler jest kompilatorem, a asemblacja - kompilacją. Asembler MIPS zamienia jedną instrukcję symboliczną w 1..4 instrukcji maszynowych. Język maszynowy (zapis binarny) to też język.

    3. Kompilacja języka wysokiego poziomu jest odwracalna podobnie jak asemblacja.

    4. Użycie 32-bitowego uC do "tostera" lub migania diodami jest jak najbardziej na miejscu, ponieważ uC ten jest zwykle tańszy od 8-bitowego i ma sporo lepsze peryferia (np. timery z PWM). Jeśli kod kompilowany z C zajmuje 1 lub 2 KiB, to i tak nie zaoszczędzimy na cenie pamięci, bo najmniejsze dostępne wersje mają tej pamięci 8 lub 4 KiB.

    5. Na LPC1xxx można zamigać diodą przy użyciu programu w C, którego kompletna postać binarna po kompilacji ma 32 bajty. Program asemblerowy w tym przypadku nie będzia ani o bajt krótszy.

    6. Rozmiary programów wynikają na ogół nie z tego, w jakim języku zostały napisane, a z tego, jak zostały napisane. Nie bez znaczenia są tu też ogromne, często zbędne struktury danych używane przez programistów.

    7. Głównym błędem logicznym kol. Kamyczka jest łączenie ze sobą języka programowania i świadomości/poziomu wiedzy programisty. Ja np. obecnie programuję ARMy wyłącznie w C i jednocześnie bardzo mnie interesuje, jak jest zbudowany mikrokontroler, zresztą nie jestem na tym forum przypadkiem odosobnionym. Czy zdaniem kol. Kamyczka jestem wobec tego "hołotą"?
    żeby nie było - ostatnio programuję w asemblerze 8085. ;)

  • #100 08 Wrz 2016 08:16
    Freddie Chopin
    Specjalista - Mikrokontrolery

    jesion40 napisał:
    Kolega kamyczek nie bez powodu pisał o tosterach i mikserach i na tych przykładach pytał o sensowność pakowania do nich 64bitowych uC z megabajtami pamięci.

    A po co w ogóle komu mikrokontroler w tosterze albo mikserze, choćby z firmware napisanym w assemblerze? Po co w tych urządzeniach jakakolwiek elektronika cyfrowa?

    jesion40 napisał:
    Ta dyskusja jest o tyle zabawna, że mający zdecydowaną przewagę prześmiewcy wyszydzający pisanie w asemblerze bez trudu rozprawiają się z tezami, które sami stawiają. Nie zauważyłem, by tu jakiś zwolennik asm napisał, że jest gotów napisać system operacyjny, bazę danych czy choćby odtwarzacz mp3 w asemblerze i na dokładkę zrobi to szybciej, lepiej, krótko mówiąc optymalnie. Inni z kolei są łaskawi na tyle, że wielkopańskim gestem przyznają, że miganie jednym LED-em w 51 może i da się optymalnie napisać w asm, ale tu mniej więcej przebiega granica.

    Na razie sam postawiłeś jakąś tezę, że pisanie w assemblerze ma sens w pewnych zastosowaniach. Podaj w jakich, bo na tym poziomie ogólności można napisać wszystko.

    jesion40 napisał:
    Cóż, on przynajmniej swoich braków nie ukrywa.

    Zapomniałeś jeszcze o tym, że nie ukrywa swojej opinii o ludziach używających języków innych niż assembler ("hołota techniczna", "mniejsza wiedza", "mniej inteligentni", ...).

    jesion40 napisał:
    Ciekaw jestem ilu z was byłoby w stanie napisać coś poważniejszego od migania jednym LED w asm?

    Ja nawet napisałem kilka funkcji w assemblerze do swojego RTOSa <: Nie pamiętam ile dokładnie, ale tak gdzieś w rejonie pięciu, bo tyle w zupełności wystarcza, więc w sumie może ze 100 czy 200 linijek, reszta w C++11. I mniej więcej na tym dla mnie się kończy zastosowanie assemblera. Po dorzuceniu specyficznych operacji matematycznych (operacje wektorowe, fixed-point czy na niestandardowych typach wspieranych przez dany rdzeń) i pewnych operacji sprzętowych (np. włączenie/wyłączenie przerwań, często używane pod postacią funkcji inline czy wstawki) nie widzę najmniejszej potrzeby używania assemblera gdziekolwiek indziej. A już najbardziej mnie bawi argument o tym jaka to oszczędność przy produkcji milionów sztuk. Ciekawe czy na tym forum jest choć jedna osoba która projektuje coś produkowanego w milionach sztuk i zawierającego w sobie mikrokontroler... Powinny być setki takich osób, bo ten argument przewija się przez prawie każdą tego typu dyskusję.

    jesion40 napisał:
    Uprzedzając głosy oburzenia nie kwestionuję, że znacie asm, pytam na ile go znacie naprawdę?

    Ja go znam na tyle, żeby oglądając kod wygenerowany przez kompilator wiedzieć, że twierdzenia jakoby człowiek był to w stanie zrobić lepiej są bzdurą.

  • #101 08 Wrz 2016 11:13
    grko
    Poziom 33  

    Cytat:
    2. Asembler jest kompilatorem, a asemblacja - kompilacją. Asembler MIPS zamienia jedną instrukcję symboliczną w 1..4 instrukcji maszynowych. Język maszynowy (zapis binarny) to też język.


    Niech sobie nawet zamienia to w 20 instrukcji maszynowych. Nadal operujemy w obrębie jednego języka. Przykładowo dla ARM nop jest pseudo-instrukcją zamienianą na: mow r0, r0. Naprawdę nazywasz ten proces kompilacją? Obliczanie adresów etykiet to też kompilacja? W takim wypadku, czym jest asemblacja?

    Cytat:
    3. Kompilacja języka wysokiego poziomu jest odwracalna podobnie jak asemblacja.


    Jest odwracalna ale do niezrozumiałego kodu dla człowieka. Więc translacja przykładowo z C do asemblera nie jest w pełni odwracalna. W przypadku asemblera dostaniesz 95% tego co napisałeś. Nawet sprytny deasembler będzie w stanie te 4 instrukcje zamienić z powrotem do jednej pseudo-instrukcji.

  • #102 08 Wrz 2016 12:27
    2675900
    Użytkownik usunął konto  
  • #103 08 Wrz 2016 13:29
    kamyczek
    Poziom 34  

    BlueDraco napisał:

    1. Istnieje rodzina procesorów, których jedyny dostępny asembler ma składnię zbliżoną do C. Co na to kol. Kamyczek?


    Możesz mi zdradzić jaka to rodzina ?

    BlueDraco napisał:
    2. Asembler jest kompilatorem, a asemblacja - kompilacją. Asembler MIPS zamienia jedną instrukcję symboliczną w 1..4 instrukcji maszynowych. Język maszynowy (zapis binarny) to też język.


    Asembler to wyłącznie tłumacz kodu operacji Hex, bin na skrót literowy praktycznie 1:1

    BlueDraco napisał:
    3. Kompilacja języka wysokiego poziomu jest odwracalna podobnie jak asemblacja.


    Chętnie zobaczę program który zrobi z pliku .hex plik .c najlepiej do avr

    BlueDraco napisał:
    4. Użycie 32-bitowego uC do "tostera" lub migania diodami jest jak najbardziej na miejscu, ponieważ uC ten jest zwykle tańszy od 8-bitowego i ma sporo lepsze peryferia (np. timery z PWM). Jeśli kod kompilowany z C zajmuje 1 lub 2 KiB, to i tak nie zaoszczędzimy na cenie pamięci, bo najmniejsze dostępne wersje mają tej pamięci 8 lub 4 KiB.


    Zdecydowanie się zgadzam szczególnie jak ma dma, can , Ethernet . ile będzie kosztował twój najmniejszy arm w detalu ? 5 pln , 8 pln procek na którym oklepię czajnik to attiny 5 lub 10 bo mniejszego nie robią ma 4 wyprowadzenia I/O klawisz start , pwm do grzałki , czujnik temperatury i led Mam na pokładzie adc , pwm i komparator 500b lub 1k pamięci trzeba ci coś więcej ????

    BlueDraco napisał:
    5. Na LPC1xxx można zamigać diodą przy użyciu programu w C, którego kompletna postać binarna po kompilacji ma 32 bajty. Program asemblerowy w tym przypadku nie będzia ani o bajt krótszy.


    Znajdź ile zajmuje miganie diodą w AVR w moich postach masz przykład ...

    BlueDraco napisał:
    6. Rozmiary programów wynikają na ogół nie z tego, w jakim języku zostały napisane, a z tego, jak zostały napisane. Nie bez znaczenia są tu też ogromne, często zbędne struktury danych używane przez programistów.


    Możesz to odnieść do tej idealnej optymalizacji w C ?

    BlueDraco napisał:
    7. Głównym błędem logicznym kol. Kamyczka jest łączenie ze sobą języka programowania i świadomości/poziomu wiedzy programisty. Ja np. obecnie programuję ARMy wyłącznie w C i jednocześnie bardzo mnie interesuje, jak jest zbudowany mikrokontroler, zresztą nie jestem na tym forum przypadkiem odosobnionym. Czy zdaniem kol. Kamyczka jestem wobec tego "hołotą"?
    żeby nie było - ostatnio programuję w asemblerze 8085.


    Zadam ci takie pytanie gdzie widzisz konieczność użycia arma i w którym zadaniu nie poradzi sobie AVR zauważ że są jeszcze AVR32 tak na dodatek . Ja to widzę tak jak mogę iśc do sklepu piechotą to idę nie zamawiam taksówki czy może lepiej autokaru ...

  • #104 08 Wrz 2016 13:43
    JacekCz
    Poziom 37  

    kamyczek napisał:
    Zadam ci takie pytanie gdzie widzisz konieczność użycia arma i w którym zadaniu nie poradzi sobie AVR zauważ że są jeszcze AVR32 tak na dodatek . Ja to widzę tak jak mogę iśc do sklepu piechotą to idę nie zamawiam taksówki czy może lepiej autokaru ...


    Ty ciągle w kółko. (Nawiasem: zarzucasz kolegom, a sam polemizujesz ze swoją własną tezą o tych Armach)

    Poruszam się w
    a) C++ (kurde, jak jestem rozrzutny, wszyscy wiedzą, że C++ to syf większy od C, zwłaszcza ci, którzy nie uzywali).
    b) na timy85 jako płytka który jest droższy od Arm ale akurat ma mniejszy maksymalny wymiar.

    I powinno mi być żal niewykorzystanej wolnej pamięci.

    Myślę że wszyscy, TY PRZEDE WSZYSTKIM wyczerpali co tu da się powiedzieć.

    wnioskuję o zamknięcie

  • #105 08 Wrz 2016 13:53
    2675900
    Użytkownik usunął konto  
  • #106 08 Wrz 2016 14:01
    michalko12
    Specjalista - Mikrokontrolery

    A może jakiś challange, assembler vs C? :wink:

    W przeciwnym wypadku cała dyskusja nie ma sensu.

  • #107 08 Wrz 2016 14:14
    2675900
    Użytkownik usunął konto  
  • #108 08 Wrz 2016 14:23
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Piotrus_999 napisał:
    Dobry pomysł. Odbieranie po tcp/ip komendy z którego czujnika + wysłanie odpowiedzi do serwera.

    Proponuję też dane wysyłać tekstem w formie liczb z przecinkiem, z obowiązkowym szyfrowaniem transmisji i sumami kontrolnymi SHA-256. Na wypadek chwilowego zaniku komunikacji przydałoby się dane zapisywać na karcie SD w jakimś systemie plików.

  • #109 08 Wrz 2016 14:25
    grko
    Poziom 33  

    @Freddie Chopin System plików powinien być transakcyjny i odporny na zaniki zasilania ;)

  • #110 08 Wrz 2016 14:28
    2675900
    Użytkownik usunął konto  
  • #111 08 Wrz 2016 14:48
    Freddie Chopin
    Specjalista - Mikrokontrolery

    No ale robimy porządny projekt czy zabawkę? (; Bo jak zabawkę, to można na szybko zrobić kalkulator, byle liczył funkcje trygonometryczne i pierwiastki, oczywiście na wyświetlaczu z 10 cyfr znaczących minimum.

  • #112 08 Wrz 2016 14:50
    2675900
    Użytkownik usunął konto  
  • #113 08 Wrz 2016 14:55
    BlueDraco
    Specjalista - Mikrokontrolery

    Kamyczku,

    Masz pecha, bo trafiłeś w dyskusji na starych wyjadaczy, którzy wiedzą, co to asembler, znają po parę asemblerów i po parę architektur i siedzą w branży od paru lat.
    Ja sam pisałem w kilkunastu różnych asemblerach i od ok. 8 lat nie napisałem w asemblerze ani jednej linii do żadnego komercyjnego projektu. Obecnie bawię się hobbystycznie w programiki asemblerowe na archaiczne procesory, ale do niczego poważnego nie wziąłbym ani archaicznego procesora, ani równie archaicznego asemblera.
    Nie napisałem nigdzie, że widzę gdzieś "konieczność użycia ARMa", co mi imputujesz. Kiedy robię projekt, myślę o tym, co będzie najwygodniejsze i najtańsze, przy czym w przeciwieństwie do większości Kolegów, którzy tu się wypowiadają, również intensywnie optymalizuję projekty pod kątem kosztu jednostkowego przy seryjnej produkcji (chociaż milionowych serii jeszcze nie produkujemy).
    Przykład:
    miniaturowe urządzonko - potrzebny UART, 4 PWM i ze 100 bajtów RAM, ważne łatwe podłączeni do programowania (jak najmniej przewodów). Zrobiłem to na ARMie za 2 zł, obudowa 3x3 mm. Oczywiście wystarczyłby 8-bitowiec - znajdź mi takiego w podobnej cenie, z możliwością programowania na płytce przy użyciu 4 przewodów łącznie z zasilaniem.

    Zupełnie inny przykład:
    Produkt komercyjny, dawna wersja sprzed 15 lat zrobiona na uC 16-bitowym, całość oprogramowania w asemblerze (!), ok. 30.000 linii, 80 KiB kodu. Aktualna wersja - ARM, C, w porównaniu z dawną wersją dodany interfejs USB - urządzenie złożone, w tym pamięć masowa, również system plików, znacznie rozbudowana funkcjonalność, ok. 30.000 linii C, 120 KiB kodu. Łatwość modyfikacji obu wersji - nieporównywalna.

    środki (układy, narzędzia, języki, kompilatory) dobiera się do zadań, używając określonych kryteriów decyzyjnych. I to właśnie te kryteria prowadzą do tego, że asembler dla 99% projektów NIE jest właściwym środkiem. No fakt, jeśli startujemy od tego, że musi być PIC lub ATtiny4, to zaraz okaże się, że asembler jest jedynym możliwym środkiem. Dla mnie startem projektu nie jest typ układu, a wymagana funkcjonalność i koszt jej osiągnięcia.

    W przeciwieństwie do wielu amatorów mikrokontrolerów ja na ogół nie zadaję pytania "jak to zrobić na ATmega", tylko "na czym to najlepiej zrobić". Fakt, z 10..15 lat temu odpowiedzią na to pytanie często był ATtiny lub ATmega. Dla mnie od z górą 8 lat przy każdym projekcie odpowiedzi są inne niż popularne wśród amatorów 8-bitowce. A łatwo dostępna płytka z STM32 za 1.53 USD (USB, 3 UART, 16 kanałów PWM itd.) w zasadzie jest ostateczną odpowiedzią jeśli chodzi o konstrukcje amatorskie bazujące na gotowych modułach.

  • #114 08 Wrz 2016 15:15
    conan02

    Poziom 29  

    Ja mam jeszcze ze starych czasów moduł FFT w Turbo Asemblerze, dodatkowo ma opcje okienkowania Hammminga, Hanninga i Blackmanna. Oczywiście też odwróconą transformatę FFT. Po asemblacji ma około 1kB. Bawiłem się kiedyś obróbką dźwięku (na procesorach 486DX). Nie trafiłem na szybciej działające rozwiązanie komercyjne.
    Aplikacje też się robiło a'la okienka z Nortona Commandera.
    Dzisiaj - ze względu na sporo sprzętów przemysłowych pracujących na serii MCS51 - działam jeszcze z asemblerem '51. Zapewniam, że da się szybko zrobić aplikację o ile posiada się odpowiednią bazę bibliotek obsługi używanych modułów sprzętowych (wyświetlacze, ADC/DAC i komunikacja).
    Co do uruchamiania, to przynajmniej wiem co i gdzie mogło pójść nie tak, w sytuacji z kompilatorem wysokiego poziomu już nie byłbym tego pewien.
    W MCU jest ten plus, że nie trzeba używać rejestrów do przekazywania danych ponieważ doskonale radzą sobie z operacjami na pamięci przez indeksy.
    Kto nie użył nigdy INLINE w C niech pierwszy rzuci kamień...
    No i miłej zabawy w procesy krytyczne czasowo robione w języku wysokiego poziomu. Niestety, ale najczęściej przerwania w ASM, a aplikacja w C (przynajmniej ja tak robiłem w czasach Borlandowskiego Turbo C).

  • #115 08 Wrz 2016 15:23
    JacekCz
    Poziom 37  

    Piotrus_999 napisał:
    Poza tym handicap musiałby wynosić z 5 lat - troche długo jak na konkurs :)


    Mógłby zatrudnić np dziesięciu i te pięc osobolat by miał szybciej.
    Ale tu jest drugi problem, bo oprócz dyskusji o języku, jest poddane w wątpliwość samo pisanie i używanie bibliotek "tylko własnoręcznie"

  • #116 08 Wrz 2016 15:32
    conan02

    Poziom 29  

    Cytat:
    Ale tu jest drugi problem, bo oprócz dyskusji o języku, jest poddane w wątpliwość samo pisanie i używanie bibliotek "tylko własnoręcznie"


    Każdy po jakimś czasie pracy posiada zasoby napisane "własnoręcznie", więc skoro ktoś mówi, że ma doświadczenie to niech z niego korzysta.
    Nie znam nikogo kto każdy program pisze "od zera", zawsze korzysta z jakiejś bazy.

  • #117 08 Wrz 2016 15:39
    JacekCz
    Poziom 37  

    conan02 napisał:
    Kto nie użył nigdy INLINE w C niech pierwszy rzuci kamień...
    No i miłej zabawy w procesy krytyczne czasowo robione w języku wysokiego poziomu. Niestety, ale najczęściej przerwania w ASM, a aplikacja w C (przynajmniej ja tak robiłem w czasach Borlandowskiego Turbo C).


    W pełni kontrolowalne miał przerwania, praktycznie z każdego rozkazu można było się wyspowiadać. Oczywiście raz na tydzień kompilowało się do asm.
    W jakims sensie integrację C-inline miał lepszą niż GCC (bardziej estetyczną, czytelną i nie mniej wydajną)

    PS. inline nie broni assemblera, a jest po linii przeciwników, wszystkie wypowiedzi to akceptują (100 linii / 100tys). Oczywiście wymaga trochę wiedzy.

  • #118 08 Wrz 2016 16:31
    2675900
    Użytkownik usunął konto  
  • #119 08 Wrz 2016 16:36
    kamyczek
    Poziom 34  

    No to jak tak już chcecie zadanko to będzie takie żeby amatorzy i początkujący coś z tego mieli nie 200k kodu do czytania, ponieważ nie widzicie problemu żeby wsadzać do czajnika arma i jest taka optymalizacja w c że nikt nie zrobi piechotą lepiej to napiszecie program do czajnika ma mieć czujnik temp , włącznik , Led statusu i sterowanie pwm do grzałki . Wygrywa ten kto ubije to w najmniejszej pojemności pamięci . Są chętni będziemy mieli krótki kod do porównania C vs asembler ARM vs AVR . Jeśli c jest lepsze pod każdym względem to czy kod będzie miał 1k czy 100k wyjdzie tak samo. powiem wam że takie zadania i punkty za nie to świetny pomysł dla tych którzy tu bawią się dla siebie i powinniśmy o takich pomyśleć zadanko na tydzień i podsumowanie a na koniec jakieś nagrody od sponsorów .

  • #120 08 Wrz 2016 16:37
    dondu
    Moderator Mikrokontrolery Projektowanie

    A N K I E T A (trwa do północy)

    Ponieważ dyskusja czasami jest ostra czego konsekwencją są ciągłe raporty i padające wnioski co zrobić z niniejszym tematem proponuję, aby koledzy sami zadecydowali, co z tym tematem począć.

    Dlatego też wykorzystamy do tego celu ankietę, którą można znaleźć na górze.