PROPELLER EGY FORRADALMIAN ÚJ MIKROVEZÉRLŐ



Hasonló dokumentumok
5.4. Perifériák helyettesítése párhuzamos feldolgozással a Propeller esetében

Mintavételes szabályozás mikrovezérlő segítségével

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Számítógép felépítése

Programozási segédlet DS89C450 Fejlesztőpanelhez

3. A DIGILENT BASYS 2 FEJLESZTŐLAP LEÍRÁSA

A számítógép egységei

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

Labor gyakorlat Mikrovezérlők

Labor gyakorlat Mikrovezérlők

A tervfeladat sorszáma: 1 A tervfeladat címe: ALU egység 8 regiszterrel és 8 utasítással

ELSŐ LÉPÉSEK A SZÁMÍTÓGÉPEK RODALMÁBA AMIT A SZÁMÍTÓGÉPEKRŐL TUDNI ÉRDEMES

Programzás I gyakorlat

A számítógépek felépítése. A számítógép felépítése

2. Számítógépek működési elve. Bevezetés az informatikába. Vezérlés elve. Külső programvezérlés... Memória. Belső programvezérlés

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Informatika érettségi vizsga

Fordítóprogramok. Aszalós László szeptember 7.

Adatbázis és szoftverfejlesztés elmélet

AWK programozás, minták, vezérlési szerkezetek

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Operációs rendszerek. Tanmenet

A mikroprocesszor felépítése és működése

Processzor (CPU - Central Processing Unit)

Programozás alapjai Bevezetés

A számítógép fő részei

Nagy Gergely április 4.

Számítógépek felépítése, alapfogalmak

Bepillantás a gépházba

Számítógép fajtái. 1) személyi számítógép ( PC, Apple Macintosh) - asztali (desktop) - hordozható (laptop, notebook, palmtop)

Az AVR programozás alapjai. Előadja: Both Tamás

AWK programozás, minták, vezérlési szerkezetek

Programozás alapjai. 10. előadás

Occam 1. Készítette: Szabó Éva

Fizikai mérések Arduino-val

Mértékegységek a számítástechnikában

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Podoski Péter és Zabb László

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Iman 3.0 szoftverdokumentáció

A LEGO Mindstorms EV3 programozása

1. Digitális írástudás: a kőtáblától a számítógépig 2. Szedjük szét a számítógépet 1. örök 3. Szedjük szét a számítógépet 2.

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

3Sz-s Kft. Tisztelt Felhasználó!

KIRA. KIRA rendszer. Telepítési útmutató v1

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Cikktípusok készítése a Xarayában

A vezérlő alkalmas 1x16, 2x16, 2x20, 4x20 karakteres kijelzők meghajtására. Az 1. ábrán látható a modul bekötése.

AWK programozás Bevezetés

ELŐADÁS SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA

elektronikus adattárolást memóriacím

Mérési jegyzőkönyv. az ötödik méréshez


Ellenőrző mérés mintafeladatok Mérés laboratórium 1., 2011 őszi félév

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Alapismeretek. Tanmenet

3. modul - Szövegszerkesztés

I. C8051Fxxx mikrovezérlők hardverfelépítése, működése. II. C8051Fxxx mikrovezérlők programozása. III. Digitális perifériák

A PiFast program használata. Nagy Lajos

C programozási nyelv

Labor gyakorlat Mikrovezérlők

Operációs rendszerek. Tanmenet

Számítógép architektúra

VI. SZOFTVERES PROGRAMOZÁSÚ VLSI ÁRAMKÖRÖK

Laboratóriumi műszerek megvalósítása ARM alapú mikrovezérlővel és Linux-szal

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

IT - Alapismeretek. Feladatgyűjtemény

Magas szintű optimalizálás

Jelfeldolgozás a közlekedésben

OPERÁCIÓS RENDSZEREK. Elmélet

Fábián Zoltán Hálózatok elmélet

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Ügyviteli rendszerek hatékony fejlesztése Magic Xpa-val mobilos funkciókkal kiegészítve. Oktatók: Fülöp József, Smohai Ferenc, Nagy Csaba

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

Orvosi készülékekben használható modern fejlesztési technológiák lehetőségeinek vizsgálata

1. Alapok. #!/bin/bash

13. óra op. rendszer ECDL alapok

Bevezetés a Python programozási nyelvbe

Regionális forduló november 19.

Kameleon Light Bootloader használati útmutató

TestLine - Informatika gyakorló Minta feladatsor

1. tétel. A kommunikáció információelméleti modellje. Analóg és digitális mennyiségek. Az információ fogalma, egységei. Informatika érettségi (diák)

Parallax Propeller programozási lehetőségei

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

A 32 bites x86-os architektúra regiszterei

SysCVideo: fiktív grafikus kártya SystemC modulként, SDL alapú megjelenítéssel

LOGSYS LOGSYS LCD KIJELZŐ MODUL FELHASZNÁLÓI ÚTMUTATÓ november 8. Verzió

Hardver és szoftver követelmények

PMU Kezdı lépések. 6-0 Csatlakozás LG GLOFA-GM és SAMSUNG PLC-hez. 6-1 Kommunikáció LG PMU és LG GLOFA-GM7 / GM6 / GM4 között

