2018. február 3., szombat

BBC micro:bit és az ő sebessége

ENGLISH VERSION

A BBC micro:bit-el kísérletezem mostanában. Ezt oktatási segédeszköznek tervezték gyerekek részére. A microbit.org szándékai szerint Block szerkesztőben, JavaScriptben és Pythonban programozható.
Megjelenése óta a maker közösség és különböző cégek nagy energiát tettek bele, így mamár rengeteg környezetből használható.
Az eredeti fejlesztőeszközök megfelelőek a tanuláshoz, de nem alkalmasak professzionális felhasználásra. Ha valaki ilyesmit akar tanulni, tovább kell lépnie. Hogy miért ennek sok aspektusa van. Ezzel kapcsolatban két dolgot szeretnék megmutatni:

  • A micro:bit hardvere nem korlátoz bennünket a továbblépésben
  • Sokkal nagyobb működési sebesség érhető el ezekben a környezetekben

Magáról a micro:bit panelről:
A micro:bit központi egysége egy 16MHz-es ARM Cortex-M0 alapú, bluetooth képes Nordic Semiconductor mikrokontroller. Ez ugyanolyan mint amik a piacon található készülékekben is előfordul. A panelen ezen túl még található egy NXP Kinetis eszköz is. Ennek a második mikrokontrollernak a feladata a kommunikáció azzal a számítógéppel, ahonnan programozzuk az elsődleges processzort.
Ez a második mikrokontroller a belépőjegyünk a professzionális programozói környezetekbe.
Ha már használtad a micro:bit-et a Block szerkesztőből, akkor tudod, hogy az eszköz a számítógépre dugva egy lemezmeghajtóként jelentkezik. Erre a meghajtóra tudjuk rádobni a lefordított programunkat. Ezt a lemezmeghajtót az NXP processzor szimulálja a számítógépünk részére.
De ennél többet is nyújt. Hibakereső eszközként (debig probe) is működik. Lehetővé teszi a programunk utasításonkénti végrehajtását, a Nordic mikrokontroller belső regisztereinek olvasását, stb. Ezzel, a megfelelő fejlesztőkörnyezetben hatékony hibakeresési eszköz kerül a kezünkbe.
Ezen túl, akár még választhatunk is, két különböző megoldás közül. A micro:bit egy DAPLink (CMSIS-DAP) nevű megoldással érkezik, de ez egy egyszerű programletöltéssel lecserélhető a Segger J-Link eszközére, ha erre van szükségünk

Most a sebességről. Egy egyszerű tesztet használtam arra, hogy összehasonlítsam a különböző környezeteket. A program semmi mást sem csinál mint egy Be/Kimeneti port értékét változtatja 0 és 1 között amilyen gyorsan csak lehet.
Három környezetet használtam a demonstrációra:

Block szerkesztő/Javascript - Az eredeti környezet
Arduino - A makerek, hobbisták elsődleges eszköze, szerte a világon
Segger Embedded Studio - A professzionális eszközök egyike (Azért ezt választottam, mert ezt tudtam a legkönnyebben, leggyorsabban munkára fogni. A telepítés után az első próbálkozásra működött)

Első próba - Ezt eredetileg JavaScript-ben írtam és nem a Block szerkesztőben, miután ez utóbbi nem rendelkezik XOR funkcióval. Azt mutatja, hogy mi történik, ha a "forever" blokkban kapcsolgatjuk a kimenetet:


Így néz ki a Block szerkesztőben:


A kimenetet rákötöttem egy oszcilloszkópra, hogy megmérjem a frekvenciát és megmutassam a hullámformát:


20.8Hz - Ez fájt. Ez azt jelenti, hogy a programunk a forever blokkban összesen kb. 40-szer kerül végrehajtásra másodpercenként.
Ez extrém lassú. Azt saccolom, hogy ez a micro:bit operációs rendszer taszk kezelésének következménye.

Csináljunk egy másik tesztet ebben a környezetben. De ebben az esetben saját ciklust használva a kimenet kapcsolgatására.
Ez a Block szerkesztőben készült, miután nem volt olyan kódrészlet amihez a Javascript kellett volna:


Csak hogy lássuk JavaScriptben is:


És az eredmény:


84.7kHz - sokkal jobb, de még mindíg 189 órajelciklus kell a ciklusunk futtatásához (a 16MHz-es belső órajelből számoltam)

Lépjünk kicsit tovább. Az Arduino környezet ezek alapján rakható össze:
https://learn.adafruit.com/use-micro-bit-with-arduino/install-board-and-blink

Először itt is a környezet belső ciklusát használtam:


Az eredmény az oszcilloszkópról:


214kHz, sokkal jobb ez kb. 75 órajelciklust jelent.

Nézzük meg ezt saját ciklusból:


Kicsit jobb, de nem jelentősen:


272kHz - 59 órajelciklus

És végül a Segger Embedded Studio - Mint látható itt a processzor inicializációja is a mi kezünkben van:


És az eredmény:


943kHz - 17 órajelciklus. Ha ennél jobb eredményt akarunk elérni akkor le kell menni assembly szintre, ami most nem célom.

A fentiekből talán látható a kép egy pici szelete.

2 megjegyzés: