Vlákno názorů k článku Software inteligentního internetového termostatu od Stanislav Brabec - Osobně mne přijde, že Arduino IDE je největší...

  • Článek je starý, nové názory již nelze přidávat.
  • 11. 6. 2015 17:50

    Stanislav Brabec

    Osobně mne přijde, že Arduino IDE je největší brzdou možností Arduina. Přesněji řečenou, tou brzdou je návrh knihoven a způsobu programování.

    Arduino IDE přímo učí programátory špatným návykům. Nutí je, aby vše programovaly sekvenčně v nekonečných smyčkách. To nejlepší, co nabízí, jsou dotazy na to, zda nějaký modul (např. sériový port) má k dispozici data.

    Se základními knihovnami nelze programovat paralelně. A pokud se o to pokusíme, a chceme použít jen vybraná volání, knihovny nám aktivně házejí klacky pod nohy. Například nikde není zdokumentováno, že některé funkce nám přeprogramují časovače. O čekání na změnu stavu pinu v úsporném režimu si můžeme nechat jen zdát.

    Takže představa, že třeba pomocí Arduino IDE naprogramujeme program, který čte z teploměru a paralelně posílá předchozí data na displej, je lichá. Když čte teplotu, nemůže obsluhovat displej, a naopak.

    Stejně tak třeba nemůžeme řídit krokové motory a přitom posílat data po sériovém portu. Musíme krokové motory nejdřív zastavit, a až pak teprve komunikovat.

    A přitom ATMega jsou procesory, které mají časovače, přerušení, úsporné režimy, watchdog…

    U nejstarších verzí šel dokonce předpoklad programování v nekonečných smyčkách až do návrhu hardwaru. Byl použit stabilizátor, který měl vysoký minimální proud, a pokud šel procesor do úsporného režimu, stabilizátor nedokázal správně fungovat, a mohlo dojít až ke zničení procesoru.

    A to ani nemluvím o pomalosti a velikosti výsledného kódu. Třeba zmíněný přenositelný digitalWrite() je 28× pomalejší, než by mohl být, kdyby byl napsaný s ohledem na rychlost.

  • 11. 6. 2015 21:12

    Petr Stehlík
    Zlatý podporovatel

    Pane Stanislave, vcelku souhlasím, ale mám dobrou zprávu - v příštím díle mám v plánu se možnostem paralelního programování věnovat. Dneska se mi díl natáhl tím úvodem a pak jsem považoval za dobré zmínit ten bootloader, tak na samotný program mi už prostor nezbyl.

  • 12. 6. 2015 8:55

    SB (neregistrovaný)

    Má smysl se na tak primitivním jednočipu s tak omezenými prostředky pokoušet o vysokoúrovňové programování?

  • 12. 6. 2015 15:12

    Stanislav Brabec

    To není vysokoúrovňové programování. To je naopak ta nejnižší úroveň, sahající až na hardware.

    A má smysl se o to pokoušet:

    - Když místo digiralRead() ve smyčce použijeme přerušení, lze snížit příkon čipu tisícinásobně.

    - I jednoduché programy fungují s paralelizací lépe. Lze například točit s krokovými motory a přitom číst data z portů, lze posílat data na displej a přitom nepřijít o události na GPIO.

    - Když místo počítání ve smyčce použijeme časovač, opět lze snížit příkon čipu tisícinásobně. (Pravda, některé funkce na čekání v Arduino IDE časovač používají. Ovšem vzhledem k tomu, jak špatně je to zdokumentované, a jak široce se tyto funkce používají v jiných knihovnách, tak je to spíš na škodu, protože nikdy nevíte, kdy vám nějaká funkce časovač zresetuje.)

    - Možnosti přesně časovat kritické události, bez ohledu na to, v jaké části nekonečné smyčky se udály. Krokové motory budou mít plynulý chod, generátory budou generovat čisté signály, digitální signály budou mít přesné časování atd.

  • 15. 6. 2015 7:23

    Petr M (neregistrovaný)

    Ono je to kupodivu velice jednoduchý. Jediný problém je, že se začátečník naučí syntaxi C, nekonečnou smyčku v main(), potom nastavovat a číst bity v registrech a nikde nenajde, co hodit mezi to... Přitom tohle zrovna patří k základům, který by měl umět každý jednočipář.

    Paralelně běší skoro všechno. I blbej tachometr v autě - hýbe ručičkou při tom počítá kilometry, zobazuje je a světe, div se, komunikuje u toho po CANu... A to vše současně. Dálkový ovládání k telce zvládne blikal LEDkou během čtení klávesnice,... Kde je jednočip, tam je paralelní úloha.