iseries Client Access Express - Mielőtt elkezdi

Operációs rendszerek. Tanmenet

3.6. HAGYOMÁNYOS SZEKVENCIÁLIS FUNKCIONÁLIS EGYSÉGEK

A/D és D/A konverterek vezérlése számítógéppel

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Köves Hugó: Parallax Propeller chip ismertetése. A Parallax Propeller ismertetése Az alapötlet...2

Első sor az érdekes, IBM PC ra alapul: 16 bites feldolgozás, 8 bites I/O (olcsóbb megoldás). 16 kbyte RAM. Nem volt háttértár, 5 db ISA foglalat

ISA szimulátor objektum-orientált modell (C++)

A programozás alapjai

Átírás:

Bevezetés PROPELLER EGY FORRADALMIAN ÚJ MIKROVEZÉRLŐ Dr. Kónya László -2006 szeptember A számítástechnika egyik fő célja a programokat futtató mikroprocesszorok teljesítményének a fokozása. Ennek vannak magától értetődő megoldásai, amelyek egyszerűen biztosítják a teljesítménynövelést: Az egyik megoldás a mikroprocesszorok órajel sebességének a növelése, amely egyenesen arányos a másodpercenkénti utasítások számával. (Az első PC INTEL 8086-os mikroprocesszorának az órajele csak 4.77 MHz volt és ma ez kb 3Ghz, ez 630-szoros növekedés!) A másik viszonylag egyszerű gyorsítási megoldás az egy időben kezelt bitek számának a növelése: 8/16/32/64 bites processzorok alkalmazása. A harmadik lehetőség már összetett és szerteágazó: szervezési elvek, az utasítások bonyolultságának a növelése: verseny az egyszerű de gyorsan végrehajtható utasításkészlet alkalmazása és a bonyolult, de ezért lassabb utasításvégrehajtás alkalmazása között. A programok általában párhuzamosan, egyszerre is futtatható részekből, más néven taszkokból állnak. A taszkok párhuzamos időbeli futtatásának megvalósítására két módszer kínálkozik: A taszkok végrehajtását időben egymás után, rövid kis időszeletekben végezzük. Ilyenkor összesen egy processzor végzi a taszkok futtatását. A hatékonysága a módszernek nem a legjobb, hiszen minden taszkváltáskor az éppen futó taszk futási környezetét el kell menteni azért, hogy majd később a taszk futását ismét folytatni tudjuk, és hasonlóan, a futtatni kívánt taszk, az előzőekben elmentett futási környezetét pedig vissza kell tölteni a tovább futtatásához. Vagyis a processzor vagy éppen egy taszkváltással kapcsolatos mentés-visszatöltés tevékenységét végzi, vagy éppen az aktuális taszkot futtatja. Mivel a taszkváltás kezelése a programvégrehajtás szempontjából nem hasznos tevékenység, ezért a processzor programvégrehajtási teljesítményét ez csökkenti. A látszólagos kiút a végrehajtási sebessé növelésével, és a taszkváltás hardver támogatása volt. A hatékonyabb megoldás több központ egység használata, amelyek mindegyike egyegy taszkot futtat valóban egyidőben, párhuzamosan. Ilyenkor a taszkváltással kapcsolatos adminisztráció elmarad, és a végrehajtási teljesítmény jelentősen megtöbbszöröződhet az adminisztáció hiánya és az egyidőben történő párhuzamos futtatás következtében. Ezt a technológiát a személyi számítógépek világában a többmagos mikroprocesszorok elterjedése jelzi. MI A PROPELLER? A Propeller chip felépítése az 1. ábrán látható. Nyolc processzor működik benne, és az együttes működésüket egy központi ütemező irányítja olyan módon, hogy a központi részhez való hozzáférési lehetőség folyamatosan körbeforog pontosan úgy, mint egy repülőgép propellere. Innen az elnevezés. A Propeller Chip (röviden Propeller) egy olyan mikrovezérlő, amely nyolc teljesen egyforma, önállóan működő, a futtatott programot saját RAM-jában tároló 32 bites utasításkészletű mikroprocesszort (továbbiakban ezek neve: COG) tartalmaz. Ezek szokásos jelölése: COG0 COG7. A processzorok egymástól teljesen függetlenül működnek, és a programjuk futása során saját és megosztott erőforrásokat használnak. Saját erőforrás az, amit a COG más COG-tól függetlenül használ: ez a saját processzor, a 2 kbájtos saját RAM (továbbiakban: COGRAM), és a két számláló egység. A megosztott erőforrásoknak két típusa van: Közösen használt erőforrások. A közös erőforrások azok, melyekhez bármikor, bármenyi COG hozzáférhet. Ilyen közösen használt erőforrások az I/O lábak és a rendszerszámláló (CNT). Kölcsönösen, egymást kizáróan használt erőforrások. A kölcsönösen egymást kizáró erőforrások azok, amelyekhez szintén bármelyik COG hozzáférhet, de egy időben kizárólag egyszerre csak egy. Ilyen a Propellerben egy közösen használt, úgynevezett rendszermemória (a továbbiakban: SYSMEM) is található, aminek mérete 64 kbájt. Ez két részre oszlik: 32 kbájtos írható/olvasható RAM memóriára (SYSRAM), illetve egy szintén 32 kbájt méretű, előre programokkal, és táblázatokkal feltöltött csak olvasható ROM memóriára (a továbbiakban: SYSROM). HUB ÉS A COG-OK 1. ábra PROPELLER felépítése A propeller nyolc processzort tartalmaz, amit COG-oknak (kogoknak) hívunk, és 0-tól 7-ig számozzuk. Minden COG felépítése, amely 2. ábrán látható, egyforma: processzor blokk, 2 kbájt 512*32bit-es egységnek tekinthető RAM (COGRAM), két I/O egységből, amit egy PLL frekvenciaszorzó áramkör egészít ki, video generátorból, kimeneti I/O regiszterből, és azok irányát beállító 2. ábra COG felépítése

