EFTON

BASIC stále živý!

(manifest)

Programovací jazyk BASIC vznikol v čase, keď s rozšírením sa počítačov prestalo byť programovanie tajomným umením hŕstky vyvolených. Bolo potrebné vytvoriť jazyk nie akademicky čistý, ale s jednoduchými a ľahko pochopiteľnými pravidlami a zákonitosťami. Vznikol jazyk, na ktorého nespočetných variantoch a dialektoch vyrástla celá generácia súčasných výkonných programátorov.

BASIC bol typicky implementovaný ako súčasť 8-bitových "domácich" či "školských" počítačov, ako interpretovaný jazyk (prekladaný do strojového jazyka priamo počas behu programu). Typická konfigurácia takéhoto počítača bola cca. 16kB ROM, ktorá obsahovala samotný interpreter a príslušné "operačné prostredie", a niekoľko (desiatok) kB RAM, ktorá obsahovala samotný program a dáta.

V súčasnosti vďaka zlacňovaniu výroby integrovaných obvodov preniká ďalší produkt z oblasti špecializovaných expertov medzi širokú verejnosť - mikrokontroléry (mirocontroller units - mcu, jenočipové mikropočítače). Typický mcu posledných rokov má pamäť programu FLASH niekoľko až niekoľko desiatok kB FLASH (programovateľnej v aplikácii "za jazdy"), niekoľko kB RAM príp. aj EEPROM pre dáta, a široké spektrum periférií, napr. čítače/časovače, kontroléry komunikačných zberníc- U(S)ART, I2C, SPI, USB; AD prevodníky, PWM kontroléry a pod. Vidíme, že v jednom obvode máme k dispozícii konfiguráciu porovnateľnú so spomínanými počítačmi (ba dokonca výkonnejšiu) - prečo teda nepoužiť podobné programovacie prostriedky? Na rozdiel od nich však základným vstupno/výstupným prostriedkom nie je zabudovaná klávesnica a televízor v úlohe monitora, ale štandardná sériová linka RS232 a terminálový program na PC.

Pochopiteľne hneď vzniknú otázky a pochybnosti:

BASIC je nemoderný jazyk.

Áno, to je pravda. No a čo?

BASIC je neštrukturovaný jazyk.

Áno, je. Avšak aj v štrukturovaných jazykoch častokrát existujú (a v praxi sú využívané, a práve častokrát kvôli zjednodušeniu a sprehľadneniu) neštrukturované prvky. BASIC je síce známy častým používaním "nepriateľa štrukturovanosti" - príkazu GOTO, avšak prehľadnosť a čitateľnosť programu je vždy skôr otázkou disciplinovanosti programátora.

BASIC nepodporuje smerníky, odovzdávanie parametrov funkciám, ich preťaženie, objektové programovanie...

Áno, ale tovlastnosti naplno využívané skôr pri rozsiahlejších aplikáciach, čo je u mcu skôr netypický prípad. Každopádne sa dajú obísť či nahradiť.

BASIC je pomalý.

Áno, v relatívnom porovnaní, typickyprogramy písané v asembleri najrýchlejšie, programy v kompilovaných jazykoch ako C či Pascal sú pomalšie a interpretovaný jazyk akým je aj BASIC, sú najpomalšie. Je to však relatívne porovnanie a rýchlosť vykonávania programu je ešte stále dosť vysoká a častokrát je postačujúca.

sa s tou pomalosťou niečo robiť?

Samozrejme, viac veci:

1. Použiť rýchlejší mcu. U rodiny '51 je k dispozícii viacero variánt, s rýchlejšími hodinami, alebo s prepracovanými inštrukciami vyžadujúcimi menej taktov ako je štandard.

2. Častokrát je potrebné, aby sa rýchlo vykonávala len malá časť programu (kľúčové rutiny), pričom rozsiahla časť môže byt aj pomalšia (typické pre užívateľský interface). Vtedy sa dá skombinovať asembler (pre rýchle časti) s BASICom (pre pomalšie, rozsiahle časti) - tato prax sa niekedy používa aj pri kompilovaných jazykoch.

3. Program sa dá zrýchliť určitým "predžutím" (quasi-kompiláciou) - dôslednou kontrolou syntaxe (čím sa odstráni potreba kontroly syntaxe za behu), "predpočítaním" konštantných výrazov, vynechaním komentárov, nahradením skokov podľa čísiel riadkov priamo skokmi na adresu v pamäti, nahradením názvu premennej priamo adresou v pamäti - a použitím zmodifikovaného interpretera pre takto upravený program.

