Království výkonných miniaturních počítačů

I jednočipové počítače (tzv. jednočipy), podobně jako celý okolní svět mikroelektroniky, zaznamenaly v posledních l...


I jednočipové počítače (tzv. jednočipy), podobně jako celý okolní svět
mikroelektroniky, zaznamenaly v posledních letech bouřlivý rozvoj. Přitom z
výrobních linek sjíždějí stále další a další novinky.
Než si přiblížíme jejich nedávnou historii, ale zejména však žhavou současnost,
podívejme se, co vlastně ty jednočipy jsou.
Oč jde
Odborníkům zcela jistě není třeba vysvětlovat, že jednočipový počítač
nepředstavuje počítač (třeba typu PC) napasovaný na jedné křemíkové destičce.
Nicméně se na takové destičce nachází vše, co potřebuje konkrétní program k
tomu, aby mohl fungovat. Kromě procesoru jde tedy hlavně o paměť typu RAM pro
uchovávání aktuálních dat a o paměť, která umožňuje uchování dat i po vypnutí
napájecího napětí. Dříve to byly typicky paměti typu ROM, či (E)PROM. V
současnosti se už běžně objevují paměti EEPROM či FLASH, což umožňuje
jednodušší odladění programu, či jeho případnou pozdější úpravu. K té může
dojít např. tehdy, dojde-li ke změně podmínek, ve kterých má počítač pracovat.
I když jsou paměť a procesor dostatečnou výbavou pro běh programu, byl by
počítač bez dalších doplňků slepý, hluchý a němý zároveň. To znamená, že
zmíněná křemíková destička obsahuje ještě tu více, tu méně specializované
obvody pro komunikaci s okolím. Ať už se jedná o nejjednodušší digitální vstupy
či výstupy (dvoustavové rozhraní např. v logice TTL), nebo jde o propracovaná
komunikační rozhraní různých standardů (RS2xx, CAN, ...).
K čemu vlastně...
Pomocí uvedených periferních zařízení potom počítač komunikuje s okolím, začíná
vidět a slyšet a může do ledasčeho mluvit. A k čemu to vše tedy vlastně slouží?
Jednočipové počítače nacházejí největší uplatnění v řídicích aplikacích. Přitom
nemusí jít zrovna jen o ovládání výtahu, řízení vstřikování paliva vašeho
automobilu, ale třeba též o mobilní telefon, digitální diář či dětskou hračku.
Anglické shrnující označení pro podobná samostatná zařízení nasazená v různých
místech je "embedded systems" (zabudované/vestavné systémy). Toto označení je
zajisté ještě poněkud obsažnější, avšak jinak plně vystihující podstatu
podobných systémů.
Při práci s jednočipovými počítači je třeba si také uvědomit, že tvůrce
programu má velmi omezené možnosti už např. tím, že podobné počítače v naprosté
většině postrádají operační systém. Pro zanícené fandy oboru však tato okolnost
není nikterak svazující a naopak ji považují za podstatnou výhodu. Mají potom
celý systém "v ruce" a nemusí se zabývat problémy s délkou odezvy systému apod.
Vraťme se však k určení těchto mikropočítačů, což je především řízení ve všech
jeho formách. Na triviální úlohy pochopitelně vystačíme s jednoduchými
procesory. Na složitější věci si vezmeme něco výkonnějšího. Ale co dělat v
případě, pro nás jinak zcela běžných operací, jakými je například stisknutí
ovládacího tlačítka kuchyňského robota, když to čip neumí? A to už třeba
principiálně, nebo prostě proto, že zvolený typ je o tuto vlastnost ochuzen?
Zde vstupují do popředí externí periferní zařízení, která jsou k počítači
připojena jen pomocí nějakého jednoduchého ovládacího rozhraní a na základě
jeho pokynů provádějí potřebné operace.
Okolí procesoru
Výběr podobných zařízení je pestrý: výkonové spínače, komunikační linky, různé
převodníky, LCD-displeje, identifikační jednotky a mnoho dalších. Přitom trend
poslední doby naznačuje, že stále více a více zařízení se přesunuje na čip
(převodníky, komunikační linky, ovladače displejů). Anglicky se takto vybavené
procesory označují "systems on chip". Poskytují ucelená řešení pro daný typ
úloh a při velkých sériích nabízejí velmi levné řešení. Takto "nabitý" procesor
je např. typ MB90590 společnosti Fujitsu.
Mimo čip tak zůstávají pouze velice speciální zařízení, nebo ta, která nelze už
ze samé podstaty, nebo by to nebylo účelné, do "křemíku" dostat (výkonové
spínače, zobrazovací jednotky displejů, aj.). Existuje však určitý okruh
zařízení, která jsou spjata s jednočipovými počítači prakticky od začátku. V
současnosti se pak spíše rozšiřuje jejich počet na čipu a počet různých režimů,
ve kterých mohou pracovat. Zde se jedná zejména o digitální vstupy a výstupy,
čítače a časovače, a s nimi spjatý systém přerušení a další zabezpečovací
podsystémy.
Minulost, současnost a budoucnost v kostce
A jak vlastně vypadaly první jednočipové počítače? Taktovací frekvence se
počítala na desítky až stovky kilohertzů a šířka dat byla 4 až 8 bitů. Na čipu
bylo pár slov paměti typu RAM a ne o mnoho více paměti typu ROM. Systémek měl
potom jenom úzký koridor digitálních vstupů a výstupů, případně zdroj externího
přerušení, nebo i nějaký časovač. Ale to nebylo málo, protože podobná výbava, i
když rozšířená např. o sériový komunikační kanál, přetrvala až do dnešních časů
u řady čipů a produkují se dokonce i jednodušší. Za všechny "vytrvalce"
jmenujme alespoň legendu Intel 8051 a za představitele těch nejmenších řadu
procesorů PIC od společnosti Microchip, či nejmenší typy z řady Atmel-90.
V současnosti se vše zrychluje a zvětšuje šířka zpracovávaného slova.
Jednočipové počítače nejsou výjimkou a proto se dnes setkáváme s taktovacími
frekvencemi v desítkách MHz. Už nás nepřekvapí čipy využívající architektury
RISC a pracující s frekvencemi v řádech stovky MHz. Stejně tak šířka
zpracovávaného slova se pohybuje od 16 bitů výše, i když 8 bitů je pro řadu
aplikací naprosto dostatečných. A jelikož s jídlem roste i chuť, potřebují
podobné čipy i více paměti. Není proto ojedinělé mít jednočipový počítač, který
obsahuje řádově desítky až stovky KB permanentní paměti pro úschovu programu a
inicializačních dat. Nebo, pokud se jedná o čip, který už toho umí "více", je
často vybaven možností připojení a ovládání vnější paměti. Sice už to potom
není jediný čip, který reprezentuje celý počítač, ale zato máme možnost uložit
svá data či programy do několika desítek MB.
A kam toto vše směřuje? Potřeba rozšiřovat šířku zpracovávaného datového slova,
kterou je možné sledovat u osobních počítačů či pracovních stanic, proniká
pozvolna i do jednočipových počítačů. I když je třeba říci, že opravdu
pozvolna, protože zatím potřeby extrémního trvalého výkonu nejsou tak časté a
když, tak se obcházejí jiným způsobem většinou použitím specializovaného
procesoru. Také tzv. spekulativní provádění instrukcí procesoru známé např. z
pracovních stanic není žádoucí. Důvodem je to, že se často při tvorbě softwaru
pro takové počítače přímo počítá s tím, kdy bude která operace provedena a jak
dlouho bude trvat.
Proto vznikají architektury odvozené od existujících systémů s tím, že se
dodržují vlastnosti nezbytné pro jednočipové počítače. Dochází tak k
implementaci různých čipů architektury RISC i jako jednočipových počítačů.
Například PowerPC procesory existují i pro řídicí aplikace (i když jednočipový
počítač to rozhodně není). Dále se třeba v 32bitových procesorech prosazuje ARM
jádro, které vysledujeme třeba u novinek od firem Sharp a Atmel. Zde vlastně
dochází k obestavení poskytovaného jádra třetí stranou vlastními obvody pro
periferní zařízení. To by mělo umožnit stejný typ programování různých čipů a
zákazník by tak měl získat možnost volby. Jedná se však pouze o hypotetickou
úvahu, jelikož nastavení periferních obvodů se pochopitelně liší podle výrobce.
A to, že tak můžeme učinit stejnými instrukcemi, už většinou tak důležité není.
U obvodů periferních zařízení lze jen těžko vysledovat co přijde, protože
vlastně neustále přichází všechno to, co se dá někde výhodně využít. Ať jde o
ovladače LCD-displejů, obvody pro dálkové ovladače televize nebo videa, obvody
vhodné do telefonních modemů, nebo třeba obvody pro ovládání krokovacích
motorků či zvukové generátory. U posledně zmíněných zvukových generátorů
specializace vedla tak daleko, že se vyvinula ve vlastní skupinu procesorů
označovaných DSP z anglického "Digital Signal Processor", což znamená procesor
pro číslicové zpracování signálů. Jejich nasazení však už široce přesahuje
rámec pouhého zpracování zvuků a obrazů.
Programování
Jak tedy vidíme, jednočipové počítače jsou jak jednoduché, až bychom mohli říci
prostoduché, automaty pro zcela specifické účely, tak poměrně dosti složitá
zařízení, která se dají použít v celé řadě různých aplikací, takže jejich
použití je víceméně obecné. Potom ovšem takové čipy pochopitelně musí obsahovat
širokou podporu různým činnostem přímo na čipu.
Otázkou, která se jistě vynořuje v mysli, je, jak se potom takový počítač na
jedné křemíkové destičce vlastně dá naprogramovat. K dispozici nejsou služby
operačního systému, a i jiné pomůcky, jinak běžně používané, mohou selhávat.
Tak tedy jak?
Jak a čím...
Samozřejmě i zde se vývoj nezastavil a tak "assembler" (jazyk strojových
instrukcí), který byl často jediným nástrojem, už dnes není sám samojediným
prostředkem pro práci s jednočipovými počítači. I když je třeba přiznat, že v
určitých rovinách je naprosto nezastupitelný. Takže ne třeba zrovna jako
samostatný produkt, ale jako součást jiného jazyka, či produktu, je používán
dodnes. Jeho služby jsou třeba zejména tam, kde nám jde o čas, či nás příliš
tlačí málo místa.
Přitom může jít o aplikace náročné z hlediska synchronizace, rychlé odezvy
systému na nečekanou událost apod. Co však jsou už zmiňované jiné jazyky, či
dokonce produkty? No, v podstatě je to podobné jako u běžných počítačů typu PC.
Za nějakou dobu potom, co se tyto počítače začaly rozšiřovat, se objevily i
programy jako TurboC nebo TurboPascal, nebo něco hodně podobného. Zprvu tyto
programy nabízely málo podpůrných prvků de facto jen holý programovací jazyk se
základní sadou knihoven pro ty nejběžnější operace. U jednočipových počítačů to
bylo velmi podobné.
První vyšší programovací jazyky taky nabízely jen chudé vybavení neexistence
operačního systému umožňovala pouze velmi teoretickou implementaci určitých
knihoven. A pokud měl být takový překladač široce použitelný, nemohl by se
zabývat konkrétními systémy. Na druhou stranu bylo však třeba do jazyka, či do
podpůrných knihoven zanést prvky, které by umožňovaly manipulaci se
specifickými zařízeními daného čipu. Zde se však přešlo k obecným řešením,
která umožnila přístup na řídicí registry daného periferního zařízení a
uživatel si už zbytek musel naprogramovat sám.
Největšího rozšíření se zde dočkal jazyk C, který zaujímá zcela výhradní
pozici. Je možné najít hned několik světových výrobců, kteří nabízejí podporu
řady procesorů. Za všechny jmenujme severskou firmu IAR a americkou Cosmic
Software. Pokud je autorovi známo, tak překladače pro ostatní jazyky se
objevily jen okrajově. Snad nejvýznamnějším zástupcem ostatních vyšších
programovacích jazyků je MODULA-2. Za nejpropracovanější potom je asi možné
považovat implementaci tuzemského producenta CerSoft, která podporuje více
cílových platforem v rámci jednoho rozhraní. U ostatních jazyků či producentů
se potom typicky jedná o zaměření se na jeden typ procesoru.
Vývoj jazyků
Jak šel dál vývoj v programovacích jazycích pro stolní počítače, tak postupoval
i v jazycích pro počítače jednočipové. Brzy se objevily velmi solidní programy
pro ladění a trasování hotových programů. Úroveň jejich provázání se zdrojovým
kódem však zdaleka nedosahuje možností známých ze stolních počítačů. Není to
ani tak dáno možnostmi podobného softwaru, i když určité limitace pochopitelně
existují, ale spíše tím, že v podobných programech jde opravdu o každou
instrukci a tak i ladění probíhá tím způsobem, že uživatel sice vidí originální
řádek programu, může přistupovat na jednotlivé proměnné, ale krokování programu
se děje spíše po instrukcích procesoru (pokud to ten ovšem vůbec umožňuje).
V systémech, které se objevily v poslední době, je sice možné krokovat přímo v
původním programu, ale staré schéma se neopouští a dochází pouze ke kombinaci,
či prolínání obou.
Prvními podpůrnými prostředky pro ladění programů však nebyly pouze programy,
jež byly načrtnuty výše, ale tzv. emulátory. Jedná se o speciální hardware,
který buďto nahrazuje daný jednočipový počítač úplně, nebo ho svým způsobem
"obaluje". Spojením takového emulátoru s počítačem, který obsahuje příslušný
podpůrný program, se potom můžete dovědět spoustu věcí o tom, co se v
jednočipovém počítači a kolem něj vlastně děje. Pochopitelně, že takovéto
systémy nevymizely a používají se dodnes. Jsou to naopak právě prvky okoukané
ze stolních počítačů, které začínají emulátorům konkurovat. Dokonce jdou až tak
daleko, že na vašem stolním počítači daný systém "odsimulují", tj. nahradí daný
jednočipový počítač po dobu nezbytnou na odzkoušení vašeho programu.
Taková simulace však rozhodně není plnohodnotným mode-lem a může se stát, že v
cílovém systému se program bude chovat poněkud odlišně. A jak se dále vyvíjely
programy pro vlastní tvorbu softwaru?
Bohatě vybavené knihovny stolních počítačů, které pokrývaly oblasti grafiky,
matematiky, úzké vazby na systém a řada jiných, pochopitelně neměly smysl v
jednočipových počítačích. Na druhou stranu se však postupně objevovaly
knihovny, které doplňovaly základní vlastnosti periferních zařízení na čipu.
Tak se vytvářely funkční jednotky, které v konečném účinku zjednodušovaly práci
programátorů.
Avšak i když vezmeme v úvahu existenci podobných knihoven, tak přece neustále
právě na programátorovi zůstává břemeno nastavení velké části řídicích
registrů, a v průběhu vyhodnocení potom i další operace. Pokud se jedná o
jednodušší čip, tak to jistě není triviální, ale dá se vše zařídit tak, aby i v
"assembleru" se nic neopominulo a každý registr byl správně nastaven, přečten,
atd. Pochopitelně, že podobný kód musí být bohatě dokumentován, jelikož i sám
tvůrce lehce ztratí přehled, pokud danou věc nevidí každý den. I když "skalní"
obhájci jednočipových procesorů by vám tvrdili, že to je právě ono, a že
speciální počítače vyžadují speciální přístup. To ale není tak úplně pravda.
Zvláště v okamžiku, kdy počet periferních zařízení na čipu přestoupí určitý
počet, kdy jeden typ zařízení se vyskytuje v několika nerozlišitelných kopiích.
Potom se jeden může lehce zmýlit v tom, jestli by měl použít registr s indexem
1 či 2. Zejména, když si uvědomíme, že kopírování bloků v editoru dnes už
rozhodně není výjimečná vlastnost. Drobné přehlédnutí potom na sebe nenechá
dlouho čekat.
Prostředky zítřka
Co by tedy přineslo řešení? Stejně, jako knihovny pro programovací jazyky
určené pro stolní počítače se začaly plnit v podstatě ucelenými řešeními až s
příchodem objektově-orientovaných jazyků, ani u jednočipových systémů tomu
nemůže být jinak. A to proto, že až základní vlastnosti objektového paradigmatu
něco takového umožňují. Takové vlastnosti měl nabízet (a jistě nabízí) při
dostatečné srozumitelnosti a návaznosti na existující jazyky i programovací
jazyk, který se objevil teprve nedávno Java. I když ke svému prvotnímu určení
pro "embedded" systémy se dostává až nyní, kdy technologie dospěla tak daleko,
že provádění programů v Javě je dostatečně rychlé.
A pokud jde o jazyk C++, jinak smělého představitele objektově--orientovaných
jazyků ve stolních počítačích, tak jeho nesmělé implementace ještě nejsou zcela
běžně k dostání a setkáváme se s nimi až nyní. Proč však stále ještě "nesmělé"?
Protože připomínají první verze C++, které také neimplementovaly řadu prvků z
jazyka. U jednočipových počítačů se to zatím obchází rčením, že "takových
vlastností u jednočipů není třeba a jenom by je zbytečně zpomalovaly". Ale
domnívám se, že teprve až doba ukáže, jestli se postupně i tyto "zbytečné"
vlastnosti neobjeví. Jenže programátoři jednočipových systémů různých určení už
dále nechtějí závidět svým kolegům "od stolu", že mají komponentovou
architekturu a že vlastně podstatnou část aplikace jenom "naklikají". Proč není
možné mít něco podobného na časovače, A/D převodníky, sériové komunikační
linky, a řadu dalších zařízení. A proč, když v průběhu práce zjistíme, že daný
hardware nestačí na určený úkol, tak musíme vše začít dělat od začátku? A s
dalšími "proč" bychom mohli pokračovat, kdyby...
Nové systémy
Kdyby neexistovaly systémy, které toto vše umí a je jim jedno, jestli máte doma
pouze "assembler" a nebo starší překladač jazyka C. Takovému systému stačí mít
"jen" několik informací o vašem překladači, dále potom detailní popis čipu,
který máte v oblibě a nabídne vám více méně objektovou architekturu, která vám
nabízí zprostředkování všech funkcí na čipu. Přitom nemusí nutně jít jen o
uspořádaný přístup k registrům periferního zařízení.
Takový systém může jít mnohem dál a vy tak nastavíte pouze klíčo-vé prvky
zařízení a on pak rozhodne buďto o konkrétní "periferce", nebo pokud je jich na
výběr více, tak vás nechá vybrat. Potom už vám dovolí donastavit další potřebné
drobnosti. U propracovanějších programových balíků podobného ražení vám takto
systém může dodat i funkce, které sám čip nemá, ale je možné je softwarově
nahradit. Dále potom takové programy jsou schopny vám i "poradit", jak se co dá
nastavit a ohlásí chybu, když vámi požadované nastavení leží mimo schopnosti
použitého procesoru.
Často nebývá ani problém přenést celý projekt na jiný čip. Po takovém přenosu
zpravidla stačí, aby si byly takové čipy hodně podobné a programátor má poměrně
málo práce, aby program pro nové podmínky upravil. Některé systémy jdou dokonce
až tak daleko, že ruku v ruce s vývojem cílové aplikace a softwaru vám jsou
také schopny připravovat nezbytný hardware, např. zapojení hradlového pole, či
dokonce návrh čipu. Je asi zřejmé, že tyto systémy už nejsou pro někoho, kdo
podobné procesory programuje doma "na koleně", ale pro výrobce profesionálních
systémů, kteří disponují dostatečným zázemím jak finančním, tak i technickým. A
kde takové programové systémy hledat?
Například k těm nejjednodušším, které umějí pouze nastavit inicializační kód
procesoru, patří program Dave, který se dodává přímo s čipy od firmy Siemens.
Nezávislým výrobkem stejné úrovně je potom program MakeApp od severského
výrobce jménem Stenkil. Tyto programy vám však zpřístupňují procesory tak jak
jsou, a tak stejně většina práce zůstává na programátorovi. Navíc je "rada"
těchto produktů omezena pouze na počáteční nastavení, takže i základní obsluha
systému v době běhu programu stejně většinou zůstává na programátorovi.
Propracovaný systém pokrývající ten střední stupeň dovedností zaplňuje domácí
producent UNIS se svým ProcessorExpertem, který byl k vidění např. i na loňském
INVEXu. Systém nabízí plně komponentovou architekturu, možnost dědění a řadu
dalších vymožeností. Vygenerovaný kód neslouží jen k inicializaci procesoru,
ale poskytuje pohodlnou obsluhu periferních zařízení i v době běhu programu.
Systém přitom zůstává otevřený a tak se dá očekávat jeho rozšíření o další
vlastnosti či doplňky.
Výrobky firmy WindRiver Systems potom pokrývají tu skupinu produktů, které
poskytují úzké provázání s operačním systémem. Pochopitelně, že v takovýchto
případech se jedná o operační systémy pro práci v reálném čase. Kromě toho
cílovým systémem není 8bitový jednočipový počítač, ale pořádný procesor s
dostatečně vybaveným okolím.
Závěrem
Otázkou pochopitelně zůstává, kam se bude ubírat další vývoj. Nástup podobných
nástrojů (zejména těch jednodušších a tím pádem cenově dostupných pro celou
škálu uživatelů) se v současnosti snaží zachytit nejenom výrobci procesorů, ale
i výrobci překladačů programovacích jazyků (typicky se jedná o jazyk C).
Otázkou je, zda je ta pravá doba. To znamená, zda i programátoři jednočipových
počítačů se svými typickými řídicími aplikacemi, dospěli do stadia
komponentových systémů s hierarchií či dědičností.
U programátorů "stolních" aplikací je to už samozřejmostí. Navíc je možné
vysledovat i podporu ze strany univerzit ve formě formálních systémů pro popis
komponent a vztahů mezi nimi. Na druhou stranu už byla naznačena určitá
"zatvrzelost" programátorů jednočipových počítačů. A teprve vlastně až oni
rozhodnou, jak úspěšné budou podobné programové systémy pro podporu vývoje
aplikací. I když, vzhledem ke zrychlujícímu se tempu vzniku nových produktů a
opravdovému pronikání jednočipo-vých počítačů do všech oblastí, se domnívám, že
podobné nástroje, které jsou prokazatelným pomocníkem při návrhu systému, už
nemohou být déle opomíjeny.
9 0246 / pen









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.