I/O irányregiszterből, és egyéb rendszerregiszterekből. Ezek egy 16 duplaszavas regisztertömbben helyezkednek el, aminek neve: Speciális célú regiszterek (SPR=Special Purpose Registers). Minden COG-ot a rendszer órajel működtet, így szinkronban működnek, de természetesen mindegyik a saját programját futtatja. A megosztott, kölcsönösen egymást kizáró erőforrások kizárólagos elérését, egy közös rendszerbuszt vezérlő egység végzi, aminek a neve a továbbiakban: HUB. Ezt a felépítést a 3. ábra mutatja be. FEJLESZTÉS, PROGRAMOZÁS A Propeller programok fejlesztésére jelenleg két lehetőség van: 3. ábra HUB+ÓRAJEL Propeller assembler (PRASM) segítségével készítjük el, a gépi kódú, COG-okban futtatandó utasítás sorozatot (a programot). Egy kifejlesztett magas szintű nyelven, aminek a neve: SPIN írjuk meg programunkat. Ezt a Propeller fejlesztő környezetében lévő program, a COG-ban futó, SPIN-értelmező által feldolgozható tokenek sorozatává alakítja hasonlóan a BASIC interpreterhez -, és ezeket a SYSRAM-ban letöltött tokeneket fogja az említett COG-ban futó SPIN-értelmező gépi kódú utasításokká alakítani, és a COG CPU-jával végrehajtatni. 4. ábra Foglaljuk össze a továbbiak megértését nagymértékben segítő fogalmakat, és a tok műszaki jellemzőit (4. ábra): COG: 32 bites processzor saját COGRAM-al, és perifériákkal. COGRAM: itt helyezkedik el a COG által futatott program kódja és adatai. I/O lábak: 32 I/O vonal. Rendszerszámláló (CNT): egy 32 bites, minden rendszerórajelkor 1-el növekvő számláló. Rendszer memória: (SYSMEM) 64 kbájt a programok tárolásához, és a működéshez. SYSRAM: 32 kbájt, a későbbiekben a COGRAM-okba betöltendő programok, adatok tárolására. SYSROM: 32 kbájt, előre elkészített, és a tokba beírt programok és táblázatok tárolására HUB: Ez a vezérlő a COG-ok SYSRAM és SYSROM elérésének biztosítására, de egymást kizáró módon. Propeller assembler Szokásos assembler a COG-ok programozásához (PRASM) SPIN nyelv Egy interpreter a COG-ok magas szintű nyelven történő programozásához PROPELLER ÁRAMKÖRI KIALAKÍTÁSA Indulásként a 5. ábrán látható egy kapcsolás amiben a PC vagy EEPROM tölthet programot a Propeller Chip-be. A PC-vel való soros kapcsolat vagy hagyományos módon, vagy egy USB-TTL soros átalakítón keresztül is megvalósulhat. Amint a rajzon is látható a minimális fejlesztő környezet nagyom kevés áramköri elemet tartalmaz: magát a Propeller tokot, a működtetéséhez nem feltétlenül szükséges kristályt, egy soros vonali illesztő áramkört, amely a hagyományos soros csatlakozás helyett lehet a korszerűbb USB-soros átalakítós megoldás. Egy külső EEPROM-ot a progrmok tárolára. Ez az 5. ábra Propeller fejlesztő áramköri elrendezés áramkör már alkalmas fejlesztési célokra, amihez az ingyenes fejlesztő programot (a neve: Propeller Tool) a www.parallax.com/propeller/downloads.asp oldalról tölthetjük le Ugyanitt találjuk meg a Propeller Programozási Kézikönyvét is. (6.ábra) PROPELLER INDULÁSA, LEÁLLÁSA Bekapcsolás, vagy RESET után: A Propeller belső RC oszcillátora hozzávetőleg 12 MHz-en kezd rezegni, majd 50 msec-os késleltetés után az első processzorba (COG0) betöltődik és lefut a SYSROM-ban található Boot Loader program. 6. ábra Propeller források A Boot Loader a következőket hajtja végre: Megvizsgálja, hogy P30 és P31-es lábon működő soros adatátvitel a PC irányába létezik-e. Ha igen, akkor a Boot Loader elküldi a PC-n futó Propeller Tool (PROPTOOL) programnak Propeller Chip azonosítóját, és ez után a PROPTOOL betölti a programot a SYSRAM-ba, valamint, ha úgy van megadva, akkor a SYSRAM-ba letöltött 32 K programot átmásolja az I2C busz felhasználásával a külső 32 KBos EEPROMBA is. Ha nincs soros kommunikáció, a P28 és P29-es lábon működő I2C kommunikációval megvizsgálja a külső EEPROM-ot és ennek eredménye sikeres, akkor annak a teljes 32 KBos tartalmát betölti a Propeller SYSRAM-jába. Ha nem sikeres az EEPROM vizsgálat, a Boot Loader leáll, a Cog0 befejezi a működését és az összes I/O láb bemeneti irányra vált. Ha az előző lépések sikeresen betöltötték a programot a SYSRAM-ba és nem kapott felfüggesztő parancsot a PC felől, akkor a COG0 újratöltődik a Spin Interpreter-rel, és az elkezdi futtatni (értelmezni) a SYSRAM-ban lévő felhasználói programot. A fejlesztés megkönnyítésre számos megírt, korlátozás nélkül felhasználható program modul készült már el. Ezek párhuzamos futásukhoz egyenként egy COG-ot használnak fel. Egy rövid felsorolás: Beviteli eszközök: PC billentyű, billentyűzet mátrix, egér, enkóder