Interpreter je možné tiež ad-hoc upraviť vynechaním nepoužívaných súčastí, čím sa výsledná aplikácia môže zmestiť do menšieho a lacnejšieho mcu.

4. Použiť skutočný kompilátor.

Ak existuje kompilátor, načo nám je interpreter?

Čaro interpretera spočíva v tom, že si väčšinu príkazov, ich kombinácii, a najmä ich následkov, možno vyskúšať ("ohmatať") okamžite v príkazovom režime. Program je možné zastaviť, v príkazovom režime si dať vypísať jeho premenné (hoci aj v nejakom zložitom príkaze), zmodifikovať ich hodnotu, "ručne" vykonať nejaký zabudnutý príkaz, a potom v programe pokračovať (tuto úlohu pre kompilované jazyky plnia rôzne debuggery či simulátory; tu je to priamo vlastnosť interpretera).

Mimochodom, samotný interpreter je jednoduchší ako kompilátor a tým je menej pravdepodobné, že je v ňom skrytá chyba.

Prečo vyvýjať aplikáciu priamo na mcu, prečo radšej nepoužiť simuláciu v PC?

To je ďalšia časť "čara" spočívajúca v bezprostrednosti - výsledok operácií je okamžite viditeľný, je menšie riziko, že aplikácia sa nebude správať podľa očakávania kvôli nedokonalému či priamo chybovému simulátoru či neprítomnosti pripojeného hardwaru v simulátore.

Prečo sa pracuje cez RS232? Nebolo by lepšie použiť SPI/I2C/USB/JTAG/1wire...?

RS232 je rozšírený štandard s minulosťou, budúcnosťou; je robustný, jednoduchý a široko známy a akceptovaný. Nevýhodou je, že je konzolou obsadený sériový port mcu (i keď u súčasných mcu strednej a vyššej triedy je2xUART štandardom).

Aký terminálový program použiť na PC/Win?

ĎALEKO lepší ako zabudovaný Hyperterminal je TeraTerm, voľne získateľný na Internete (http://www.vector.co.jp/authors/VA002416/teraterm.html, program má veľmi slušnú dokumentáciu). Doporučujeme.

Aké sú iné možné terminálové programy/iné OS/iné HW?

Pre Win sú voľne dostupné napr. realterm (http://realterm.sourceforge.net), Termimal by Br@y++ (http://bray.velenje.cx/avr/terminal)...

Linux: napr. minicom...

Nie je problémom pracovať ani s PDA, napr. na PalmOS obsahuje pekny terminal ptelnet (http://netpage.em.com.br/mmand/ptelnet.htm).

Asi neexistuje OS či platforma pre ktorú by nebol terminálový program jednou zo základných aplikácii.

A pochopiteľne,sa použiť aj akýkoľvek sériový alfanumerický terminál; prípadne pre fajnšmekrov hoci aj ďalekopis... :-)

Poznámka k mikrokontrolérom:
Obvykle sa mcu vyrábajú v "rodinách", kde sa jednotliví "členovia" líšia pamäťou a výbavou periférií, ale samotné jadro ostáva rovnaké. Zámerom výrobcov je poskytnúť možnosť jednoduchého prechodu k vyššiemu typu v prípade potreby; a aj naopak, možnosť odladiť aplikáciu v lepšie vybavenom, vyššom type (ktorý môže mat aj zabudované ladiace prostriedky) a pre sériovú výrobu použiť menší a lacnejší typ.

Spoločným znakom prevažnej väčšiny mikrokontrolérov je - bohužiaľ - pomerne málo pamäte RAM (max. niekoľko kB), a to dokonca aj u najvyšších modelov jednotlivých radov, disponujúcich stovkami kB programovej FLASH (a častokrát ešte aj EEPROM, ktorá je porovnateľná či väčšia než RAM). Je zvláštne, že sa výrobcovia tvrdošijne držia tejto schémy, ktorá zozložiťuje aplikácie s potrebou väčšieho množstva dát či so zložitejšími OS a podobne. Čiastočne by sa to mohlo dať vysvetliť tým, že kým 1 bit FLASH predstavuje o málo viac ako 1 tranzistor (adresovacie a čítacie tranzistoryspoločne pre skupinu pamäťových tranzistorov) tak 1 bit SRAM predstavuje 6 tranzistorov + príslušné zložitejšie prepoje, a teda ide o plochu čipu a tým cenu; ale skôr sa asi jedná o určitú zotrvačnosť v myslení výrobcov.