3.5.1. Parallax Propeller programozási lehetőségei A Parallax cég – a Propeller mikrovezérlő gyártója – fenntart egy OBEX nevű honlapot: ##LINK: http://obex.parallax.com/##, amelyről ingyenes, nyílt forráskódú modulok tölthetőek le, amelyek szabadon felhasználhatóak a saját Propeller alkalmazások fejlesztésében. A Parallax a MIT szoftverlicencezési formát követi, amely megengedi a program forráskódjának szabad, akár üzleti célra történő felhasználását is ##Link: http://obex.parallax.com/license/##. Az egyetlen kötelezettség az, hogy meg kell jelölni a forráskód MIT licenc szerinti használatát. A Propeller chip már igen kevés hardveres elemmel is működőképes, amint ez az ábrán is látható a minimális hardverkonfigurációhoz elegendő egy oszcillátor, egy E2PROM memória és egy ellenállás.
1. ábra A Propeller és a minimális hardver környezet Minthogy a Propeller chip nem rendelkezik a programok tárolására előrelátott belső memóriával, a bekapcsoláskor a programo(ka)t külső tárból kell beolvasnia. Ezt két módon teheti meg: RS232 kapcsolaton keresztül (pl. PC számítógépről). Ugyanis az UART az egyetlen periféria, amellyel a Propeller rendelkezik. • külső E2PROM memóriából „bit bang” olvasási metódussal, mivel a Propeller chip nem rendelkezik I2C sínnel. Ébredéskor a Propeller chip először az UART-on keresztül próbál kommunikálni. Amennyiben ez nem sikerül a programo(ka)t az E2PROM-ból próbálja meg beolvasni. •
A Propeller chip RS232-ők keresztüli programozásához elegendő egy egyszerű programozó áramkör használata, amely a 4. ábrán van bemutatva. Mivel manapság egyre nehezebb RS232 soros porttal ellátott személyi számítógépet beszerezni, egyre gyakoribb az USB2serial ##USB – soros## átalakítók használata. Ezek az átalakítók a FTDI áramköreit használják ##LINK: http://www.ftdichip.com/FTProducts.htm/##. Erre egy példa a „Demo Board” áramkör diagramja látható a következő ábrán.
2. ábra A Propeller chip RS232-es programozója A Propellerrel használatos programozási nyelvek A Parallax vállalat által a Propeller chip programozására hivatalosan támogatott nyelvek a Spin és az assembly. Nem hivatalos fejlesztések is léteznek a közösségi honlapokon, úgy mint: Basic, C, C++. LISP, Java, stb. ##LINK:http://humanoidolabs.blogspot.tw/2012/03/ultimate-list-of-big-brain-languages.html##
Propeller chip, C fordítóprogram Bevezetés A Parallax hivatalosan két programnyelvet fejlesztett ki a Propeller chiphez: a Spin és a Propeller assembler. A chip kereskedelembe bocsájtását követően a felhasználói közösség hamar egy C fordítóprogram fejlesztését követelte a Parallax-tól a Propeller chip számára. A Parallax szerződést kötött az ImageCraft céggel mely kifejlesztette az ICCV7 C fordítóprogramot a Propeller chip számára. Az ICCV7 átlagosan 5-től 10-szer gyorsabb a Spinben íródott programoktól. Sajnálatos módon a szoftver ingyenes változata erősen limitált volt képességeit illetően, a teljes funkcionalitásért a felhasználók zöme nem volt kész pénzt fizetni ezért a termék hamar elérte az EOL (end of life – elhasználódott) ciklust. A létező lehetőségek kínálatával elégedetlen Parallax közösség egy ingyenes ANSI C fordítóprogramot írt meg melyet Catalina-nak hívtak. A Catalina egy nagyon sokrétű szerszám, de hivatalosan a Parallax nem támogatja.
Mivel a C fordítóprogram nagy szükségletnek bizonyult a felhasználók körében, ezért a Parallax egy saját új fejlesztésű C fordítóprogram kidolgozásába kezdett. A Propeller chip 2/es változata pillanatnyilag kidolgozás alatt áll és a Parallax lehetővé szeretné tenni az operációs rendszer generálását a Propeller platform számára annak érdekében, hogy az alkalmazások fejlesztését a teljesen át lehessen vinni PC környezetből Propeller környezetbe. Ehhez a Propellerhez egy logikus lehetőségként a GCC fordítóprogram portolása merült fel. Ez lehetővé tenné a Propeller 2 számára egy Linux kernel alapú operációs rendszer futtatását. A GCC fordítóprogram jelenleg béta tesztelési fázisban van és támogatja a Propeller 1 és Propeller 2 platformokat is. Ez annyit jelent, hogy bővülőben van egy szabványos C könyvtár mely teljesen összhangban van az ANSI C szabvánnyal. Mivel az olyan szabványos parancsok mint a scanf és a printf memóriaigényesek lehetnek ezért léteznek olyan nem-szabványos parancsok is melyek segíthetnek a források megspórolásán. Az ANSI C kompatibilis kód használatának lehetővé tétele miatt a Propeller-GCC támogatja az XMM metódust azaz a külső RAM memória csatlakoztatását a Propeller chiphez. Négy féle memória modell létezik melyek alapján a Propeller-GCC fordítja és szolgálja a programokat: • •
• •
COG program natív PASM parancsokba fordítódik és csakis a COG' RAM memóriából hajtódik végre, LMM (large memory model) program PASM parancsokba fordítódik, melyek kis kernel álltal hajtódnak végre, a program és a stek a HUB memóriába kerül, a kernel feladata kiolvasni a HUB memóriából a COG' RAM memóriájába melynek feladata a parancsok végrehajtása, CMM (compressed memory model) a program bájt kódba fordítódik, hasonlóan mint a SPIN esetében, XMM (extended memory model) program PASM parancsokba fordítódik melyek kis kernel segítségével hajtódnak végre – a program külső memóriában van, ami lehet EEPROM, Flash, SRAM, SD kártya vagy valamilyen más memória.
A PropellerGCC nagyon hasznos tulajdonsága, hogy lehetővé teszi a C++ kód használatát is. A PropellerGCC és a GCC közötti különbségek: A C nyelvezet zöme támogatva van a PropellerGCC-ben és azonnal hozzá lehet látni a programozáshoz a Propeller chip belső szerkezetének az ismerete nélkül is. Ellenben léteznek olyan kulcsfontosságú korlátok és kiegészítők melyeket a Propeller implikál a GCC-ben: •
• •
Specifikus hardver funkcionalitás, mint a tű regiszterek, több mag és rögzítő mechanizmus leírása a propeller.h fájlban található melyek nélkül a Propeller-GCC nem tudna működni, a memória modell egyedi a PropellerGCC-re és definiálni kell fordítás közben, a Propeller chip rendkívül limitált memóriával rendelkezik (32 + 16 KB) ezért a szabványos könyvtárak nagy száma sok helyet foglal el, vagy nem fér el a belső memóriában.
Ezek mellett a Propeller chip támogat minden definíciót mint a GCC is, de létezik néhány ami Propeller chip specifikus: __PROPELLER__ nincs szükség ezt kiemelni mert alapértelmezett, hogy Propeller chip számára fordítódik a program __PROPELLER_LMM__ LMM memória modellt definiálja __PROPELLER_CMM__
CMM memória modellt definiálja
__PROPELLER_XMM__
XMM memória modellt definiálja
__PROPELLER_XMMC__
XMMC memória modellt definiálja
__PROPELLER_USE_XMM__
XMM vagy XMMC memória modellt definiálja
__PROPELLER_64BIT_DOUBLES__ double mint ahogy 64 bites változót definiál __PROPELLER_32BIT_DOUBLES__ double mint ahogy 32 bites változót definiál __PROPELLER2__
akkor használjuk ha Propeller2 számára fordítódik a program
Simple IDE Mint ahogyan a GCC, a Propeller-GCC-t is a parancsablakból hívható. Léteznek változatok Windows-ra, Linux-ra és Mackintos-ra is. Annak érdekében, hogy a program írása könnyebb feladat legyen egy grafikus fejlesztői környezet is ki lett fejlesztve, aminek a neve SimpleIDE ahogyan az látszik is az 3-as és 4-es ábrákon. A SimpleIDE program úgynevezett QT programnyelvben íródott.
3. ábra
4. ábra A PC beállítása Annak érdekében, hogy Propeller számára tudjunk fordítani programokat először, bizonyos szoftvereket kell telepítenünk. Elsősorban a SimpleIDE-t kell letölteni a következő oldalról https://sites.google.com/site/propellergcc/downloads. A SimpleIDE telepítő magában foglalja a Propeller-GCC-t is. Ebben a példában a Propeller demó lapot fogjuk használni melyet a Parallaxtól lehet beszerezni és mely USB kábellel csatlakozik a PC-hez. A lap tartalmaz egy FTDI chipet is, amelyik virtuális soros portként viselkedik, amelyhez a megfelelő meghajtó programokat le kell tölteni a következő weboldalról www.parallax.com/usbdrivers. A meghajtó programok telepítését követően a Propeller demó lapot csatlakoztatni kell a számítógéphez a már említett USB kábel segítségével és a tápot csatlakoztatni kell a demó lapra. El kell indítani a SimpleIDE-t és a felső jobb sarokban található legördülő menüből ki kell választani a virtuális COM portot melyen keresztül lehet kommunikálni a demó lappal. Ezeket elvégezve tudunk hozzálátni a program írásához és annak fordításához a Propeller chiphez. Első program A SimpleIDE-be beírni a következőket: #include "simpletools.h" // olyan parancsokat tartalmaz mint a printf int main() // fő program { print("Hello world!"); // a parancsablakba ír ki üzenetet } Ezek után kattintatni a Program -> Run with terminal vagy kattintatni az F8 billentyűre. Ezek után a lenti 3-as ábrán látható parancsablak fog megjelenni.
5. ábra Második program Ebben a példában egy LED diódát szükséges üzemeltetni amely a Propeller csip 23-as tűjére van csatlakoztatva. A SimpleIDE-be a következőket kell begépelni: #include "simpletools.h" // olyan parancsokat tartalmaz mint a printf int main() // fő program { while(1) // végtelen hurok { high(23); // a 23-as tűre logikai 1-est állítunk pause(1000); // várunk 1/10 szekundumot low(23); // a 23-as tűre logikai 0-át állítunk pause(1000); // várunk 1/10 szekundumot } } Harmadik program A Propeller demó lap 0 számű tűjére piezzo hangszórót csatlakoztatni és 3kHz hangfrekvenciát generálni 1 szekundum hosszan. A SimpleIDE-be begépelni a következőket: #include "simpletools.h" // alap parancsokat tartalmaz mint a freqout int main() // fő program { freqout(0, 1000, 3000); // a freqout parancs generál egy frekvenciát a 0 tűn, // melynek hossza 1000 ms, frekvenciája 3000 Hz }