Megjelenító eszközök: soros vonal+hyperterminal, LCD, hétszegmenses LED kijelző, TV, VGA monitor. Kommunikáció: soros, I2C, SPI, egy vezetékes átvitel Motorvezérlés: Egyenáramú motorvezérlés PWM-el, szervomotor meghajtás, léptetőmotor meghajtás. Egyéb: Delta-szigma DA, időzítések, stb. MINTAALKALMAZÁS Illusztrációként egy olyan programot mutatunk be, amely a tok tetszőleges két lábán, egymástól függetlenül, 1-128 000 000 Hz között egyesével változtatható négyszöghullámot hoz létre. A program a felhasználóval való kapcsolat tartására bemenetként egy PC billentyűzetet, kimenetként egy TV-t használ. (Ez utóbbi könnyedén megváltoztatható VGA monitoron, vagy LCD kijelzőn történő megjelenítésre.) Mint azt már az előzőekben említettük, ezek kész, azonnal felhasználható modulok. Még egy előre elkészített modult használunk a számlálók kezeléséhez: az a Synth modul. Ezek után a modulokban lévő eljrárások felhasználásával összerakjuk a programunkat. Amint a program szövegéből leszűrhető, a SPIN nem érzékeny a kis és a nagybetűkre. A SPIN program: {{ NÉGYSZÖGJEL GENERÁLÁSA 0-128 MHz-ES TARTOMÁNYBAN, A FREKVENCIÁT HERZ PONTOSÁGGAL LEHET VÁLTOZTATNI - ÖRÜLET!!! A PROGRAM CSAK EGY COG-OT HASZNÁL, DE MIVEL KÉT SZÁMLÁLÓJA VAN, EZÉRT KÉT FREKVENCIA HOZHATÓ LÉTRE, KÉT TETSZÖLEGES LÁBON HASZNÁL: CHIPCAD 4SOR*16 KARAKTERES SOROSAN KOMMUNIKÁLÓ LCD MODULT, ÉS PC BILLENTYÜT. ELÖSZÖR A LÁBSZÁMOT KELL MEGADNI 0...31 KÖZÖTT, (BOLONDBIZTOS!) UTÁNA A SZÁMLÁLÓT (A VAGY B)(BOLONDBIZTOS!) MAJD A FREKVENCIÁT 0..128_000_000 Hz TARTOMÁNYBAN (EZ NEM BOLONDBIZTOS!) }} CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 VAR long ctrab,pin LONG DECVAL OBJ Freq : "Synth" debug : "tv_text" kb : "keyboard" pub main start PUB start debug.start(12) 'start tv_text kb.start(25, 27) 'start the keyboard pub ctrab1,pin1,decval1 debug.str(string("frekvencia GENERATOR",$d)) Pin1:=100 until (Pin1 <32) debug.str(string("pin:[0-31]: ")) Pin1:=getdec debug.str(string("ctr [A vagy B]: ")) ctrab1 ~ until (ctrab1=="a" or ctrab1=="b") ctrab1:=alluppercase(kb.getkey) debug.out(ctrab1) debug.str(string("freq[hz]: ")) decval1:=getdec Freq.Synth(ctrab1,Pin1,DECVAL1) PRI getdec :decva c,cdec 'DECIMÁLIS SZÁMOK BEVITELE ÉS VISSZAÍRÁSA DECVA := 0 cdec := 100 case c := kb.getkey 13 : if cdec <> 100 quit "0".."9": cdec:=lookdownz(c : "0".."9") 'MÁST NEM FOGAD EL DECVA := DECVA*10 + cdec debug.dec(cdec) 'SZÁMJEGYEKET EGYENKÉNT VISSZAÍRJA return decva PRI alluppercase(c) : chr 'NAGYBETÜSRE ALAKÍTJA A BETÜKET case c "a".."z": c -= $20 KISBETÜS VOLT chr := c "A".."Z": chr := c NAGYBETÜS VOLT PRI NEWLINE debug.str(string($d)) Mivel minden COG-ban két 32 bites számláló egység van, ezért két lábon, egymástól függetlenül tudunk két tetszőleges frekvenciájú négyszögjelet előállítani! Ez a rövid bevezető célja a figyelem felkeltése az eszköz iránt. A Propeller áramkör a ChipCAD Kft-nél megvásárolható. Rövidesen magyar nyelvű könyv is rendelkezésre fog állni, és az ismeretek a ChpCAD Kft-nél tartott Propeller tanfolyamokon is elsajátíthatók. PROPELLER PROGRAMOZÁSA A Propeller alkalmazás bináris kódra lefordított felhasználói program a Propeller RAM-jában vagy EEPROM-jában. Az alkalmazás vagy a Propeller Spin programnyelvében (magas szintű nyelv) és/vagy Propeller Assembler-ben (alacsony szintű nyelv) van megírva. A szöveges Spin programkódot a következőkben bemutatásra kerülő PROPTOOL program önállóan értelmezhető egységekké, ún. tokenekké alakítja, amit a SYSRAMba történő letöltés után a COG-okba betöltött Spin Interpreter értelmez és hajt végre. A szöveges Assembler programkódot a PROPTOOL-ban lévő assembler gépi kódú utasítások sorozatává alakítja, amit a SYSRAM-ba történő letöltés után a COG-okba betöltve közvetlenül futtat a COG CPU egysége. A Propeller Spin Interpreter a bootolási folyamat 4-es lépésében töltődik be az alkalmazás futtatása előtt minden esetben. Ezért, minden alkalmazásnak tartalmaznia kell egy minimális méretű Spin programkódot, míg a további rész Spin-ben illetve Assembly-ben megírt programrészeket tartalmazhat. Ha a bootolási folyamat befejeződik, és az alkalmazás futása elindul a COG0-ban, minden további tevékenységet az alkalmazás futása határozza meg. Az alkalmazás felügyeli és módosíthatja a belső órajel frekvenciát, az I/O használatot, a regiszterek konfigurálását és azt, hogy mikor, és hány COG fut. PROPELLER PROGRAMFEJLESZTŐI KÖRNYEZETE: A PROPTOOL A mérnökök a Parallax-nál sok fejlesztési környezetet használtak az elmúlt, több mint 20 éves időszakban. Használat közben rengeteg tapasztalat gyűlt össze, és ezek felhasználásával készült a PC-n futó, ingyenesen letölthető Propeller Tool (továbbiakban PROPTOOL) integrált fejlesztői környezet (IDE), amely a Propeller tokok egyszerű, és olcsó fejlesztő eszköze. A PROPTOOL fejlesztői környezet egyetlen futtatható állományból áll, néhány on-line súgó fájllal, és mindenki által felhasználható Propeller könyvtár állományokkal kiegészítve. Mindezek a fájlok abban a mappában jelennek meg, amelyet a telepítés során megadtunk. Ez alapértelmezés szerint: C:\Program Files\ParallaxInc\Propeller. A PROPTOOL futtatható állománya, a Propeller.exe a számítógép bármelyik mappájába másolható, PROPTOOL = PROPELLER IDE illetve bármelyikből futtatható, nincs szüksége speciális rendszerfájlokra. Mindegyik könyvtár (library) állomány (ezek a.spin kiterjesztéssel rendelkező állományok) egy független objektum, amelyek felhasználhatóak a Propeller fejlesztések során, a forráskódokkal és a beépített dokumentációval együtt. Ezek egyszerű szöveges állományok ANSI- vagy Unicode kódolással, amelyek minden olyan szövegszerkesztővel szerkeszthetőek, amelyek támogatják a fenti kódolásokat, mint például a Jegyzettömb a Windows 2000 (és azt követő) operációs rendszerben. Már megemlítettük, hogy egy objektum dokumentációja az objektum fájlba van beépítve. Egy objektumhoz tartozó felhasználói dokumentáció írását közvetlenül a objektum forrás állományába célszerű elhelyezni. Így kevesebb állományt kell karbantartani, és nagyobb valószínűséggel marad a dokumentáció szinkronban a forráskóddal. Lehetséges létrehozni a

