Řešte výpočetně náročné projekty pomocí ShieldBuddy
Contributed By DigiKey's North American Editors
2020-07-08
Mnoho nadšenců, tvůrců a kutilů používá k monitorování a řízení svých projektů mikropočítačové vývojové desky Arduino. Stejně tak to dělá stále se zvyšující počet profesionálních techniků, kteří mohou tyto desky používat jako platformy pro vyhodnocování a prototypování, aby urychlili vývoj a snížili náklady spojené s vyhodnocením integrovaných obvodů (IC), senzorů a periferií. Jak bylo probráno v článku Používání desek BOB Arduino k rychlému vyhodnocení senzorů a periferií, mohou tito technici pracovat v menších týmech s přísnějšími omezeními doby do uvedení na trh (TTM). Museli proto přijmout více technických domén a úkolů a zároveň najít způsoby, jak urychlit a snížit náklady na hodnocení součástí.
Jedním z řešení je použít platformy Arduino společně s hardwarem s otevřeným zdrojovým kódem ve formě senzorových a periferních rozvodných desek (BOB) ve spojení se softwarem s otevřeným zdrojovým kódem s přidruženými knihovnami a ukázkovými programy. I když existuje široká škála desek Arduino, které splňují řadu požadavků na zpracování a paměť, některé výpočty se nicméně lépe provádějí pomocí jednotky s plovoucí desetinnou tečkou (FPU), aby nedošlo ke zpomalení hlavního procesoru. Tento problém byl v ekosystému Arduino vyřešen pomocí desky ShieldBuddy.
V tomto článku jsou popsány různé možnosti platformy zpracování Arduino a proč je funkce FPU pro mnoho aplikací tak důležitá. Poté si představíme ShieldBuddy – desku, která si zachovává podobnou fyzickou velikost jako desky Arduino, ale má tři nezávislá 32bitová procesorová jádra, každé běžící na frekvenci 200 MHz a každé s vlastní FPU. V tomto článku je popsán její programovací model a je zde ukázáno, jak její programovací prostředí založené na Eclipse a podpora integrovaného vývojového prostředí Arduino (IDE) umožňuje kutilům i konstruktérům s ní rychle začít.
Arduino pro nováčky i profesionály
Nováčci ve světě Arduino obvykle začínají s deskou Arduino Uno Rev3 (obrázek 1), která je založena na 8bitovém mikrokontroléru ATmega328P běžícím na 16 MHz. Tato deska má pouze 32 kB flash (programové) paměti, 2 kB paměti SRAM, 14 pinů digitálního vstupu/výstupu (I/O) a šest analogových vstupních pinů. Šest digitálních pinů může poskytovat výstupy pulzně-šířkové modulace (PWM) a analogové piny lze v případě potřeby použít také jako digitální I/O piny.
Obrázek 1: Vývojová deska Arduino Uno Rev3 je založena na 8bitovém mikrokontroléru ATmega328P běžícím na 16 MHz. (Zdroj obrázku: web Arduino.cc)
Půdorys patic Arduino Uno Rev3 se 14 digitálními I/O piny, 6 analogovými vstupními piny a různými napájecími, zemnicími a referenčními piny je základem obrovského ekosystému dceřiných desek nazývaných shieldy.
Mnoho uživatelů Uno Rev3 následně přejde na desku Arduino Mega 2560 Rev3 (obrázek 2), která vychází z 8bitového mikrokontroléru ATmega2560 běžícího na 16 MHz. Tato deska má 256 kB flash paměti a 8 kB paměti SRAM. Půdorys patic znamená, že deska může podporovat stejné shieldy jako typ Uno, ale další patice umožňuje osadit 54 digitálních I/O pinů a 16 analogových vstupních pinů. V tomto případě může 15 digitálních pinů poskytovat výstupy PWM a analogové piny lze opět v případě potřeby použít také jako digitální I/O piny.
Obrázek 2: Vývojová deska Arduino Mega 2560 Rev3 je založena na 8bitovém mikrokontroléru ATmega2560 běžícím na 16 MHz. Půdorys patic znamená, že deska může podporovat stejné shieldy jako typ Arduino Uno, ale další patice umožňují osadit celkem 54 digitálních I/O pinů a 16 analogových vstupních pinů. (Zdroj obrázku: Arduino)
Kromě omezení uložených 8bitovou datovou cestou a 16MHz hodinami neobsahují mikrokontroléry Arduino Uno ani Arduino Mega jednotku FPU, což znamená, že jakékoli výpočty zahrnující hodnoty s plovoucí desetinnou tečkou tyto procesory dramaticky zpomalí.
Pro uživatele, kteří chtějí ještě větší výpočetní výkon, je krokem o úroveň výš deska Arduino Due (obrázek 3), která má podobnou fyzickou velikost jako Arduino Mega, ale je založena na mikrokontroléru SAM3X8E společnosti Atmel/Microchip Technology s 32bitovým procesorem Arm® Cortex®-M3 běžícím při 84 MHz. Tato deska má 512 kB flash paměti, 96 kB paměti SRAM, 54 digitálních I/O pinů, 12 analogových vstupních pinů a dva analogové výstupní piny, které jsou poháněny digitálně-analogovými převodníky (DAC). V tomto případě může pouze 12 digitálních pinů poskytovat výstupy PWM a analogové piny lze opět v případě potřeby použít také jako digitální I/O piny. Bohužel stejně jako desky Arduino Uno a Mega ani procesor desky Arduino Due neobsahuje FPU.
Obrázek 3: Vývojová deska Arduino Due je založena na 32bitovém procesoru Atmel SAM3X8E Arm Cortex-M3 s frekvencí 84 MHz. Velikost patic je identická s velikostí patic desky Arduino Mega. (Zdroj obrázku: web Arduino.cc)
Mnoho uživatelů – nadšenců i profesionálů – si užívá vysoký počet pinů vývojových desek Arduino Mega a Arduino Due. Ale i 32bitový procesor Arduino Due běžící na 84 MHz může být pro některé výpočetně náročné úkoly nedostačující. Podobně 512 kB flash paměti a 96 kB paměti SRAM desky Due může být nedostatečných pro robustnější programy pracující s velkým množstvím dat.
Mikrokontroléry jsou sice schopné zvládnout zpracování stále většího množství dat, ale některé výpočty je lepší provádět pomocí FPU kvůli lepší účinnosti a nižší latenci.
Co jsou to FPU a proč jsou potřeba?
Důvody, proč jsou FPU užitečné, sahá až k tomu, jak počítače zpracovávají čísla. Nejjednodušší způsob, jak reprezentovat čísla uvnitř počítačů, je použít typ integer (celá čísla). Také provádění výpočtů pomocí celých čísel je výpočetně levné. Celá čísla jsou však svou povahou konečná a nemohou vyjadřovat široký dynamický rozsah.
To je pro techniky a vědce problematické, protože často potřebují použít při stejném výpočtu extrémně velké a malé hodnoty. Fyzici mohou mít například výpočty, které využívají číselné hodnoty rychlosti světla (300 000 000) a Newtonovy gravitační konstanty (0,000 000 000 066 74). Podobně technici vyžadují hodnoty s velkým dynamickým rozsahem pro úlohy, jako je zpracování digitálního signálu (DSP), a pro použití v aplikacích umělé inteligence (AI) a strojového učení (ML).
Řešením je použít numerickou reprezentaci s plovoucí desetinnou tečkou, kde desetinná tečka může „plovat“ s ohledem na jednotlivé číslice čísla, což umožní dosáhnout jemnějšího stupně numerického „rozlišení“. Problém je v tom, že ačkoli 32bitová hodnota s plovoucí desetinnou tečkou spotřebovává stejné množství paměti jako 32bitové celé číslo s pevnou desetinnou tečkou, provádění výpočtů pomocí hodnot s plovoucí desetinnou tečkou vyžaduje podstatně více výpočetních prostředků.
Pokud musí procesor provádět výpočty s plovoucí desetinnou tečkou pomocí standardního hardwaru s pevnou desetinnou tečkou, bude výsledkem dramatický dopad na výkon tohoto procesoru. Řešením je vybavit procesor speciální FPU. To umožňuje provádění sofistikovaných operací s plovoucí desetinnou tečkou pomocí velmi malého počtu taktovacích cyklů.
Zde přichází na řadu deska ShieldBuddy.
ShieldBuddy do ekosystému Arduino přináší FPU a vysoký výkon
Relativně novým hráčem ve vesmíru součástek kompatibilních s Arduino je model KITAURIXTC275ARDSBTOBO1 nebo ShieldBuddy společnosti Infineon Technologies (obrázek 4). Jedná se o vestavěnou vyhodnocovací desku pro 32bitový mikrokontrolér TC275 AURIX TC2xx TriCore TC275T64F200WDCKXUMA1 společnosti Infineon.
Obrázek 4: Deska ShieldBuddy TC275 je vybavena 32bitovým vícejádrovým procesorem Infineon TC275 na desce se stejnou velikostí jako mají typy Arduino Mega a Arduino Due, díky čemuž je kompatibilní s mnoha shieldy aplikací, které jsou k dispozici.(Zdroj obrázku: web Hitex.com)
Díky zachování podobné fyzické velikosti jako Arduino Mega a Arduino Due je ShieldBuddy kompatibilní s mnoha shieldy aplikací, ale odlišuje se použitím procesoru TC275 se třemi nezávislými 32bitovými jádry, z nichž každé běží na frekvenci 200 MHz a každé má vlastní FPU. Kromě toho má ShieldBuddy 4 MB flash paměti (8krát víc než Arduino Due a 16krát víc než Arduino Mega) a 500 kB RAM (5krát víc než Arduino Due a 62krát víc než Arduino Mega).
Dá se na to dívat i tak, je, že jádro desky Arduino Mega spravuje pouze přibližně šestnáct 8bitových pokynů za mikrosekundu. Pro srovnání – každé z jader desky TC275 má dobu cyklu 5 ns, což znamená, že každé jádro může obvykle provést přibližně 150 až 200 32bitových pokynů/µs. Vzhledem k tomu, že každé z procesorových jader ShieldBuddy má vlastní FPU, může deska provádět výpočty s plovoucí desetinnou tečkou s malým (pokud vůbec nějakým) zhoršením výkonu.
Vývoj s deskou ShieldBuddy
Při práci se ShieldBuddy mohou profesionální vývojáři softwaru chtít používat Eclipse IDE, zatímco nadšenci a tvůrci mohou dávat přednost známému Arduino IDE. Podporovány jsou obě možnosti.
Uživatelé platformy Arduino budou obeznámeni s tím, že každá skica (program) musí mít dvě standardní funkce: setup(), která se spouští jednou, a loop(), která se spouští znovu a znovu. Uživatelé mohou také vytvářet své vlastní funkce.
Tři jádra ShieldBuddy se nazývají Core 0, Core 1 a Core 2. V případě platformy Arduino IDE lze většinu stávajících skic sestavit pro použití na desce ShieldBuddy bez úprav. Ve výchozím nastavení budou funkce setup() a loop() – spolu s libovolnými uživatelem vytvořenými funkcemi, které volají – zkompilovány tak, aby běžely na Core 0.
Při vytváření nového programu může uživatel dosáhnout stejného efektu pojmenováním těchto funkcí setup0() a loop0(). Uživatel může vytvořit také funkce setup1() a loop1(), které – spolu s libovolnými uživatelem vytvořenými funkcemi, které volají – budou automaticky zkompilovány tak, aby běžely na Core 1. Podobně budou funkce setup2() a loop2() – spolu s jakýmikoli funkcemi, které volají – automaticky zkompilovány tak, aby běžely na Core 2.
Ve výchozím nastavení běží každé jádro samostatně, což znamená, že je možné mít na ShieldBuddy současně spuštěny tři zcela samostatné programy. Na základě výše uvedeného mohou mezi sebou jádra také komunikovat pomocí technik, jako je sdílená paměť. Kromě toho může každé jádro spouštět měkká přerušení v ostatních jádrech.
Závěr
Koncept Arduino open source se ukázal jako ohromně úspěšný a následující hardwarové a softwarové ekosystémy se rozrostly o stovky shieldů a tisíce knihoven a aplikací.
Ačkoli rané vývojové desky Arduino, jako 8bitové, 16MHz Arduino Uno a Arduino Mega byly poněkud omezené, novější implementace, jako je 32bitová, 84MHz Arduino Due, jsou výrazně výkonnější. Přesto mnoho uživatelů vyžaduje více prostoru pro programy (flash), více prostoru pro data (SRAM) a větší výpočetní výkon, než může nabídnout jakékoli tradiční Arduino.
Díky 4 MB flash paměti, 500 kB paměti SRAM a třem nezávislým 32bitovým procesorovým jádrům běžícím na frekvenci 200 MHz, každé s vlastní FPU, posouvá ShieldBuddy koncept Arduino na zcela novou úroveň, což je extrémně zajímavé pro kutily i profesionální techniky.
Doporučená literatura:
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




