Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

piątek, 15 kwietnia 2011

Jaki język wybrać ?


Autor: Dondu

W sieci znajdziesz wiele miejsc zażartej dyskusji na temat wyższości jednych języków nad innymi.
Każdy ma swoje racje i stosuje swój kompromis:

Każdy język jest dobry dopóki pozwala Ci zaprogramować
mikrokontroler tak jak chciałeś.



Logo kiepskie
ale kompilator REWELACJA
i za darmochę!
C
Jeżeli chcesz poznać dlaczego ja wybrałem C, to proszę:
  • wbrew opinii C na poziomie podstawowym jest bardzo proste,
  • C jest uniwersalne, możesz programować nim różne mikrokontrolery, a nawet pisać programy na komputery PC itp. co jest bardzo przydatne gdy robisz projekt, który łączy się z komputerem np przez USB. Wtedy zarówno mikrokontroler jak i komputer programujesz w jednym języku.
  • mały rozmiar kodu wynikowego (super optymalizacja),
  • bardzo szybki kod wynikowy,
  • darmowe kompilatory i środowiska programistyczne dla większości procesorów,
  • w sieci znajdziesz najwięcej "gotowców" właśnie w tym języku,
  • szukając pracy i znając C masz "otwarte drzwi" - zobacz oferty pracy
  • producenci mikrokontrolerów używają C w datasheetach oraz w udostępnianych bibliotekach do obsługi wielu interfejsów jak USB, karty SD, LCD, TCP/IP, itd.
  • producenci optymalizują mikrokontrolery dla potrzeb języka C, co daje im OGROMNĄ przewagę nad innymi językami:

Przykład mikrokontrolera z architekturą optymalizowaną specjalnie dla języka C.
Przykład mikrokontrolera z architekturą optymalizowaną
specjalnie dla języka C.

Zobacz najbardziej poszukiwane (w skali globalnej) przez pracodawców umiejętności pracowników:


Więcej tutaj.


Wiedzę ogólną na temat języka C możesz pogłębiać za pomocą:

Źródła wiedzy na temat C:



Assembler
  • trudny język niskiego poziomu (bezpośrednie rozkazy procesora),
  • zwykłe działania matematyczne wymagają czasami wielu linii kodu,
  • łatwo się pogubić,
  • darmowy dla większości procesorów,
  • warto poznać gdyż przydaje się w newralgicznych projektach (szybkość, mniejsza zajętość pamięci programu, itp.),
  • można łączyć z językiem C,
  • ucz się go w drugiej kolejności zaraz po C.

Assembler to trudny język co zauważył Adrian1978 szukając pomocy:

Adrian1978
Czy ktokolwiek próbował obliczać wielkości procentowe na AVR używając asemblera AVR? Czy pozostaje mi tylko C?

a po czasie napisał:

Adrian1978
... przesiadłem się na język C i takie obliczenia po prostu stały się łatwe i przyjemne :)


mikroC
mikroBasic, mikroPascal
Ciekawe środowisko i języki, ale:
  • nie są darmowe,
  • Basic i Pascal - są na wymarciu (choć pewnie jeszcze długo pożyją),
  • mikroC także nie stosowane w przedsiębiorstwach, w których być może będziesz szukał kiedyś pracy :-)


Bascom
Język popularny wśród najmłodszych elektroników, ze względu na podobieństwo do Basic-a , ale:
  • jak pisałem na wstępie, można stosować, ale to tak samo uniwersalny język jak język eskimoski. Można się uczyć tylko po co (?), skoro i tak angielski (czytaj C) jest najbardziej uniwersalny i pożyteczny, i nie ogranicza Ciebie,
  • ogranicza Ciebie tylko do mikrokontrolerów rodziny AVR firmy Atmel lub rodziny 8051,
  • ucząc się tego języka i tak będziesz musiał się przesiąść na C lub assemblera, by realizować bardziej skomplikowane projekty. Więc po co tracić czas na naukę Bascom-a?
  • gdy nauczysz się Bascom, to przesiadka na C będzie koszmarna, gdyż będziesz miał złe przyzwyczajenia w zakresie pisania kodu,
  • darmowa jest tylko wersja z ograniczeniami - pełna wersja kosztuje prawie 500zł (!),
  • duża objętość kodu wynikowego,
  • wolniejszy niż C i assembler,
  • ograniczenia w składni kodu,
  • ten język w poważnych firmach i komercyjnych projektach nie jest stosowany.

M@ciej
... moja przygoda z BASCOM się bardzo szybko skończyła. Po paru godzinach zabawy jak przekonałem się jak duże ograniczenia ma ten język i jak potwornie jest "nieekonomiczny" rzuciłem go na rzecz ASM i C.

Electix
Ha, u mnie to samo. Za bardzo wszedłem w Bascoma, żeby teraz lekką ręką przejść na C. Choć staram się omijać te bascomowe instrukcje i coraz częściej odwołuję się do rejestrów, np podczas konfigurowania PWM czy komparatora. Niestety Bascom to droga zamknięta, ślepa uliczka i pozostanie w kilku prockach jednej rodziny.

pawel-jwe
Odnośnie języków programowania AVR'ów to zauważyłem pewną zależność, każdy kto uważa że BASCOM jest lepszy i bardziej mu pasuje, uważa tak tylko do momentu kiedy zacznie programować w C/C++.


Marico
Bascom to jest dramat a nie język. Bałaganiarska składnia i case insensitive pozwala na pisanie nieprzyjaznego oczom kodu. Znam osobę, która poświęciła mu za dużo czasu. dotarła do pewnej ściany w rozwoju i koniec. Język kompletnie nie rozwija, wręcz ogranicza wyobraźnie programisty do kontekstu "jednego programu" przez co trudno ogarnąć wielozadaniowość nawet opartą na prostej maszynie stanów. Gorąco nie polecam.

Dział Bascoma na elektrodzie powinien zawierać wyraźne ostrzeżenie dla początkujących jakie konsekwencje może przynieść przygoda z Bascomem.


SylwekK
Piszę jako w miarę aktywny użytkownik elektrody z jakijś tam dorobkiem ... i wielu mnie tu zapewne zna jako zatwardziałego bascomowca i ... faktycznie tak było. ... z perspektywy czasu żałuję zbyt później przesiadki na C, w którym to obecnie piszę.

Kiedy patrzę na swoje stare programy i sztuczki z rozpisywaniem działań matematycznych to mam poczucie straconego czasu na jaki poświęciłem bascomowi. Jeśli ktoś zaczyna od zera to naprawdę bascom jest złym wyborem. Bo przychodzi w pewnej chwili refleksja - a może zajął bym się tym na poważnie - i wtedy zaczynają się schody...

To pisałem ja - były zatwardziały bascomowiec :-)


Bardzo dobrą alternatywą dla Bascom jest Arduino: Arduino - Language Reference



Inne języki:
Skoro ich nie wymieniłem to znaczy, że nie istnieją :-)
Żartuję. Oczywiście są, ale bardzo rzadko stosowane w mikrokontrolerach.



Moja rada dla Ciebie
  • najpierw C
  • później assembler
No chyba, że masz mniej niż 12 lat lub nie będziesz zajmował się tym zawodowo, to wybierz Arduino.




I na koniec podsumowanie kol. bajcik:

bajcik
Popieram tezę że najlepiej nauczyć się C, a potem uzupełnić wiedzą o asemblerze/maszynowym.

Po poznaniu C warto z ciekawości zerknąć sobie jaki kod asemblera jest tworzony przez kompilator języka C, jak pod spodem wygląda pętla for, konwersja typów (jeśli w ogóle się odbywa), wywołanie funkcji z argumentami, dostęp do tablicy, struktury.

Po poznaniu wracamy do C z myślą "fajnie, że kompilator to wszystko za mnie robi" :-)

... i o to właśnie chodzi. Teraz już wiesz więcej i śmiało możesz podjąć decyzję,
który język wykorzystasz :-)



Przykład możliwości prostego mikrokontrolera z oprogramwaniem w języku C

A na koniec pokazanie możliwości mikrokontrolera ATmega88 (prawie to samo co ATmega8) z oprogramowaniem napisanym w języku C (w BASCOM takiego projektu nie da się zrobić):


Tylko włącz głośniki! :-)

Strona projektu: Craft

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