forrás megjegyzések két típusát: kód megjegyzéseket (a forráskód egy részének magyarázata), illetve a dokumentum megjegyzéseket (szintén kódfeljegyzés, de azzal a céllal, hogy a dokumentáció nézetben lehessen elolvasni.) A dokumentáció nézet mód segítségével lehet a Propeller Tool-ban egy objektum Parallax fontokkal rajzolt ábrák dokumentációról kivonatot készíteni az objektum forráskódjából, megtekintés céljából. Lehet használni egy külön kialakított betűtípust, a Parallax betűtípust, amiben vannak olyan speciális karakterek, amelyek segítségével az objektum dokumentációja ellátható vázlatrajzzal, idődiagrammal és táblázatokkal. A Parallax betűtípus egy True Type betűtípus, amelyet a Propeller Tool futtatható állományába beépítettek. A betűtípus megjelenése pontosan olyan, mint amely a Propeller tok ROM-jában megtalálható. A betűtípust használva akár az ábrán látható rajzokat is el tudjuk készíteni. PROPELLER UTASÍTÁSOK A Propellerben lévő nyolc azonos processzor 32 bites utasításokat hajt végre, amelyek a COG-ok memóriaterületén az 512 duplaszavas COGRAM-ban helyzetkednek el. Három fontos megjegyzés: Mivel a megcímezhető memória 512 LONG, ezért az operandusok címzésére 9 bit elegendő. A SYSMEM, aminek bájtos címzése 16 bitet, szavas címzése 15 bitet, és LONG-os címzése 14 bitet igényel, ezért elérése csak indirekt címzéssel lehetséges: vagyis az utasításban szereplő 9 bites regiszter tartalma fogja meghatározni azt a címet, amivel a SYSMEM memória egy elemét elérhetjük. A programok RAM-ban futnak, ezért lehetséges az utasításokat közvetlenül átíró, ún. önmódosító kódok alkalmazása. Vagyis a hatékonyabb programozás érdekében olyan programokat írhatunk, aminek a programkódját maga a program változtatja meg! AZ UTASÍTÁSOK FELÉPÍTÉSE Az utasítások 32 bit hosszúságúak, és mezőkre osztott bitcsoportokkal lehet leírni. Az utasítások felépítése: a szokásos műveleti kód operandus felépítést néhány, hatékonyságnövelő megoldással egészítették ki: Az, hogy az utasítás végrehajtása során állítsa a zérus(z) és átvitel (c) jelzőbiteket, illetve az 32 BITES UTASÍTÁSOK FELÉPÍTÉSE Műveleti kód Z flag frissítés C flag frissítés Eredmény frissítés Forrás # Végrehajtási feltétel Célregiszter Forrás regiszter 31..26 25 24 23 22 21..18 17..9 8..0 iiiiii z C r i cccc ddddddddd sssssssss utasítás eredménye a célregiszterbe kerüljön, rendre a 25,24, és 23 bitek értéke szabályozza. Az utasítás formátum tartalmaz egy Végrehajtási feltételek jelzőbitcsoportot, amelyek NEM a processzor jelzőbitjei, de jelzik kogy mely processzor jelzőbitek lesznek frissítve mikor az utasítást végrehajtjuk. Ezt a VÉGREHAJTÁSI FELTÉTELEK itt nem részletezett táblázatában található feltételek határozzák meg. Ez az utasításfelépítés egy belső feltételes utasításvégrehajtást takar, és nagyon hatékony programírást tesz ez lehetővé. Az utasításkészlet részletes bemutatása helyett csupán megemlítjük, hogy más assemblerekhez hasonlóan, vannak assembler direktívák, és a multprocesszoros működés miatt vannak a HUB-hoz kapcsolódő, illetve a COG-ok ALU-ját működtető utasítások. PROPELLER OBJEKTUMOK, ALKALMAZÁSOK - MI AZ OBJEKTUM? A Propeller Spin nyelve objektum alapú, és lényegében minden Propeller alkalmazás alapja. Mi az objektum? Objektumok valójában olyan módon megírt programok, amelyek: 1) Önállóan működő egységek, 2) elvégeznek egy konkrét feladatot, és 3) újra felhasználhatók más alkalmazásokban. Például, a billentyűzet objektum, és egér objektum mindegyike Propeller Tool program része. A billentyűzet objektum egy olyan program, ami a Propeller és a szabványos PC billentyű összekapcsolását teszi lehetővé. Hasonlóan az egér objektum a szabványos PS2-es egérillesztést biztosít a Propellerhez. Ezek az objektumok gondosan megírt, önálló programok, amelyeket más objektumok, alkalmazások felhasználhatnak. A létező objektumok felhasználásával egy újabb alkalmazást lehet elkészíteni. Például, egy alkalmazás tartalmazhatja mind a billentyűzet, mind az egér objektumot, és néhány soros kóddal kiegészítve egy alap felhasználói interfész készíthető. Mivel az objektumok önállóak és tartalmaznak egy rövid programillesztést, az alkalmazást fejlesztőknek nem kell feltétlenül tudniuk, hogy egy objektum hogyan hajtja végre azt. Egyik fejlesztő által megírt objektumokat különböző alkalmazásokban más fejlesztők is könnyen felhasználhatnak. A Propeller objektum a Spin kódból, és esetleg Propeller Assembly kódból áll. Az egyszerűség kedvéért továbbiakban ezeket objektum -nak hívjuk. Propeller objektum Az objektumok spin kiterjesztésű fájlként vannak a számítógépben tárolva, ezért a fájlokra mindig objektumként tekinthetünk. Minden objektum az alkalmazások építőköve. Egy objektum egy, vagy több más objektumot felhasználhat azért, hogy létrehozzunk egy bonyolultabb alkalmazást. Ezeket nevezzük hivatkozásoknak. Amikor egy objektum hivatkozik másik objektumra, az egy hierarchiát alkot, ahol a legfelső szinten is van egy objektum. A legfelső objektum neve: Legfelső Ojektum fájl (Top Object File), és ez a kezdőpont az alkalmazás forditásakor. Az ábrán a Grafikus Demo objektum hivatkozik három másik objektumokra: TV, Grafika, Egér. Ha a Graphics Demo objektum lesz a legfelső szint. A legfelső szintű objektum fájl és a benne hivatkozott másik három objektum együttes lefordítása után kapott programot hivják Propeller Alkalmazásnak vagy röviden alkalmazásnak. Az alkalmazás egy vagy több objektumból áll, és valójában egy 0-3. ábra: Objektumok hierarchiája speciálisan összeállitott binaris adathalmaz, ami végrehajtható kódból és adatból áll, és a Propeller képes futhatni. Amikor letöltjük az alkalmazást, az vagy a SYSRAM-ba, vagy a külső EEPROM-ba kerül. Futtatáskor ezt egy, vagy több COG fogja futtatni. SPIN ÉRTELMEZŐ (INTERPRETER) A SPIN az a magas szintű nyelv, amellyel a Propeller programozható. Chip Gracey fejlesztette ki, aki szeretett volna megalkotni egy könnyen használható nyelvet, amely egyszerű szintaxis szerint felépülő, könnyen kezelhető utasításokkal dolgozik. Magára a nyelvre a Pascal, a BASIC és az Assembly nyelv elvei hatottak. Amikor az integrált fejlesztői környezetben (IDE) SPIN nyelven programozunk, a SPIN-kód ún. BYTE-kóddá fordítódik, (szoktuk ezt tokenizálásnak is nevezni), amely ezután beíródik a fejlesztőben kialakított 32

