V současné době přibývá téměř exponenciální řadou zařízení postavených na architektuře ARM (Advanced RISC Machines), jako jsou PDA, mobily, síťové směrovače, wifi AP, herní konzole, apod. Na vzrůstající požadavek reagují také výrobci součástek. Nabízejí širokou škálu těchto procesorů počínaje od malých mikrokontrolérů typu LPC21xx ( jádro ARM7, výrobce Philips) pro jednoúčelové systémy (např. řídící jednotka termostatu) až po velmi výkonné mikrokontroléry na jádře ARM11 využívající se například při digitálním zpracování obrazu v digitálních kamerách. ARM architektura je založená na redukovaném instrukčním souboru (RISC) mající vysokou instrukční výkonnost a rychlou reálnou odezvu na přerušení. Nelze také opomenout 16bitovou Thumb podmnožinu která ušetří 35-40% paměti ve srovnání s 32bitovým instrukčním souborem aniž by se významně snížil výkon.
ARM 7 – specifikace jádra
- 32 bitový RISC procesor (redukovaná instrukční sada)
- 0,18 mm technologie
- napájení 1,8 V
- příkon < 0,4 mW
- pracovní frekvence 60-110 Mhz
- architektura typu von Neumann (data i program v jednom adresovém prostoru)
- 3 stavové zpracování instrukcí (pipeline)
ARM 7 – z hlediska programování
- 37 celočíselných 32 bitových registrů
- 8,16,32 bitové datové typy
- 7 pracovních režimů :
- usr - normální programový režim
- fiq – režim datového přenosu (rychlá obsluha IRQ, přenos dat prostřednictvím DMA )
- irq – režim pro základní přerušovací služby
- svc – chráněný režim pro operační systém
- abt – režim pro případ, kdy data nebo prováděná instrukce se nepodaří správně vykonat
- sys – privileg režim pro uživatelskou aplikaci
- und - režim pro případ vykonání nedefinované (neznámé) instrukce
ARM7 – popis registrů
- struktura registrů závisí na pracovním režimu
- R0-R12 univerzální 32 bitové registry
- R13 (SP) ukazatel do zásobníku adres
- R14 (LR) registr pro uložení obsahu registru R15 při vykonání instrukce typu BL
- R15 (PC) programový čítač
- R16 (CPSR) stavový registr
ARM7 – instrukční sada (podrobnější popis viz. ARM instruction set.pdf)
- 15 typů instrukcí pro větvení programu (B, BL, BLX, BX, ..)
- 16 typů instrukcí pro aritmetické a logické operace (AND, ADD, SUB, MUL , ..)
- 10 typů instrukcí pro přesun dat ( MOV, LDR, STR, SWP, ..)
- SWI instrukce pro softwarové přerušení
ARM Thumb – specifikace (podrobnější popis viz. ThumbR instruction set.pdf)
- instrukční sada je 16bitová , o 35-40 % méně programové paměti
- redukované instrukce nemají vliv na snížení výkonu
- registry zůstávají 32bitové, ale používá se jen jejich polovina
- redukované instrukce se dekódují během standardního dekódovacího cyklu
- významně zjednodušuje návrh procesorového systému
Jak psát aplikace pro ARM
Jako vhodný operační systém bývá stále častěji používán Linux. Nabízí totiž kompletní flexibilitu skrz volbu vývojového prostředí včetně otevřených zdrojových kódů a nespočetné řady komunit starajících se o tyto kódy. Neustálé požadavky a změny na trhu nutí výrobce ochránit své investice vložené do vývoje svého zařízení včetně snadné přenositelnosti kódu na jiné zařízení. Proto volba Linuxu jako otevřeného OS je často motivována ekonomickými faktory, neboť použití linuxového jádra je bez licenční poplatků.
Linux - správná volba
Linux jako kvalitní otevřený systém nabízí velké množství voleb, před které je postaven každý vývojový pracovník. Prvotní volnou je volba vhodného linuxového jádra. Pokud mikrokontrolér obsahuje jednotku MMU (Memory Management Units) lze použít standardní linuxové jádro portované na ARM architekturu. Například distribuce Debian a Gentoo. Pokud však tato jednotka MMU chybí, což je nejčastější případ, poohlédneme se po upraveném linuxovém jádře.
Mezi nejznámější patří eCos, který je poskytován jako otevřený zdrojový runtime systém podporovaný GNU otevřenými zdrojovými vývojovými prostředky. Aktuální verze podporuje osm hardwarových platforem, mezi ně patří i ARM. Na jeho jádře lze vyvíjet vlastní aplikace včetně možnosti využití běhu více úloh najednou. Součástí tohoto systému je i Redboot (Red Hat Embedded Debug a Bootstrap firmware), umožňující snadné zavádění a ladění aplikace, neboť RedBoot přímo komunikuje s GDB (GNU Debugger).
Další vhodnou volbou je µClinux, což je embedded Linux speciálně upravený pro velkou řadu 16, 32 bitových mikrokontrolérů. Původně byl µClinux odvozen od linuxového jádra 2.0. V současné době zahrnuje jádro 2.6.12 a 2.4.31 včetně velkého množství uživatelských aplikací a knihoven. K tomuto řešení přistoupila i například firma MOXA známá především na poli komunikačních karet a převodníků rozhraní ve svém produktu UC-7110-LX.
Jelikož tato problematika je velmi široká, v příštím díle tohoto seriálu se podíváme jak vytvořit jednoduchou aplikaci za použití modulu LPC-MT2106 s mikrokontrolérem LPC2106.
Miroslav Dvořák
Dvorak.Linux@ seznam.cz
Download & odkazy:
- http://www.arm.linux.org.uk/
- http://www.arm.com/
- http://www.gnu.org/
- http://gcc.gnu.org/
- http://ecos.sourceware.org/
- http://www.uclinux.org/
- Download instrukční sady - ARM instruction set.pdf
- Download ARM Thumb - ThumbR instruction set.pdf
- Modul LPC-MT2106 v HW Shopu
- Další vývojové kity a ARM v HW Shopu