90 komentarzy:

  1. Chciałbym tutaj zaprotestować przeciwko sianiu nieprawdy. Jeśli wystarczająco dużo razy ktoś usłyszy, że asembler jest trudny, to w to uwierzy i ciężko będzie to zmienić. Zostawmy ocenę trudność tego języka zainteresowanym, bo zainteresować się warto.

    Zasada chińskiego dziecka, nie wie ono, że chiński jest "trudny", więc nie nie ma problemów z nauczeniem się go. :)

    Z mniejszych rzeczy, to Bascom jest jeszcze do rodziny 8051, która wzorem Basica i Pascala też uparcie nie chce umrzeć (chociaż w żadnym razie tej rodzinie tego nie życzę).

    OdpowiedzUsuń
  2. Przykład z j.chińskim jest bardzo dobry :)
    To idealne porównanie dla asemblera, który oprócz wad ma bardzo dużo zalet, które w części opisałem w niniejszym artykule.

    Nie chcę polemizować, bo od tego są fora dyskusyjne, gdzie roi się od dyskusji nad wyższością jednego języka od drugiego.

    Ale oczywiście dziękuję za opinię.

    8051 do Bascoma dodałem.

    OdpowiedzUsuń
  3. Przykład z j. chińskim jest niezbyt prawdziwy :) Znajoma (chinka) uczyła swoje dziecko chińskich symboli przyklejając kartki po całym domu, nauka tego jest dosyć koszmarna i trwa latami, a na końcu i tak wszystkiego się nie wie (kiedyś wśród osób z którymi pracowałem (chińczyków) zrobiłem test polegający na tym, że jeden zapisał parę bardzo specjalistycznych słów, a drugi miał je przetłumaczyć z powrotem na angielski - nie udało im się tego poprawnie zaliczyć). Paradoksalnie czytać i pisać po chińsku łatwiej jest się nauczyć dorosłemu (nawet Europejczykowi, o czym mogę zaświadczyć:)) niż chińskiemu dziecku.
    Czyli IMHO wygląda, że assembler to taki chiński wśród języków :) Ale warto go poznać.
    Natomiast osobiście w tym porównaniu zabrakło mi C++.

    OdpowiedzUsuń
  4. Pisząc:

    "Przykład z j.chińskim jest bardzo dobry :)
    To idealne porównanie dla asemblera, który oprócz wad ma bardzo dużo zalet, które w części opisałem w niniejszym artykule."


    miałem dokładnie na myśli to, co napisałeś TMF :-)

    OdpowiedzUsuń
  5. Jak zwykle w tego typu wywodach autor opiera się na stereotypach które powiela z powodu swojej niewiedzy - na tym właśnie opiera się popularność języka C i jemu pochodnych. Autor jak sam napisał nie widzi potrzeby uczyć się czego innego niż C i Assemblera więc dlaczego wyraża opinie o innych językach skoro ich nie zna ? Programy dla procków można równie dobrze napisać np. w Pascalu. I będą działać tak samo dobrze jak napisane w C. Autor się zastanawia dlaczego nie wymarł np. Pascal, ano dlatego, że jeśli ktoś nie da się stłamsić stereotypem o tym że C jest najlepszy i pozna Pascala, Javę itp. to dowie się że wcale nie są to języki gorsze od C.
    A co do Assemblera to nie sądzę, że jego nauka dopiero po C powinna nastąpić. Jeśli ktoś chce na poważnie zajmować się programowaniem procków typu PIC czy AVR to nie znając ich assemblera nie zna ich zasady działania.

    OdpowiedzUsuń
  6. Problem jest w jakości kompilatorów.
    Mikroprocesory są małe i mają mało pamięci.
    Występują jakieś kompilatory Pascala i parę odmian Basica ale wielkość skompilowanego programu jest kilkakrotnie większa niż w C.
    A szybkość jego działania mniejsza.
    Co do darmowego- co jest ważne- kompilatora C GCC też jest tak że jest on jednak słabszy niż taki Keil.
    No ale Keil to jest naprawdę drogi.
    Gdyby z jakichś przyczyn znalazła się spora grupa entuzjastów gotowych napisać dobre kompilatory z Pascala na wiele rodzin procesorów i to za darmo i ze stałymi aktualizacjami- to może dondu by to z równym entuzjazmem propagował jak C.
    Jak się nie ma co się lubi...

    OdpowiedzUsuń
  7. Drogi Anonimie,

    Szkoda, że nie bierzesz pod uwagę, że to blog o mikrokontrolerach i językach, w których się je programuje za pomocą darmowych narzędzi. Gdyby to był blog ogólnie o językach programowania, tekst byłby inny.

    Anonim napisał:
    "... na stereotypach które powiela z powodu swojej niewiedzy ... Autor jak sam napisał nie widzi potrzeby uczyć się czego innego niż C i Assemblera więc dlaczego wyraża opinie o innych językach skoro ich nie zna ?"

    Autor przez wiele lat (lata 80-te) programował zarówno w assemblerze, Basicu, Turbo Pascalu oraz Turbo Basicu, i zna te języki, a za programy pisane za ich pomocą dostał kilka nagród :-)


    Aninonim napisał:
    " Autor się zastanawia dlaczego nie wymarł np. Pascal, ano dlatego, że ..."

    Oj, proponuję czytać dokładnie co napisane:

    Dondu napisał:
    "Skoro ich nie wymieniłem to znaczy, że nie istnieją :-)
    Żartuję. Oczywiście są, ale bardzo rzadko stosowane w mikrokontrolerach.
    "

    Znaczna różnica w interpretacji, tekstu pisanego :-)

    Anonim napisał:
    "A co do Assemblera to nie sądzę, że jego nauka dopiero po C powinna nastąpić. Jeśli ktoś chce na poważnie zajmować się programowaniem procków typu PIC czy AVR to nie znając ich assemblera (8080, Z80) nie zna ich zasady działania."

    Zgadzam się z tym, że aby programować trzeba znać mikrokontroler. Jednakże programując w językach wyższego poziomu, nie trzeba dbać prawidłowe adresowanie, budować skomplikowanych algorytmów liczenia, itp. Dlatego właśnie uważam, że taki język jak C należy uczyć się w pierwszej kolejności, a dopiero później assemblera, o co wyjaśniłem dokładnie w artykule.

    Oczywiście dziękuję, za opinię, ale proszę pamiętać, czego dotyczy ten blog :)

    oraz na główne motto napisane czerwonym kolorem na początku artykułu.

    Pozdrawiam

    OdpowiedzUsuń
  8. popieram tezę że Najlepiej nauczyć się C, a potem uzupełnić wiedzą o asemblerze/maszynowym.

    Po poznaniu C warto z ciekawości zerknąć sobie jaki kod asm jest tworzony przez kompilator, jak pod spodem wygląda pętla for, konwersja typów (jeśli w ogóle się odbywa), wywołanie funkcji z argumentami, dostęp do tablicy, struktury.

    Po poznaniu wracamy do C z myślą "fajnie że kompilator to wszystko za mnie robi" :)

    OdpowiedzUsuń
  9. Twoja opinia wyraziła to, co między innymi chciałem przekazać w tym artykule, dlatego pozwoliłem sobie zamieścić ją na końcu artykułu.
    Pozdrawiam :-)

    OdpowiedzUsuń
  10. Tutaj kolejny raz widać odwieczny spór miedzy tym jaki język wybrać.
    Pisanie że najlepsze jest C albo assembler albo Bascom nie ma większego sensu bo każdy z tych języków ma swoje miejsce.

    Drogi Autorze strona mi sie podoba ale podejście do tematu powinno być jak najbardziej obiektywne dlatego też należy wymienić zalety i wady każdego z opisywanych języków/podejść. Teraz jest to subiektywne spojrzenie promujące tylko jeden język którym posługuje sie autor. Takie podejście uważam za nieprofesjonalne.

    Język programowania jest tylko narzędziem. Programowanie polega wymyśleniu algorytmu a to w jakim języku jest ten algorytm zaimplementowany to juz odrębna sprawa. Źle wymyślony algorytm niezależnie od języka nie będzie działał i nic nie pomorze że jest zaimplementowany w "najlepszym" językuprogramowania.

    To jak z wbijaniem gwoździa w deskę zasadniczo chodzi o to żeby przyłożyć gwoździa do deski odpowiednią strona i uderzać w drugą(algorytm) i da sie to zrealizować kamieniem, młotkiem, kawałkiem jakiegoś żelastwa(język programowania). Dla jednych lepszy będzie młotek dla innych kamień w ale jeżeli źle zabierzemy sie do samego wbijania to nic nam nie pomoże, nawet najlepszy młotek.

    Moim zdaniem można by uszeregować języki programowania z 2 punktów widzenia:
    od strony człowieka najlepszym wyborem jest BASCOM,
    od strony mikrokontrolera assembler.
    C jest pośrodku.

    Bascom ma ta zaletę że dzięki całej masie bibliotek bardzo łatwo jest korzystać z wielu peryferiów np wyświetlacz LCD.Wystarczy krótka konfiguracja i działa. Niestety za wygodę sie płaci i kod wynikowy jest spory co przy wykorzystaniu małych mikrokontrolerów i wykorzystaniu kilku gotowców z bibliotek kod może nie zmieścić sie w pamięci.

    C pod względem kodu wynikowego jest lepszy od Bascoma ale niestety żeby zrealizować coś co Bascom realizuje 1 komendą trzeba sie namęczyć i przekopać przez sporą ilość not katalogowych itp.

    OdpowiedzUsuń
  11. Drogi Ilmarinen1988,

    Nie wiem jak duży i jak czerwony musi być napis na początku tego artykułu żeby został zauważony :-)

    "Każdy język jest dobry dopóki pozwala Ci zaprogramować
    mikrokontroler tak jak chciałeś."


    Piszesz, że tekst jest subiektywny - oczywiście, że takim jest, co także podkreśliłem czerwonym tekstem:

    "Jeżeli chcesz poznać dlaczego ja wybrałem C, to proszę:"

    Te dwa zdania odpowiadają na wszelkie Twoje uwagi.

    Dodam do tego jeszcze prę zdań. Czytelnikami bloga są w ponad 70% studenci kierunków związanych z elektroniką. Za chwilę znajdą się na rynku pracy. Spójrz proszę na ogłoszenia w wielu serwisach internetowych i znajdź ogłoszenie poważnej firmy, w którym poszukiwane są osoby ze znajomością BASCOM.

    Jeżeli już takie uda Ci się znaleźć, to policz stosunek ogłoszeń dot. języka C do tych z BASCOM i zastanów się, jakie szanse na dobrą pracę mieć będą studenci nie znający C?

    Spójrz także w dokumentacje mikrokontrolerów różnych firm. Znajdziesz tam przykłady obsługi niektórych peryferiów w języku C i/lub assembler. Dlaczego nie ma tam innych języków?

    Jeżeli znajdziesz chęci i czas to proponuję także przeczytać mój komentarz do tego artykułu z dnia 27 lutego 2012 20:05

    Pozdrawiam,
    Jacek

    OdpowiedzUsuń
  12. Piszesz dlaczego sam wybrałeś język C to dlaczego w ogóle dodajesz wzmianki o innych językach. Jeżeli już o nich wspominasz to rób to obiektywnie bo jest to artykuł o tytule "Jaki język wybrać" (a nie jaki język sam wybrałem)Przedstawiasz temat z góry zakładając że JEZYK C JEST NAJLEPSZY a cała reszta nie istnieje a w ogóle jest bee.
    Nie zauważyłeś czytając mojego posta że nie mam nic do języka C ani do jego zastosowań i jego miejsca ale do sposobu w jaki przedstawiasz temat. Podejście jakie prezentujesz jest moim zdaniem nieprofesjonalne i trąci pieniactwem, jaśnie oświeconymi i innymi ‘spacjalistami’ ze znanego nam forum.
    Co do lektury przeczytaj jeszcze raz post anonimowego z 23 lutego 2012 20:15 tak samo zwraca uwagę na bezkrytyczne gloryfikowanie języka C tylko w inny sposób. A C++ ma wady choćby sposób zapisu. Zapis konfiguracji portów w BASCOMIE jest zdecydowanie czytelniejszy niż w C.
    Zmień tytuł albo popraw artykuł bo to nie jest rzetelne przedstawienie tematu.
    Z poprzedniego posta ucięło fragment o asemblerze dokleję go tutaj”
    „ASM Tutaj nie ma wątpliwości jest to język w którym powinno sie programować mikrokontrolery niestety jest dosyć trudny wymaga dogłębnej znajomości budowy i działania mikrokontrolera. A kod wynikowy dobrze napisany program nie zawiera żadnego zbędnego bajtu co w C i Bascomie jest praktycznie niemożliwe.”
    Pozdrawiam
    Ilmarinen1988

    OdpowiedzUsuń
  13. O wyższości jednego języka nad drugim, decyduje rynek pracy. Wszelkie Twoje argumenty dot. BASCOM'a tracą swoją "moc" właśnie na rynku pracy, a jak już wspomniałem we wcześniejszym poście, ponad 70% czytelników bloga to studenci kierunków technicznych i do nich kierowany jest ten artykuł i dlatego polecam im język C, a w drugiej kolejności assembler.

    Gdyby blog był kierowany do młodzieży poniżej 14 lat, to polecałbym BASCOM, co z resztą robię w części "Moja rada dla Ciebie".

    Możesz oczywiście programować w czym zechcesz zgodnie z WIELKIM CZERWONYM NAPISEM na początku tego tematu, jednakże nie zmieni to faktu, iż ofert pracy dla innych języków niż C jest "koszmarnie mało", a dla BASCOM może jedna rocznie i w dodatku małej firmy :-)

    Co do assemblera - piszesz mniej więcej to samo, co napisałem w artykule.

    Chcesz się uczyć eskimoskiego (w domyśle BASCOM) - proszę bardzo - Twoja wola :-) Ale nie namawiaj do tego studentów, którzy za kilka lat staną na rynku pracy i zobaczą zero ofert dla znających BASCOM'a i setki ofert poważnych firm dla znających język C.

    Dalszą jałową dyskusję nad wyższością jednego języka nad drugim, proponuję prowadzić na forum Elektroda.pl

    Pozdrawiam

    PS.
    ... napisz program w BASCOM na PC'ta ... :-)

    OdpowiedzUsuń
    Odpowiedzi
    1. To samo miałem z programowaniem GPU - co z tego, że są popularna, tańsze i tysiące razy bardziej wydajne ( GTX660 za 300zł to ~1.1TFLOPs ), jak kojarzą się jedynie z klikanym propagowaniem V przykazania? Zero ofert pracy - gwarantowane bezrobocie! Dobrze, że pracuję w ARM'ach ( Cortex M4 - wszelakie STM32F4xx, itp. ), ale jak na wstępie; potwierdzam, że w pracy się robi to, co pracodawca uczciwie karze:) Ja tam na etacie programisty mogę poprawiać szpadlem po koparce - robota jak każda:)

      Usuń
  14. A Ty znowu o BASCOMIE i rynku pracy czy nie rozumiesz co do Ciebie pisze? Odpowiadasz mi juz 2 raz tak samo nawet nie czytając chyba mojego posta. Chodzi mi o OBIEKTYWNE PRZEDSTAWIENIE TEMATU POMIJAJĄC KWESTIE PRZYDATNOŚCI KAZDEGO Z JEZYKÓW. Jak napisałem w pierwszym poście strona jest ciekawa i potrzebna zawiera wiedzę praktyczną popartą przykładami i na pewno skorzystam z tej wiedzy. Chce żeby ta strona była jeszcze lepsza dlatego prowadzę tą dyskusję i wskazuje na błąd jaki popełniasz upierając sie ze C jest najlepsze a cała reszta języków programowanie ma tylko wady co wynika z twojego artykułu.
    Jeżeli C jest faktycznie najlepszym wyborem to z zestawienia rzetelnego ZALET I WAD wszystkich z tych języków można będzie wyciągnąć taki wniosek ale naświetlanie problemu z jednego punku widzenia tak jak juz napisałem jest nieprofesjonalne i trąci jaśnie oświeconymi 'specjalistami'. Studenci maja przede wszystkim nauczyć się myśleć wyciągać wnioski na podstawie argumentów. Jeżeli coś piszesz to przedstaw wszystkie argumenty za i przeciw i z tego wyciągnij wniosek. Teraz wyciągasz wniosek z nierzetelnie przygotowanego materiału.
    Dlaczego odradzasz uczenia się BACOMA może i faktycznie dominuje w zastosowaniach amatorskich ale samo nauczenie się dodatkowego języka programowania nie jest złe i na pewno nie zaszkodzi.
    Co do pisanie programu na PC, BASCOM jest oparty na BASIC’u i można dzięki niemu pisać programy na PC nawet biorąc pod uwagę Visual Basic aplikacje okienkowe.(pisałeś do anonima że jest to blog o mikrokontrolerach a wobec mnie wysuwasz żądanie programowania PC )
    Co to rynku pracy jeżeli ktoś student zna 3 języki programowania a nie tylko jeden słuszny jest lepiej przygotowany do radzenie sobie z nietypowymi problemami i szybciej nauczy się 4-5 języka jeżeli zajdzie taka potrzeba. Teraz rynek pracy jest tak dynamiczny ze nie sama wiedze jest ważna ale umiejętność efektywnego i szybkiego uczenia się.
    Pozdrawiam
    Ilmarinen1988

    OdpowiedzUsuń
  15. Bardzo się cieszę z wysokiej oceny informacji na blogu oraz że zależy Ci na podnoszeniu jego jakości.

    Jednakże proszę, abyś postarał się zrozumieć, że jeżeli chodzi o języki programowania blog ten ma konkretną grupę czytelników, którą są studenci kierunków technicznych.

    Na mnie (czy tego chcę, czy nie) ciąży odpowiedzialność, wskazania im właściwej drogi, by później nie było tak jak w polskiej robotyce studenckiej, że na 5'tym roku studiów student startuje w zawodach i programuje swojego robota w BASCOM, zamiast w C czy assemblerze. Taki student, już kilka miesięcy później szukając pracy przekona się, jak koszmarny popełnił błąd.

    Dlatego zawsze będę przekonywał wszelkimi możliwymi argumentami, by takie osoby uczyły się C, a w drugiej kolejności assemblera. Dużą część tych powodów wymieniłem w artykule.

    Dlatego ponownie proszę abyś zrozumiał, że pod względem doboru języka, blog ma konkretnych odbiorców, którym chcę wskazać właściwą dla nich drogę, by za jakiś czas nie pluli sobie w brodę, że stracili czas na naukę 5 języków "po łebkach", zamiast porządnie nauczyć się jednego języka wysokiego poziomu czyli C i jednego niskiego poziomu czyli assemblera, które otwierają przed nimi świat mikrokontrolerów dowolnego producenta.

    BTW.
    Zamiast przekonywać mnie, przekonaj producentów mikrokontrolerów, by w swoich datasheet'ach zamieszczali kody także w innych językach niż tylko C i assembler. Podobnie z udostępnianiem bibliotek wszelkiej maści. Niestety nie uda Ci się to, ponieważ nie bez przyczyny wybrali te języki. :-)

    Przekonaj także przyszłych pracodawców, by zrezygnowali z C.

    Uważam, że dalsze wymienianie argumentów jest niecelowe. Rozumie Twoje stanowisko i udostępniam miejsce na jego pokazanie, ale Ty postaraj się zrozumieć cele tego bloga.

    Pozdrawiam

    OdpowiedzUsuń
  16. Ilmarinen1988 a przeczytałeś jaki jest tytuł tego artykułu?
    Jaki język wybrać? a nie Porównanie języków programowania dlatego rzeczą oczywistą jest, że artykuł podpowiada który język WARTO a nawet NALEŻY wybrać. I na potwierdzenie tego ukazane są zalety języka C nad innymi językami. Jeśli ktoś chce się uczyć innych języków, proszę bardzo.
    Ale najpierw C, potem assembler a następnie w miarę potrzeb i chęci pozostałe języki.
    Jeśli wychowujesz dziecko, to przedstawiasz mu obiektywnie wszystkie możliwe drogi, jakimi w życiu może pójść? Czy może jednak przedstawiasz mu z większym naciskiem drogę, która w opinii społecznej i w Twoim przekonaniu jest słuszna?

    OdpowiedzUsuń
  17. Witam! AVR-y programuję od kilku lat. Od samego początku piszę w asemblerze. C nigdy się nie uczyłem i puki co nie czuję takiej potrzeby. Gdzieś tam po drodze przewinął się BASCOM, ale raczej z ciekawości/dla zabawy. Bynajmniej ja źle czuję się w językach wysokiego poziomu - nie wiadomo co dokładnie robi procesor. A dzięki asemblerowi poznałem jak pracują mikrokontrolery i wiem, że zrobią dokładnie to co napiszę a nie coś co im kompilator przetłumaczy. Owszem, asembler może wydawać się trudny, zwłaszcza na początku, gdzie ludzie nie rozumieją zasady działania kontrolera i jego peryferiów. Dla mnie nie ma lepszego języka - po prostu go rozumiem.

    OdpowiedzUsuń
  18. Zacznę od końca. Jest dla ciebie najlepszy, bo go rozumiesz. Jak miałem 5 lat to pewnie najlepsze były dla mnie lizaki, bo mi smakowały. Albo dlatego, że nie znałem nic innego. Dlatego czasami warto wyjść poza to co znane i poznać coś nowego. Dopiero wtedy można powiedzieć, że coś jest lepsze lub gorsze.
    Akurat assembler jest najprostszym językiem, myślę, że w artykule chodzi o pewien skrót myślowy – assembler jest trudny, bo jest rozwlekły, żeby zrobić prostą rzecz trzeba wielu instrukcji. W efekcie trudny nie jest język, ale trudne (a przynajmniej czasochłonne) jest w nim osiągnięcie celu – gotowego programu.
    W językach wysokiego poziomu właśnie o to chodzi, aby nie wiedzieć co dokładnie robi procesor. Jeśli celem jest napisanie programu realizującego jakieś zadanie to co tam piszczy w procesorze zupełnie mnie nie interesuje. Ten brak konieczności zainteresowania wnętrznościami ma jeszcze jedną wspaniałą konsekwencję – łatwość przenoszenia kodu na inne platformy. Pisząc w języku wyższego poziomu procesor zrobi dokładnie to co napiszesz, inaczej znaczy to, że masz albo błędny program, albo błąd w kompilatorze.
    Oczywiście jest i druga strona – aby optymalnie wykorzystać dostępne zasoby trzeba wiedzieć jak MCU działa. Biorąc pod uwagę, że chodzi tu o peryferia to język jest zupełnie bez znaczenia – timer programuje się tak samo w assemblerze, jak i w C czy Bascomie. Można sobie co najwyżej do tego dodać mniej lub bardziej wygodne makra, które zamaskują nam brzydką operację Timer.control=1 operacją timer enable 
    Ilmarinen1988 – gdybym miał nieskończoną ilość czasu i nie miał nic ciekawszego do roboty to pewnie uczyłbym się c, algola, fortrana, bascoma i swahili. Ale że czasu mam tyle ile mam i zdecydowanie ciekawsze alternatywy, to uczę się tego co jest przydatne. Dlatego jest to c/C++ a nie Bascom, który zupełnie nic nie wnosi, chociażby dlatego, że istnieje wyłącznie na AVR/’51. Co do jego rzekomej wygody – to nie cecha języka, tylko dołączonych do niego bibliotek. Ale prosze bardzo – mamy ASF i tak samo jak jednym kliknięciem w Bascomie można dodać obsługę LCD tak samo można to zrobić w ASF pisząc w C. Także człowiekowi, który chce pojechać zagranicę polecę naukę angielskiego, pomimo tego, że w Tybecie lepiej znać język tybetański

    OdpowiedzUsuń
  19. Nie słyszałem, aby był dostępny kompilator Ada dla AVR, PIC lub ARM, ale mogę się mylić. Nawet gdyby był, to na razie nie jest powszechnie stosowany.

    OdpowiedzUsuń
  20. Witam
    Osobiście uważam, że naturalnym językiem dla mikrokontrolerów AVR jest assembler, dlatego zalecenia programowe dobrze by było ilustrować przede wszystkim w assemblerze a ewentualnie dodatkowo w C. Niestety należy się przy tym liczyć z ryzykiem porzucania C na korzyść asseblera przez czytelników :-)

    OdpowiedzUsuń
  21. Witaj,
    Sądzę, że jednak nie porzucą z powodów, o których pisał kol. bajcik.
    :-)

    OdpowiedzUsuń
  22. Drogi czytelniku, który dzisiaj napisałeś komentarz zaczynający się od cyt: "Możecie pluć na Bascoma ..."

    Z chęcią bym go opublikował, bo jest merytoryczny, ale język którym go napisałeś daleki od kulturalnego. Jeżeli napiszesz to samo, ale w kulturalny sposób, to komentarz pojawi się w dyskusji.

    Pozdrawiam.

    OdpowiedzUsuń
  23. "No chyba, że masz mniej niż 14 lat, to wybierz BASCOM."
    A co ma wiek do wyboru języka? :>

    OdpowiedzUsuń
  24. Bardzo dużo. A w tym wypadku w szczególności :-)

    OdpowiedzUsuń
  25. Ja mam 12 lat i jakoś nie mam problemów z C ;)

    OdpowiedzUsuń
  26. To gratuluję! Większość jednak ma problemy, w szczególności, gdy z logiką i matematyką sobie nie radzą :)

    OdpowiedzUsuń
  27. 1-brak wiedzy o pracy mikroprocesora -konkretnego typu -i jego języka
    -asemblera-jest wadą programisty.
    2-poznanie zastosowań asemblera daje potem -przy stosowaniu języków wyższego rzędu -poczucie wygody a umiejętności "asemblerowe" procentują jakością oprogramowania .

    OdpowiedzUsuń
  28. 'No chyba, że masz mniej niż 14
    lat, to wybierz BASCOM.' Proponuję usunąć to zdanie z artykułu, ponieważ oznacza ono, iż język programowania jest designowany/tworzony pod wiek (mi (12 lat) najbardziej odpowiada asm w C, ponieważ jest to najłatwiejsze co (wg. mnie) można zrobić (łatwy dostęp do bibliotek C linijkę za asm'em))

    OdpowiedzUsuń
    Odpowiedzi
    1. Jestem bardzo podbudowany, że tak młode osoby poznają C oraz assembler. Może więc obniżę wiek tej sugestii do mniej niż 12 lat :D

      Albo jeszcze inaczej - zasugeruję Arduino zamiast Bascom. To będzie lepsze rozwiązanie.

      Usuń
  29. Tak, zdecydowanie lepszy pomysł (Arduino to Java+C, jak sami przyznają)

    OdpowiedzUsuń
  30. Obrazek to Assembler na PC, czyż nie? BTW kto znowu zepsuł stronę mobilną, tym razem nie da się napisać komentarza...

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie ma znaczenia jaki assembler, to tylko rysuneczek urozmaicający artykuł. Co do komentarzy na wersji mobilnej sprawdzę - dzięki za info.

      Usuń
  31. Witam serdecznie Prosiłbym o korektę wpisu, usunięciu zdania " No chyba, że masz mniej niż 12 lat, to wybierz Arduino." to jest obrażające użytkowników którzy mają więcej lat niż 12 i piszą w tym jeżyku.

    OdpowiedzUsuń
    Odpowiedzi
    1. Witam równie serdecznie. Chyba źle zrozumiałeś to zdanie. Basic jest jednym z najłatwiej przyswajalnych języków dla najmłodszych. W tym celu właśnie powstał: Beginner's All-purpose Symbolic Instruction Code.

      BASCOM jest Basiciem dla AVR i dlatego to zdanie się tam znalazło. Innymi słowy osobom młodszym niż 12lat nie polecam języka C, tylko właśnie BASCOM.

      To, że ktoś gra w grę stworzoną dla dzieci nie oznacza, że powinien z tego powodu czuć się obrażony.

      Usuń
    2. Czy to znaczy, że Arduino jest gorsze? Nie rozumiem tego "przekazu". Czy języki programowania są podzielone w kategoriach wiekowych? Czy to znaczy, że mając 31 lat nie wypada używać Arduino? Proszę o odpowiedź, co autor miał na myśli...

      Kejter

      Usuń
    3. Zacznijmy od tego, że Arduino to nie język programowania...

      Usuń
    4. Dziękuję za trafne spostrzeżenie. Pisząc w ten sposób użyłem skrótu myślowego. Chodzi oczywiście o cała platformę - czyli o środowisko i rozwiązania sprzętowe. Natomiast nadal nie jest to odpowiedź na moje pytanie: co autor miał na myśli?
      Nie chciałbym żeby to zostało odebrane jako atak, bo tak nie jest. Tylko chciałbym prosić o rozwinięcie tej myśli, ponieważ uważam że tak poważny/poczytny blog nie pozwoliłby sobie na tak negatywne wypowiedzi.
      Z niecierpliwością czekam na odpowiedź.

      Kejter

      Usuń
    5. Witam!
      Cierpliwie odczekałem kilka ale brak odpowiedzi. Zastanawia mnie czy autor nie ma czasu czy moje pytanie jest aż tak niewygodne. Póki co, poza uwagą że Arduino nie jest językiem, mimo że autor użył też w tym kontekście, nie ma żadnej odpowiedzi. Dlatego powtarzam pytanie i proszę o odpowiedź.

      Pozdrawiam
      Kejter

      Usuń
    6. Kejter wybacz, ale znaleźć twój komentarz, który jest odpowiedzią na inny komentarz i to w dodatku po kilku miesiącach., jest naprawdę ciężko więc nie dziw się że Dondu tego nie widzi.

      Usuń
    7. Wybaczam. ALe pisałem i w odpowiedzi i jako osobny komentarz. Mam wrażenie poprostu że autor nie chce podjąć tematu. A ja proszę tylko o wyjaśnienie.

      Pozdrawiam
      Kejter

      Usuń
    8. Które klocki są lepsze - Lego, Cobi, a może drewniane?
      A może każde po trochę w zależności od:
      - zasobów finansowych rodziców,
      - celu jaki rodzice chcą osiągnąć,
      - umiejętności manualnych dziecka, a czasami rodzica :-)
      - ... tysiąc innych czynników.

      Jak już pisałem wielokrotnie w tym temacie, niniejsza strona kierowana jest przede wszystkim do studentów uczelni związanych z elektroniką oraz szkół średnich także ukierunkowanych na tę dziedzinę. Dlatego też wskazujemy im właściwy dla nich kierunek.

      Arduino jest świetną platformą, skierowaną dla mega początkujących, i chwała jej twórcom za to. Jej zalety powodują to, iż ludzie niezwiązani z tą dziedziną, potrafią tworzyć na bazie gotowców (platform sprzętowych i bibliotek) różne cuda i to jest piękne :-)

      Arduino wskazujemy najmłodszym tylko dlatego, że jest to świetna konkurencja dla Bascom, który jest złą drogą dla osób z ambicjami dążenia w kierunku zawodowym. Arduino przy całych ograniczeniach jakie posiada (zarówno platforma jak i język) jest jednak znacznie bliższe językowi C niż Bascom.

      Nie oznacza to, że 31-letni amator nie powinien wykorzystywać Arduino. Dlatego zmodyfikowałem to zdanie wskazane przez Kejter i mam nadzieję, że teraz jest już OK :-)

      Usuń
  32. Zgodzę się z komentarzami: Znając język X nie należy pisać o innych bo bzdury wychodzą.

    Assembler nie jest ani trudny (mówiąc o AVR to raptem kilkanaście instrukcji w różnych kombinacjach). Znając assembler dla AVR można w dwie godziny opanować assembler dla PC.
    Zgodzę się, że jest rozwlekły.. na ekranie. Po prostu inaczej wygląda zapisany w nim program. Natomiast na pewno nie jest bardziej czasochłonny od C. A jeśli policzymy jeszcze proces uruchamiania to bywa i odwrotnie. Jeśli dla kogoś jest czasochłonny to znaczy, że nadal się musi uczyć. Każdy przez to przechodzi, więc nie ma co płakać.
    A już w przypadku AVR / Atmel Studio to pisując więcej ma się bibliotekę procedur i pisze się tak samo jak w C. Kilka instrukcji i program gotowy.
    Natomiast szybko zaczyna się doceniać ten język jak walczy się w C z upchnięciem kodu w procesorze, bo ciągle trochę brakuje, a kolega obok w assemblerze zrobił to samo zajmując 75% flasha. Wtedy znowu okazuje, że szybkość w C jest warunkowa.

    Chociaż nie powiem, C warto znać, głównie dla współpracy z PC lub przeglądania gotowych procedur z sieci. Ale osobiście od 10 lat na AVR nie napisałem nic w C. Oferty pracy z wymaganiem C też nic nie mówią, osoba odpowiedzialna za nie często opiera się na mitach typu powyższy artykuł. Wystarczy pokazać, że można inaczej / lepiej a wymóg znika.

    A BASCOM, próbowałem w ramach szkoleniowych. Niestety język jest niespójny i pełen błędów. Jeśli procesor ma tylko obsługiwać ADC i wyświetlać wyniki na LCD to jest ok. Ale jeśli musi obsługiwać ADC, UART, TWI i coś jeszcze to jego wewnętrzne funkcje są ze sobą sprzeczne (modyfikują konkretne rejestry sobie wzajemnie). W dodatku kompilator nijak nie ostrzega. Dużo funkcji wymaga niejawnych ustawień jakiegoś parametru i osoba początkująca błyskawicznie się poddaje. To jest język dla osób bardzo doświadczonych, tylko po co wtedy z niego korzystać skoro jego odpluskwianie wymaga stawania na uszach, bo kompilator nie obsługuje żadnego debugera.

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie sądzę, aby Dondu nie znał assemblera, gdy popatrzysz na jego opis profilu na blogu :)

      Jesteś w błędzie, a Dondu ma rację. C jest wspierany przez poroducentów mikrokontrolerów olbrzymią ilością bibliotek, które przyspieszają i ułatwiają pisanie oprogramowania. Żaden producent nie pisze tych bibliotek w assemblerze tylko w C. Takie rozwiązanie ma KOLOSALNE zalety, których nie chcesz dostrzec.

      To że nie wykorzystujesz tych możliwości upierając się przy pisaniu własnych bibliotek, to już twój problem i ograniczenie jednocześnie. Przy dzisiejszych pojemnościach pamięci, argument dot. jej braku pojawi się może raz na 10 lat. Pozostały zaoszczędzony w przypadku używania C czas pisania aplikacji (w porównaniu do assemblera), to czysty zysk, którego w ogóle nie dostrzegasz.

      Assembler jest oczywiście ważny i warto go znać, ale pisanie oprogramowania w tym języku jest w dzisiejszych czasach nieekonomiczne i powinno być stosowane tylko tam, gdzie jest to niezbędne tym bardziej, że od paru lat producenci dostosowują swoje mikrokontrolery (listy rozkazów) do języka C, co jeszcze bardziej zmniejsza argument dot. braku pamięci.

      Proponuję abyś napisał i wkleił tutaj program w assemblerze realizujący prosty program:

      a=1.045
      b=2.8
      c=-23.91
      y=ax²+2x+b

      porównamy go z wersją w C, która może wyglądać np. tak:

      a=1.045
      b=2.8
      c=-23.91
      y=a·x·x+2·x+b

      a na koniec może jeszcze formatowanie do wyświetlenia np. na LCD:

      sprintf(LCD_bufor, "%f", y);

      Zobaczymy ile programu będziesz musiał napisać, by to zrealizować i da nam to pole do dalszej dyskusji.

      Usuń
    2. Wydaje mi się, że w artykule lekko razi nie tyle wywyższanie C, co niedocenianie asemblera. Nie wyobrażam sobie elektronika, który programuje kontrolery i nie potrafi ich oprogramować w assemblerze. Akurat ten język wydaje mi się naturalnym wyborem przy uC. Może jestem lekko skrzywiony w tym temacie, bo moje pierwsze programy powstawały w ATARI BASIC a zaraz potem był asembler. Komputery również programuję w C, ale mikrokontrolery zawsze w as i jest mi z tym dobrze. Co do powyższego przykładu na program wykonujący podane rachunki: kolego Anonim, podaj mi jeden projekt operujący na liczbach rzeczywistych a ja podam 100 projektów, które operują na liczbach całkowitych. To a propos "prostego programu". Jeżeli ktoś bezkrytycznie upiera się, że dla C asembler nie jest żadną konkurencją, to dorzucam takie małe zadanie. Policz, ile taktów zegara potrzebujesz na wykonanie tych niezwykle często stosowanych obliczeń, potem napisz to w asemblerze i zrób to samo. I na koniec napisz program, która zajmuje dokładnie 4235 cykli zegara albo dowolną z góry zadaną liczbę.
      Jak już policzysz i napiszesz, to da nam to pole do dalszej dyskusji.

      Odnoście kolejności uczenia języków, polecam asembler, potem C. Nie trafia do mnie argument o trudności języka. Niektóre kontrolery (np. PIC12F629) posiadają tylko 35 rozkazów. A niech mi ktoś powie, że nigdy nie skopał czegoś, bo w języku wysokiego poziomu zapomniał o kontroli typów (a dokładnie jej braku). Asembler mikrokontrolerów jest prosty i nie ma co nim straszyć ludzi.

      PS. Ktoś wyżej pisał "asembler/maszynowy" jakby to było to samo. Taaa. To prawie to samo. Tak samo jak krzesło i krzesło elektryczne.

      Usuń
    3. Dla początkującego różnica między nauką assemblera, a nauką C jest mniej więcej taka jak dla początkującego pilota wybór nauki na Cessna-ie lub Boeingu 747. Można, ale zanim początkujący pilot wykona pierwszy lot na Boeingu minie kilka lat, a na Cessna-ie zrobi to już po 3 miesiącach.

      Jest wielu sprawnych projektantów i programistów, którzy nigdy nie poznali assemblera i nigdy go nie będą znać. Aktualne możliwości obliczeniowe mikrokontrolerów są tak wysokie, że zawsze jest czas na wykonanie zadań niekoniecznie optymalnie napisanych.

      Zysk z pisania w C jest natomiast ogromny w zakresie minimalizacji czasu poświęconego na napisanie aplikacji, co w dzisiejszych czasach jest baaaardzo istotne (TTM - time to market).

      Można zaklinać rzeczywistość, ale ekonomii się w ten sposób nie poprawi. Nawet producenci mikrokontrolerów, aktualnie dostarczają olbrzymie ilości bibliotek w C, a nie w assemblerze. Assembler jest wypierany już nawet przez C w przykładach w dokumentacji mikrokontrolerów.

      Tak jak pisałem w artykule assembler warto znać, ale dopiero po dogłębnym poznaniu C.

      Usuń
  33. Widzę, że niestety nie uzyskam odpowiedzi od autora. Czyżby nie potrafił obronić swojego zdania? Każdy ma do niego prawo, ale chciałbym wiedzieć jakimi argumentami kierował się autor pisząc coś takiego. Dziękuję i pozdrawiam.
    P.S. Ja nie chcę nikogo atakować, ale to trochę niepoważne takie zignorowanie czytelnika.

    Pozdrawiam
    Kejter

    OdpowiedzUsuń
  34. "A na koniec pokazanie możliwości mikrokontrolera ATmega88 (prawie to samo co ATmega8) z oprogramowaniem napisanym w języku C (w BASCOM takiego projektu nie da się zrobić)"

    Dodam, że w C też się nie da. Cały projekt jest w asemblerze. Jedynie procedury przygotowujące dane są w C.

    OdpowiedzUsuń
    Odpowiedzi
    1. Da się - należy wybierać odpowiednią optymalizację i być nieco lepszym niż początkujący programistą :-)

      Co najwyżej stosować niewielkie wstawki assemblera w kluczowych fragmentach programu, gdy stwierdzimy, że kod wynikowy kompilatora C nie jest optymalny do zadania.

      Usuń
    2. Wciąż uważam, że się nie da. Zachęcam do przeczytania całego artykułu dotyczącego wspomnianego projektu i mojego posta o liczeniu taktów procesora. Wnioski dla nawet początkującego programisty (no, może ambitnego początkującego) sa oczywiste.

      Usuń
    3. Możesz twierdzić co zechcesz, tak samo jak ja mogę robić dokładnie to samo. Istotny jest konkretny przypadek fragmentu kodu programu i jego zadanie. Dlatego stanowcze twierdzenie, że kompilator C przy odpowiednio włączonych parametrach optymalizacji nie jest w stanie wygenerować odpowiednio wydajnego kodu maszynowego jest błędne.

      Usuń
    4. Rzeczywiście moje twierdzenie niewiele ma tu do gadania. Autor tego projektu uważa, że się nie da i dlatego część mało istotną (przygotowanie danych, niekrytyczne pod względem czasowym) napisał sobie w C a część roboczą w ASEMBLERZE. Stąd moje poparcie dla zdania, że się jednak nie da. Opornych zachęcam do pokazania, że się da, bo powiedzieć to może każdy, że nawet w BASCOMIE się da. Zadanie jest o tyle łatwe, że kod już jest wystarczy go napisać w C. Jeśli chodzi "konkretny przypadek fragmentu kodu programu i jego zadanie" to proszę bardzo: asm.S w kodzie żródłowym dostępnym na stronie projektu.

      Usuń
    5. Jeśli przejrzysz przykłady załączone do mojej książki "AVR. Układy peryferyjne" to znajdziesz tam kody w C generujące obraz TV. W załączonym w artykule Dondu przykładzie jest tylko jeden fragment wymagający asemblera - 3 instrukcje eliminujące jitter wejścia w przerwanie rozpoczynające generowanie nowej linii. A więc w C się da. Ogólnie jest jeszcze jeden moment, gdy asembler przy generowaniu video jest niezbędny - generowanie color burst dla systemu PAL, ponieważ tam timingi liczy się do każdego cyklu kompilator C mógłby wprowadzić jakieś dodatki i w efekcie w jednej wersji kompilatora by działało w innej niekoniecznie.

      Usuń
    6. "[..] jest tylko jeden fragment wymagający asemblera [..]"
      "[..] jest jeszcze jeden moment, gdy asembler przy generowaniu video jest niezbędny [..]"
      "[..] ponieważ tam timingi liczy się do każdego cyklu kompilator C mógłby wprowadzić jakieś dodatki [..]"
      Czyli wreszcie osiągnęliśmy konsensus. Bez asemblera nie da rady i C tu nie pomoże.

      Zgadzam się z tym, że dużo można w C, więcej niż w BASCOM, ale jednak są projekty (jak ten wymieniony), w których bez asemblera po prostu się nie da.

      Usuń
    7. Piszę o tym w artykule w opisie assemblera: cyt.
      "warto poznać gdyż przydaje się w newralgicznych projektach (szybkość, mniejsza zajętość pamięci programu, itp.),"

      Natomiast, czy C bez assemblera da radę, zależy od zadania i częstotliwości taktowania mikrokontrolera. Dlatego nie można jednoznacznie powiedzieć, że rady nie da. Proszę pamiętać, że artykuł nie dotyczy tylko i wyłącznie AVR.

      Usuń
  35. 12 lat skończyłam bardzo dawno, ale nigdy się w to nie bawiłam. Czy faktycznie najlepszym rozwiązaniem dla mnie będzie Arduino czy jednak spróbować stworzyć coś samodzielnie

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie znając Ciebie i Twoich umiejętności, mocnych i słabych stron, itd. ... nie jesteśmy w stanie Ci odpowiedzieć jednoznacznie, dlatego decyzję musisz podejmować sama.

      Arduino można przyrównać nieco do Lego Mindstorms. Na całym świecie od Arduino zaczynają nie tylko 12-latkowie ale także dziadkowie :D

      Arduino zapewnia gotowe moduły, które można łączyć i oprogramowywać w miarę prostym językiem (choć chyba bardziej wszechstronnym niż w Lego). Równie dobrze moduły Arduino można oprogramowywać jak AVRy, czyli w "czystym C".

      Możesz więc kupić jakąś tańszą wersję Arduino i trochę elementów elektronicznych np. takich jak podałem w artykule: Jak najtaniej zacząć?

      Zamiast kupować elementy "na ślepo" możesz wybrać sobie jakiś temat do zrealizowania i na naszym forum ustalić co do wybranej przez Ciebie wersji Arduino trzeba będzie dokupić, by projekt zrealizować.

      Albo jednak rozpocząć od płytki stykowej, czy od modułów z XMega, co także jest dobrą alternatywą, ale jak już wspomniałem ... nie znamy Ciebie :)

      Budżet także jest istotnym elementem w podejmowaniu decyzji ...

      Usuń
    2. Dziekuje za odpowiedz.

      Okazało się, że mi się poszczęsciło i będę miec caly wór arduino, więc jak na razie na tym poprzestanę :) Ale dales mi duzo do myslenia, zobacze jak moja historia sie potoczy

      Usuń
    3. Na pewno potoczy się z dużymi sukcesami :)
      Powodzenia!

      Usuń
  36. Najlepszy, językiem do programowania mikrokontrolerów wszelakich jest Forth. Ma on większość wymienionych na początku zalet - a konkretnie ma wszystkie "zalety techniczne" C, zaś mniej (przyznaję) "zalet finansowo-zarobkowych" w chwili obecnej - i jeszcze jedną, "kasującą" wszelkie inne propozycje tu wymienione: możliwość INTERAKTYWNEGO rozwijania swojego projektu i testowania każdego kroku. A nie jedynie w "tradycyjnej pętli" typu: "edycja-kompilacja-programowanie-test. Qpa? Wróć do punktu edycja..." ...i tak w kółko. Ale kto nie zna Fortha, ten za bardzo nie wie, o czym ja tu w ogóle piszę.

    Język C został w swoim czasie opracowany do dość konkretnego celu: do napisania systemu operacyjnego Unix. A że jest dzisiaj używany także do programowania mikrokontrolerów? To dokładnie na tej samej zasadzie, co wspomniane BASIC i Pascal: że obecnie mamy tak silne procesory, i tak duże obszary pamięci do dyspozycji, że "da się". Nie ma to żadnego porównania z minimalizmem Fortha - ani też z (wspomnianą już) udostępnianą przezeń możliwością pracy interaktywnej - tak, tworzenia i rozwijania programu - bezpośrednio na kontrolerze. Jak na jakimś Atari czy Commodore, nie przymierzając.

    [Edytowane przez Dondu: Wyciąłem pozostałą część Twojej wypowiedzi, bo z kulturą wypowiedzi nie miała nic wspólnego.]

    OdpowiedzUsuń
    Odpowiedzi
    1. Być może masz rację ... potwierdzam, że nie znam Forth'a :-)

      Nie da się przekonać osoby, do której nie trafiają żadne racjonalne argumenty przedstawione w artykule i komentarzach. Mnie nie musisz przekonywać - przekonaj producentów mikrokontrolerów, by:
      - nie opracowywali kompilatorów języka C (jako jedynych poza assemblerem),
      - nie optymalizowali swoich mikrokontrolerów pod kompilatory języka C,
      - nie dostarczali tysięcy bibliotek tylko w języku C dzięki którym można szybko projektować gotowe urządzenia z ich mikrokontrolerami,
      - nie przedstawiali w dokumentacji mikrokontrolerów tylko fragmentów kodu C i assemblera,
      - itd.

      Niech to wszystko zrobią w Forth - mnie na prawdę jest to obojętne, w czym będę programował :-)

      Usuń
  37. Czemu zatem nie cenzurujesz swoich własnych wypowiedzi o 14-latkach? :D

    Co do Fortha: tak, nie znasz Fortha - "Forther" nie potrzebuje "bibliotek"; on je pisze sam, pod konkretne zastosowanie. A to, że "producent opracował kompilator C" NIE JEST dla niego przeszkodą w programowaniu w Forth-cie.

    Oczywiście: jeśli naprawdę nie widzisz - nie rozumiesz - korzyści w interaktywnym tworzeniu i rozwijaniu projektu bezpośredniu na programowanym obiekcie - w możliwości natychmiastowego wypróbowania każdego nowego pomysłu - być może faktycznie Forth nie dla Ciebie. :)

    OdpowiedzUsuń
    Odpowiedzi
    1. To wskaź jeszcze jakiś kompilator, a raczej toolchain jakością chociażby zbliżony do avr-gcc dla Fortha? I na czym ma polegać ta innowacyjność w natychmiastowym wypróbowaniu nowego pomysłu? Niestety architektura współczesnych MCU nie przystaje do tego języka. A i jezyk ze swoimi ograniczeniam nie przystaje do możliwości współczesnych mikrokontrolerów. Jak każde specjalistyczne narzędzie ma swoje niszowe zastosowania i nic poza tym.

      Usuń
    2. Jak już powiedziałem, nie da się przekonać osoby, do której nie trafiają racjonalne argumenty. Na szczęście producenci mikrokontrolerów rozumieją ten rynek znacznie lepiej i wybierają właściwe rozwiązania, dając nam jednolite narzędzia, które pozwalają nam projektować bardzo szybko, a przez to minimalizować koszty gotowych urządzeń.

      Jeśli natomiast ktoś nie chce korzystać z tych wszystkich wymienionych przez nas udogodnień pozwalających skutecznie konkurować na rynku, to oczywiście może programować mikrokontrolery w Forth. Wynik końcowy nie jest trudny do przewidzenia. :-)

      Usuń
  38. tmf: a w jakich jednostkach będziemy mierzyć tę jakość, abyśmy mogli zgodzić się co do ostatecznego rezultatu? :D

    Gospodarz: zależy, co kto uważa za "udogodnienie": dla jednego jest to "biblioteka" którą może zastosować bez rozumienia, co właściwie robi, ale dla drugiego jest to możliwość przygotowania działającego projektu - z pełną świadomością "co się dzieje" - w ciągu mniej-więcej 1/4 tego czasu, który trzeba poświęcić na zwyczajową "zabawę" typu: "edycja-kompilacja-programowanie-debugowanie-edycja..." ...i tak "da capo".
    Miłej zabawy w C! "Wyniku końcowego" nie muszę przewidywać, bo go przecież znam. :)

    OdpowiedzUsuń
    Odpowiedzi
    1. Ty musisz poświecić czas na pisanie bibliotek, a inni tylko na przeczytanie znajdujących się w nich komentarzy lub manuali przygotowanych przez producenta mikrokontrolera.

      Niestety taki spór może rozstrzygnąć tylko bezpośredni pojedynek :-)
      Ale zawsze można iść pod prąd :-)
      Również życzę wielu wspaniałych projektów, pozdrawiam!

      Usuń
    2. 1. Tak, Forth jest raczej dla ludzi, którzy lubią "wynajdywać koło od nowa" - to fakt. To tak samo, jak np. z ubraniem: jeden lubi kupować w sklepie masowo produkowane szmatki - ale wymagający znawca pójdzie do krawca. :)

      2, "Napisanie biblioteki" jest właściwie czynnością jednorazową - i jeśli jest dostępne źródło w C, nie ma specjalnego problemu z konwersją. A jeśli nie jest - no to się pisze samodzielnie, nie oglądając się na "producenta". Za to krótszy czas doprowadzenia projektu do końca mam ZAWSZE.

      3. Nie, nie mam zamiaru "ewangelizować" - tylko szczerze mnie zdziwiło, że w "konkretnym", zdawałoby się, serwisie poświęconym mikrokontrolerom nie wiedzą, co to takiego Forth, i że jest niejako PREDESTYNOWANY właśnie do pracy z mikrokontrolerami.

      Ale to dla mnie nie problem - w końcu wszyscy nie zdający sobie sprawę, że istnieją lepsze metody niż opisany przeze mnie "cykl", nie mi utrudniają życie, tylko sami sobie. Cóż zatem pozostaje, niż życzyć im "smacznego", powiedzmy? ;)

      Jeszcze do "tmf": "Architektura współczesnych MCU nie przystaje do tego języka" - "jezyk ze swoimi ograniczeniam nie przystaje do możliwości współczesnych mikrokontrolerów" - weź, facet, spróbuj uzasadnić te dwa arcyciekawe stwierdzenia. Ogromnie to będzie interesujące.

      Usuń
    3. Na początku zamieściłem taki duży czerwony napis:

      Każdy język jest dobry dopóki pozwala Ci zaprogramować
      mikrokontroler tak jak chciałeś."


      A pod nim również czerwony:

      Jeżeli chcesz poznać dlaczego ja wybrałem C, to proszę:

      Twoje wersja pierwszego z tych zdań jest inna i zbieżna z maksymą Henry'ego Forda:

      "Każdy język jest dobry pod warunkiem, że jest to Forth."

      :-)

      Dlatego powtórzę jeszcze raz: Nie przekonuj nas, przekonaj producentów mikrokontrolerów, by zamiast C te wszystkie udogodnienia robili pod kątem Forth, bo dla mnie nie ma znaczenia w jakim języku będę programował. Ważne natomiast jest bym dzięki tym narzędziom był konkurencyjny na rynku.

      Usuń
    4. A w sumie to mam propozycję - może napiszesz jakiś artykuł na blog o Forth vs mikrokontrolery? Wtedy zamieścimy tutaj także wzmiankę o Forth, bo jak napisałem wcześniej nie znam Forth.

      Usuń
    5. Jeśli chodzi o narzędzia płatne, profesjonalne - to przykładem takich może być SwiftX: http://www.forth.com/embedded/ (można pobrać bezpłatne wersje ewaluacyjne) - kliknij na "Supported microcontrollers" i zobaczysz obsługiwane "rodziny". Są i bezpłatne narzędzia, oczywiście (na SourceForge, na przykład: FlashForth, PICForth, CamelForth itd.), tudzież płatne innych firm (np. MPE).

      Artykuł? Może i napiszę - ale w wolnej chwili, a tych na razie mi brak. Po prostu: jeśli ma być napisane, to ma być napisane PORZĄDNIE. A nie, żeby po przeczytaniu pisano mi jakieś uczenie brzmiące nonsensy o "architekturach". ;)

      Nie, nie mówię, że inne języki są "złe" - ale i przytoczę takie powiedzonko o Forth-cie: "Forth działa jak wzmacniacz; dobry programista dokona w nim cudów, ale słaby programista sprowadzi prawdziwą katastrofę". Dlaczego? Bo kompilator Fortha jest idealnie posłuszny, można powiedzieć, zatem POZWALA NA WSZYSTKO: nie będzie bronił użytkownika przed jego własnymi błędami. Tu trzeba wiedzieć, co się robi! Cała odpowiedzialność spoczywa na Tobie - a nie na dostawcy "udogodnień". Ale jak się wie - to można sobie "pohulać"... :)

      P.S. Tu jest całkiem niezła charakterystyka języka; dość prosta nawet dla laika:
      http://www.jupiter-ace.co.uk/Forth_PCWGoForthAnd.html

      Nie wiem, kiedy będę mógł coś odpisać na ew. pytanie - może już niedługo.

      Usuń
  39. Kolego Anonimowy - jeśli zamierzasz dyskutować to podaj jakieś argumenty. Bo na razie twierdzisz, że niszowy język, którego obecnie nikt poważny nie używa (jakoś ani firmy produkujące MCU, ani producenci peryferiów nie pokazują przykładów w tym języku, ani nie udostępniają w tym języku bibliotek) jest objawieniem. Twierdzisz, że brak kontroli typów jest super, podczas, gdy wszyscy idą w kierunku języków ze ścisłą kontrolą typów. Architektura - proszę bardzo - jak wygląda wykorzystanie pamięci i stosu w F, a jak wygląda organizacja i zarządzanie stosem w MCU? Nie widzisz tu niekompatybilności? Pytałem o jakieś przykłady na poparcie tezy o rzekomej innowacyjności w wypróbowaniu nowego pomysłu (cokolwiek to znaczy). Jak w świecie embedded chcesz uprościć cykl - pisanie programu-programowanie pamięci - testowanie? C różni się tylko etapem kompilacji i konsolidacji, które są robione automatycznie i w normalnym środowisku użytkownik praktycznie nie ma świadomości ich istnienia. Ale zbyłeś to milczeniem.
    A porównania jakości kompilatorów są publicznie dostępne, analizy wad i zalet również. Więc albo zacznij pisać konkretnie, albo sobie odpuść. Bo mam wrażenie, że toczymy dyskusję z osobą, która właśnie z zakurzonej półki wyciągnęła starą książkę i uległa dziwnej fascynacji.
    Warto też pamiętać, że w statystykach popularności języków używanych do programowania MCU, Forth nawet nie występuje - tak jest niszowy. Więc nawet, gdyby był to najgenialniejszy język na świecie to po prostu z przyczyn czysto praktycznych nie ma sensu w to wchodzić.

    OdpowiedzUsuń
    Odpowiedzi
    1. Ten komentarz został usunięty przez administratora bloga.

      Usuń
    2. Anonimowy kolego. Wytłumaczyłem Ci zasady jakimi kierujemy się na blogu w zakresie dyskusji w komentarzach. Niestety jesteś agresywny wobec kolegi tmf dlatego skasowałem Twój komentarz.

      Jeżeli nadal chcesz w ten sposób prowadzić rozmowę z emocjami i zaczepkami wobec kogokolwiek, to po prostu daj sobie spokój, bo posty będę kasował w całości nie patrząc już na wartościowe fragmenty.

      Usuń
  40. Nie miałem w rękach mcu, którego można oprogramować w BASCOMie czy w FORTH. Za to zazwyczaj spotykam się z zestawem ASM/C/C++

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie bardzo rozumiem, co masz na myśli :-)
      Wszystko co wymieniłeś to tylko języki, których kompilatory zamieniają kod źródłowy na kod maszynowy i dopiero tym kodem programujemy mikrokontroler.

      Usuń
  41. "No chyba, że masz mniej niż 12 lat lub nie będziesz zajmował się tym zawodowo, to wybierz Arduino."
    Arduino to takie małe PLC programowane w języku C , szybko i sprawnie.

    OdpowiedzUsuń
  42. Po latach doświadczeń, a zaczynałem od asm, mogę stwierdzić, że warto zacząć od powszechnego C, lub C++, o czym za chwilę. Zawsze miałem hamulec do przejścia z asm do C, ale gdy to zrobiłem zacząłem żałować, dlaczego nie wcześniej. C uwolnił mnie od setek etykiet, bez ktorych w asm nie da rady, oraz w arytmetyce liczb wielobajtowych. Jedak w C zabrakło mi kontroli nad każdym cyklem, chyba raczej z przyzwyczajenia, bo w praktyce nie robi się tego często. No i ważny aspekt przy tej migracji - co bardziej boli: przesiadka z asm na C, czy z C na asm, bo to dwie różne filozofie programowania. Wg mnie z asm na C jest łatwiej. Asm nie jest dziś ekonomicznie wydajny, hobbistycznie można zaczynać od asm, ale zawodowo nie bardzo. Właściwie nowicjuszom poleciłbym C++, oczwiście do momentu obiektowego, bo to już inny wymiar i początkujàcego może odstraszyç, ale ten pierwszy etap języka, to przecież poczciwy C, z pięknymi mechanizmami jeszcze bardziej ułatwiającymi życie programiście np. parametry domniemane, definicje zmiennych w każdym miejscu kodu, referencje i wiele innych. A później skok w obiekty, to z automatu, i właściwie w którą stronę programowania później nie pójdziemy to drzwi są już otwarte.

    OdpowiedzUsuń
  43. A propos Pascala "na wymarciu":
    11-te miejsce według Tiobe (stan na wrzesień 2016)

    OdpowiedzUsuń
  44. Śmieszy mnie gdy ktoś szydzi z Bascoma, a wynika to głównie z nieznajomości tego języka i jego możliwości.

    Kilka faktów:

    - Bascom umożliwia wstawki w Asemblerze, co daje max power dla wrażliwych czasowo aplikacji oraz umożliwia budowanie skomplikowanych i wielowątkowych aplikacji z użyciem przerwań w bardzo krótkim czasie.

    - Bascom w porównaniu np do Arduino, nie wymaga żadnych bootloaderów i obsługuje długą listę mikrokontrolerów a najtańsze z nich można kupić za 2 zł ( oryginalne Arduino ~ 100zł ) do tego Arduino obsługuje tylko kilka procesorów.

    - Czas napisania sterownika w Bascomie (i jego prostota) korzystającego z I2C, RC5, 1wire, USART i LCD to nokaut dla języka C.

    TO tylko "kilka" zalet. 500zł za pełną wersję programu jest wręcz śmieszna kwotą, biorąc pod uwagę tylko te kilka zalet i zwraca się bardzo szybko. Być może autor ma czas za FREE, jednak warto tutaj wspomnieć iż każda godzina to min ~10zl zarówno na naukę jak i pisanie programu. Do tego należy doliczyć koszt użytych podzespołów co dyskwalifikuje Arduino.

    Porządny kompilator do C kosztuje znacznie więcej niż Bascom, i faktem jest że C można używać na różnych platformach. Jednak czas (koszt!) jaki należy poświęcić na jego naukę aby osiągnąć umiejętność pisania korzystając z w/w protokołów wielokrotnie przekracza to 500zł wspomniane przez autora, bynajmniej na tym poziomie C nokautuje Arduino.

    Osobiśćie używam Bascom włącznie z Asemblerem, bo to najlepszy duet do pisania wszelakiego rodzaju sterowników. Argument iż Bascom obsługuje tylko jedną rodzinę "procków" jest akurat na plus. Gdyż lepiej znać dobrze jedną rodzinę i potrafić wycisnąć z nich max, niż też znać 10 po trochu i korzystać z darmowego i marnego kompilatora C.

    Aby nie było, lata wstecz swoją naukę rozpocząłem od Atari Basic, póżniej Asembler, Delphi, C/C++, Bascom ,Php, Mysql, Javascript i Html oraz C dla Arduino kończąc.

    Każdemu kto chce uczyć się Bascom, polecam równolegle podstawową naukę Asemblera, pomoże to zrozumieć jak działa mikrokontroler i znacznie tym samym rozszerzyć możliwości Bascom'a czyniąc go wyjątkowo efektywnym nawet w zastosowaniach komercyjnych, takich jak sterowniki przemysłowe i to za śmieszne 500zł licencji wliczonej w Bascom.

    Pozdrawiam wszystkich i mam nadzieje iż nikogo nie uraziłem.
    Greg.

    OdpowiedzUsuń
    Odpowiedzi
    1. Niestety nie jest tak jak piszesz. Po pierwsze aplikacje wielowątkowe - ani C, ani Bascom je nie wspierają. Do tego potrzebny jest RTOS. Nie widziałem RTOSa napisanego w BASCOMie. Kolejna sprawa - Arduino nie wymaga żadnego bootloadera. To tylko dodatkowy kod mający zadanie ułatwić ładowanie kodu aplikacji - zamiast z użyciem programatora można to zrobić wykorzystując bootloader. Arduino to tylko zwykły AVR + płytka. U Chińczyków można kupić zestaw poniżej dolara. Można też wziąć procek i sobie go zaprogramować kodem skompilowanym w Arduno IDE.
      Kolejna bajka to knockout dla C przy wykorzystaniu sterowników. Tak się składa, że są biblioteki do obsługi I2C, 1-wire, LCD itd. Wystarczy dołączyć i można korzystać. W Atmel Studio masz ASF i w nim sterowniki do wielu LCD, także graficznych, drivery USB dla urządzeń różnych klas, drivery dla akcelerometrów, czujników ciśnienia i dziesiątek innych rzeczy. Wystarczy kilka kliknięć.
      Owy "darmowy i marny kompilator" - masz na myśli zapewne gcc to jeden z najlepszych kompilatorów na świecie. Koniecznie chcesz płacić to masz IAR, CodeVision, czy Mikroe - wszystkie są z własnym IDE i setkami gotowych bibliotek.
      Wracając do Bascoma - to czegu mu najbardziej brakuje to linkera. Bez tego nie da się stworzyć sensownego, dużego projektu. Takie projekty zwykle wymagają rozbicia na wiele plików nad którymi pracuje się niezależnie. Brakuje mu też nowoczesnego IDE i wielu innych rzeczy.

      Usuń
    2. Przerwania, to podstawa całego systemu, dlatego tak ważna jest umiejętność napisania ich w asemblerze - gdyż tylko asembler jest przewidywalny odnośnie czasu wykonania procedury i to właśnie na przerwaniach uzyskuje się pseudo - wielowątkowość gdyż główna pętla zajmuje się "wątkami" a nie oczekiwaniem na wejście.

      Natomiast nie zrozumiałeś mnie z nokautem C odnośnie sterowników. Oczywiście że są biblioteki do C i to nawet całkiem niezłe - Jednak czas potrzebny aby ogarnąć C i wspomniane biblioteki + czas napisania programu jest wielokrotnie wyższy niż czas ogarnięcia tego samego w Bascom + Asembler.

      Młody człowiek uruchamiający Bascom w zaledwie godzine jest w stanie stworzyć prosty sterownik sterowany RC5 i do tego nie potrzebuje ani przerwań ani asemblera. To właśnie czyni Bascom nieśmiertelnym. Aby to samo zrobić w C czas trzeba liczyć w dniach albo i tygodniach, przez co zniechęca to wiele osób.

      Tą samą drogą poszedł projekt Arduino, tyle iż zmieniono język i wstawiono programator na płytkę przez co stała się wiele większa i droższa, zupełnie NIE potrzebnie - gdyż programator mógł być w komplecie.

      C i GCC jest najbardziej znane (bo darmowe), co nie znaczy iż najlepsze. A wynikowy kod również pozostawia wiele do życzenia.

      Oczywiście nie twierdzę tutaj iż wszystko trzeba pisać w ASM, bo np. proste dzielenie (za wyjątkiem wielokrotności 2) to już nie lada sztuka w ASM.

      Dlatego też warto połączyć szybkość ASM z prostotą Bascom-a i dzięki temu szybko tworzyć nawet zaawansowane projekty.

      Wspominałeś na końcu o braku linkera. Bascom tak samo jak PHP bazuje na "include" i tym sposobem rozbija się projekt na mniejsze części - umawiając się wcześniej co mamy na wejściu i jak przekazywać wyjście - tak więc nie jest to żadnym problemem a wynika raczej z przyzwyczajeń do C.

      Czy uważasz iż Facebook czy też Twitter to małe projekty (dołączając do tego jeszcze całe API) ? One właśnie zostały napisane w PHP bez linkera używając INCLUDE i pracuje nad nimi rzesza osób.

      Dlaczego wspomniane portale nie zostały napisane w C ?? Gdyż jak wspomniałem pisanie w C jest nie ekonomiczne do tego na znalezienie prostego błedu w C można czasem i nawet miesiąc stracić w dużym projekcie. To samo tyczy się Asemblera - dlatego ASM używa się tylko tam gdzie to niezbędne ograniczając tym samym ilość pomyłek do minimum.

      C używam np jeśli potrzebuję napisać coś pod Linuksa.
      DELPHI jeśli pod Windows.
      PHP do aplikacji serwerowej.
      A BASCOM i ASEMBLER jeśli tworzę oprogramowanie dla mikrokontrolera.

      Nie ograniczam się do jednego języka, gdyż tylko znając kilka nie przeszkadza Ci ułomność pozostałych w kwestiach do których nie najlepiej się nadają.

      Pozdrawiam, Greg.

      Usuń
    3. Pseudowielowątkowość to nie wielowątkowość. Proszę nie mylić pojęć. Prosiłby też o konkretne przykłady, gdy określony czas wykonania ISR jest istotny.
      Czas ogarnięcia struktury biblioteki w małym stopniu zależy od języka, a praktycznie w całości od jej dokumentacji. Biorąc pod uwagę systemy automatycznie tworzące dokumentację, można przypuszczać, że będzie ona lepsza dla C niż dla Bascoma.
      gcc jest liderem we wszytkich rankingach jakości tworzonego kodu, szybkości itd. Nawet nie próbuj tego porównać do kompilatoropodobnego tworu typu Bascom, bo to tylko śmiech.
      Mijasz się znowi z prawdą pisząc o portalach takich jak Twitter, czy FB:
      https://en.wikipedia.org/wiki/Programming_languages_used_in_most_popular_websites
      Jak widać rdzeń stanowi zapewne C/C++, a obecnie rzadko stosowana PHP to zewnętrzna otoczka.
      Linker to nie to samo co jakieś include. W C/C++ mamy include, ale żaden szanujący się autor książek o programowaniu nie zaleca, aby używać tego do wstrzykiwania kodu źródłowego. Prosty, acz nie jedyny przykład na problem wynikający z braku linkera - robisz małą zmianę i w efekcie musisz rekompilować cały projekt. Mając linker - rekompilowany jest tylko plik w którym zaszła zmiana (i ew. zależności), co zajmuje chwilę, a następnie równie szybko jest tylko konsolidowany cały projekt.

      Usuń
  45. Rozbawiłeś mnie kolego, a właściwie administratorze bloga.
    A więc po kolei:

    Pytałeś o przykład kiedy czas wykonywania jest istotny, oto kilka przykładów:

    - Obsługa magistrali RS485 (1 - 2.5 Mbps to standard)
    - Obsługa magistrali CAN ( znaczna większość obecnie produkowanych pojazdów )
    - Obsługa studyjnych przetworników A/C (24bit,176Kb/s,2 kanały)
    - Obsługa przetworników Video.

    RS485 to standard stosowany w przemyśle, CAN w motoryzacji.
    Napisz sobie w C przechwytywanie obrazu do pliku .bmp z tak prostej kamerki jak
    np. OV 7670 (640x480) i skompiluj swoim super gcc.
    I co ? Kicha - nie wyrobi się. Tutaj tylko Assembler da radę.

    Dalej:

    Cyt. "porównać do kompilatoropodobnego tworu typu Bascom"
    Moim zdaniem kompilator C jest miażdzony przez interpreter PHP, który działa
    w czasie rzeczywistym a wszystkie zmiany w plikach "includowanych" są
    natychmiast widoczne bez linkera.

    Twoje przyzwyczajenia z C kompletnie zaciemniają realny obraz sytuacji.

    Bascom tworzy dobry kod, szczególnie jeśli najważniejsze procedury są
    napisane w ASM, taki duet kopie leżące C pod względem szybkości pisania programu
    Dlatego właśnie do mikrokontrolerów takiego duetu używam a nie C.

    Dalej:

    Cyt "obecnie rzadko stosowane PHP to zewnętrzna otoczka."

    PHP obecnie stanowi ponad 80% wszystkich stron w sieci.

    https://w3techs.com/technologies/overview/programming_language/all

    C jako margines, nawet nie zmieścił się w zestawieniu.
    Tutaj Java konkretnie go nokautuje, o ASP.net nie wspominając.

    Szybkość pisania w PHP vs C to jakby porównać ślimaka do rakiety,
    stąd też wynika jego popularność.
    Ponadto do PHP nie trzeba dodatkowych kompilatorów itd.
    Po prostu piszesz (nawet i w notatniku) i uruchamiasz.

    Giganci jak Google używa C dlatego iż gotowy kod jest szybszy niż
    interpreter PHP, jednak na czas jego napisania (czyt.koszt)
    mogą sobie pozwolić tylko molochy, gdyż jak już wielokrotnie wspominałem
    C jest wyjątkowo nie ekonomiczne jeśli idzie o czas napisania gotowego kodu.

    Mam nadzieje iż nie uraziłem.
    Pozdrawiam, Greg.

    OdpowiedzUsuń
    Odpowiedzi
    1. Znowu kolega jakieś bajki wypisuje. RS485 nie jest krytyczny czasowo, nawet 8-bitowe procki w Bascomie się przy tym wyrabiają. Od tego jest hardware, w buforowaniem, który realizuje tą transmisję sprzętowo. Podobnie kontrolery CAN mają wielopoziomowe bufory na ramki, dzięki czemu obsługa zdarzeń nie jest krytyczna czasowo. Wspomniane przetworniki ADC to nie domena 8-bitowców. Zwykłe DMA lub I2S rozwiązuje sprawę. Obsługa przetworników video? Jakiś przykład?
      Do kamerek ARMy mają stosowne interfejsy, jeśli ktoś robi akwizycję obrazu o takiej rozdzielczości to zazwyczaj w jakimś celu i tu 8-bitowce po prostu się nie nadają. Chociażby z braku pamięci na bufor ramki. Dalej to już mieszasz Bascom z PHP i nawet nie wiem o co ci chodzi. BTW, do PHP istnieją kompilatory. A z malejącym rendem jest on ciągle używany, bo został stworzony do tworzenia komunikacji i serwisów internetowych. Podobnie jak kiedyś Pearl. Poza tym nie ma żadnych zastosowań.

      Usuń
  46. Nie znam się, ale moim zdaniem do przypisywania wartości w rejestrach to nadaje się każdy z wymienianych języków programowania ( pierwszeSlyszęBascom, C, C++11, Java, ASM, Basic, itd. )... Pozdrawiam:)

    OdpowiedzUsuń
  47. Aż się człowiek boi wypowiadać w takich sprawach. Naprawdę. Chciałoby się nauczyć programowania, a tu tylko dyskusje na temat wyższości jednych języków nad drugimi. Przez takie dywagacje nawet nie chce się zaczynać. No cóż, bawcie się dalej, a ja wracam w oscyloskopy cyfrowe, bo chyba to najbezpieczniejszy teren. Pozdrawiam! Co do autora bloga to życzę dużo sukcesów w rozwoju tej strony! :)

    OdpowiedzUsuń
  48. Trzeba przejść przez niektóre języki, żeby łatwiej było nauczyć się innego. Tu nic nie jest przypadkiem, nauka programowania nie jest łatwa.

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.