Kbájtos programterületre, és ezt végül közvetlenül a Propellerbe töltjük. A Propeller futási időben működő értelmezője (interpreterje) miatt a SPIN BYTE-kódja meglehetősen terjedelmes, a SPIN egyetlen sora 20-40 ASM-utasítást eredményezhet a végrehajtás során. A BYTE kódra fordítóprogram a kódot bizonyos mértékben optimalizálja. Emiatt a SPIN használatakor vigyázni kell arra, nehogy túl gyorsan elfogyasszuk a memóriát. Működés A SPIN nyelv számos függvényt használ, és a függvényeket fájlokban tárolja. Ennek megfelelően, készíthetünk olyan SPINobjektum fájlt, amely szubrutinok, adatok és más elemek gyűjteménye, egy másik programhoz hozzászerkeszthető (include), ezáltal az objektum függvényei meghívhatóvá válnak. A nyelv beljebb kezdéseket használ a blokkszintek megjelölésére, "begin" és "end" szimbólumok nincsenek. A változók és függvények elnevezései azokat a szabályokat követik, amelyeket a legtöbb magas szintű nyelvben megszokhattunk, alfanumerikus karaktereket és aláhúzásokat egyaránt tartalmazhatnak. Egy SPIN-program tartalmazhat konstansokat, változókat (globals), (más fájlokból behívott) objektumokat, public-típusú függvényeket és változókat, private-típusú függvényeket és változókat, végül pedig egy adatszegmenst (általában a program végén). SPIN BLOKKTÍPUSOK Az alábbiakban a különféle blokktípusokat ismertetjük: Fontos, hogy a blokktípus deklarálása után az adott blokktípus érvényben marad mindaddig, amíg nem szerepel újabb blokktípus megadás a programban. CON A CON blokk-kijelölő állandókat definiáló blokkot nyit meg. Itt helyezhetjük el az Egy SPIN-program grafikus ábrázolása állandóinkat, amelyeket a fordító feloldja, vagyis külön tárhelyet nem foglal. VAR VAR blokktípus jelölő használata után változókat definiálhatunk. Ezek a SYSRAMban foglalnak helyet, és nem a COGRAM-ban. Definiálhatunk BYTE-okat (8bit), WORD-öket (16bit) vagy LONG-okat (32bit). Programindításkor minden VAR kezdőértéke 0. PRI Szintaxisa és használata megegyezik a PUB-éval. A PRI blokk-kijelölővel lokális típusú függvényt hozhatunk létre, amelyet az adott objektum tartományán kívülről nem érhetnek el más objektumok. DAT A DAT blokk-kijelölő egy adatszegmens kezdetét határozza meg, amely a következő blokktípus-kijelölőig tart. A DAT-szegmenseket adatok és táblázatok definiálására használjuk a SPIN-ben. A DAT-szegmensek ASM-kódok megadására is szolgálnak, amihez deklarálnunk kell egy DAT-szegmenst, majd pedig elhelyezzük az ASM-kódunkat. Ennek az az oka, hogy az ASM-kódot a fordító adatként látja, ezért egyszerűen a végleges objektumba "olvasztja", majd pedig egy adott helyen átadjuk egy COG-modulnak. Jegyezzük meg, hogy egy DAT-szegmensben definiált ASM mérete soha nem lehet nagyobb 512 LONG-nál (valójában 512-16 LONG-nál, a COG-modulok memóriájának végén elhelyezkedő regiszterállományok miatt). A fejlesztés megkönnyítésre számos megírt, korlátozás nélkül felhasználható program modul készült már el. Ezek párhuzamos futásukhoz egyenként egy COG-ot használnak fel. Egy rövid felsorolás: Beviteli eszközök: PC billentyű, billentyűzet mátrix, egér, enkóder Megjelenító eszközök: soros vonal+hyperterminal, LCD, hétszegmenses LED kijelző, TV, VGA monitor. Kommunikáció: soros, I2C, SPI, egy vezetékes átvitel Motorvezérlés: Egyenáramú motorvezérlés PWM-el, szervomotor meghajtás, léptetőmotor meghajtás. Egyéb: Delta-szigma DA, időzítések, stb. MINTAALKALMAZÁS Illusztrációként egy olyan programot mutatunk be, amely a tok tetszőleges két lábán, egymástól függetlenül, 1-128 000 000 Hz között egyesével változtatható négyszöghullámot hoz létre. A program a felhasználóval való kapcsolat tartására bemenetként egy PC billentyűzetet, kimenetként egy TV-t használ. (Ez utóbbi könnyedén megváltoztatható VGA monitoron, vagy LCD kijelzőn történő megjelenítésre.) Mint azt már az előzőekben említettük, ezek kész, azonnal felhasználható modulok. Még egy előre elkészített modult használunk a számlálók kezeléséhez: az a Synth modul. Ezek után a modulokban lévő eljrárások felhasználásával összerakjuk a programunkat. Amint a program szövegéből leszűrhető, a SPIN nem érzékeny a kis és a nagybetűkre. A SPIN program: OBJ Az OBJ blokktípus jelölő az objektumok beillesztését lehetővé tévő területet nyit; ez az, ahol importálhatunk és megnevezhetünk más fájlokban lévő objektumokat. Ezek az objektumok a fordítás ideje alatt illeszkednek be, és válnak a programunk részévé. Jegyezzük meg azt is, hogy nem számít, hányszor importálunk egy objektumot, a kód csupán egy példányban kerül beillesztésre. PUB A PUB blokktípus jelölővel public-típusú függvényt hozhatunk létre, amely a fájl tartományán kívülről is elérhető azon objektumok számára, amelyek importálják a PUB-ot tartalmazó fájlt. A SPIN-programok végrehajtása mindig a legfelső szinten elhelyezkedő fájl elsőként felfedezhető PUB bejegyzésénél kezdődik, vagy, amennyiben a program egyetlen fájlból áll, az abban található első PUB bejegyzésnél.

{{ NÉGYSZÖGJEL GENERÁLÁSA 0-128 MHz-ES TARTOMÁNYBAN, A FREKVENCIÁT HERZ PONTOSÁGGAL LEHET VÁLTOZTATNI - ÖRÜLET!!! A PROGRAM CSAK EGY COG-OT HASZNÁL, DE MIVEL KÉT SZÁMLÁLÓJA VAN, EZÉRT KÉT FREKVENCIA HOZHATÓ LÉTRE, KÉT TETSZÖLEGES LÁBON HASZNÁL: CHIPCAD 4SOR*16 KARAKTERES SOROSAN KOMMUNIKÁLÓ LCD MODULT, ÉS PC BILLENTYÜT. ELÖSZÖR A LÁBSZÁMOT KELL MEGADNI 0...31 KÖZÖTT, (BOLONDBIZTOS!) UTÁNA A SZÁMLÁLÓT (A VAGY B)(BOLONDBIZTOS!) MAJD A FREKVENCIÁT 0..128_000_000 Hz TARTOMÁNYBAN (EZ NEM BOLONDBIZTOS!) }} CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 VAR long ctrab,pin LONG DECVAL OBJ Freq : "Synth" debug : "tv_text" kb : "keyboard" pub main start PUB start debug.start(12) 'start tv_text kb.start(25, 27) 'start the keyboard pub ctrab1,pin1,decval1 debug.str(string("frekvencia GENERATOR",$d)) Pin1:=100 until (Pin1 <32) debug.str(string("pin:[0-31]: ")) Pin1:=getdec debug.str(string("ctr [A vagy B]: ")) ctrab1 ~ until (ctrab1=="a" or ctrab1=="b") ctrab1:=alluppercase(kb.getkey) debug.out(ctrab1) debug.str(string("freq[hz]: ")) decval1:=getdec Freq.Synth(ctrab1,Pin1,DECVAL1) PRI getdec :decva c,cdec 'DECIMÁLIS SZÁMOK BEVITELE ÉS VISSZAÍRÁSA DECVA := 0 cdec := 100 case c := kb.getkey 13 : if cdec <> 100 quit "0".."9": cdec:=lookdownz(c : "0".."9") 'MÁST NEM FOGAD EL DECVA := DECVA*10 + cdec debug.dec(cdec) 'SZÁMJEGYEKET EGYENKÉNT VISSZAÍRJA return decva PRI alluppercase(c) : chr 'NAGYBETÜSRE ALAKÍTJA A BETÜKET case c "a".."z": c -= $20 KISBETÜS VOLT chr := c "A".."Z": chr := c NAGYBETÜS VOLT PRI NEWLINE debug.str(string($d)) Mivel minden COG-ban két 32 bites számláló egység van, ezért két lábon, egymástól függetlenül tudunk két tetszőleges frekvenciájú négyszögjelet előállítani! Ez a rövid bevezető célja a figyelem felkeltése az eszköz iránt. A Propeller áramkör a ChipCAD Kft-nél megvásárolható. Rövidesen magyar nyelvű könyv is rendelkezésre fog állni, és az ismeretek a ChpCAD Kft-nél tartott Propeller tanfolyamokon is elsajátíthatók.