Yleistä Luennot tiistaisin 8-10, TB111, I periodi ei harjoituksia harjoitustyö (auto) II periodilla harjoitustyön esittely I periodin lopussa erikseen ilmoitettavana aikana 08.10.07 Sulautetut järjestelmät 1
Mikä on sulautettu järjestelmä? hiiri? näppäimistö? DVD-soitin? ipod? XBox? Mitä erityistä siinä on? 08.10.07 Sulautetut järjestelmät 2
Sulautettu järjestelmä Erikoistunut, sovitettu käyttötarkoitukseen sekä ohjelmiston että laitteiston osalta Usein osa laajempaa järjestelmää tai hierarkkinen Suljettu/staattinen järjestelmä Vika/virhesietoinen järjestelmä 08.10.07 Sulautetut järjestelmät 3
Suunnittelu Järjestelmä koostuu yleensä sekä laitteistosta että ohjelmistosta Jos toimitaan standardi laitteistoilla, puhutaan usein reaaliaikajärjestelmistä Sovellus ja osa laitteistosta dedikoitua Toimitaan perinteisen kj:n alaisuudessa tai rinnalla Kurssilla lähinnä puhumme täysin dedikoiduista järjestelmistä 08.10.07 Sulautetut järjestelmät 4
Esimerkkejä laitteistoista Pieni järjestelmä ( microchip ) Keskisuuri ( atmel ) Sulautettu Linux ( Axis ) Fpga pohjainen ( xilinx ) Dynaaminen ( tensilica ) Perinteinen ( freescale ) 08.10.07 Sulautetut järjestelmät 5
Erityispiirteitä Rajatut resurssit Kiinteät tehtävät Sovellus ei terminoidu Ei pakotietä 08.10.07 Sulautetut järjestelmät 6
Ohjelmointi Suljettu, erikostunut järjestelmä ei sisällä ohjelmointityökaluja eikä laitteistoresursseja Ohjelmistot kehitetään muussa ympäristössä -> ristikäännös 08.10.07 Sulautetut järjestelmät 7
Ohjelmointityökalut Ristikääntäjä Gcc tai muu kääntäjä Muut työkalut Assembler, yhdistelijä, yms Ajoajan kirjastot, esim C-kielessä kielen tuki C-standardikirjasto IO-kirjasto käyttöjärjestelmätuki 08.10.07 Sulautetut järjestelmät 8
Kielentuki Suorituksen kannalta välttämättömät rutiinit, C-kielessä esim. kertolasku arkkitehtuureille joissa ei käskynä Käynnistysrutiinit, joilla kontrolli siirtyy ohjelmaan 08.10.07 Sulautetut järjestelmät 9
C-standardikirjasto Ohjelmoijalle tutut rutiinit, joita C-kielessä käytetään (malloc, printf, strlen,... ) Jakautuu kolmeen ryhmään laiteriippumattomat (strlen, strcpy,... ) yleinen IO (printf, sprintf,... ) käyttöjärjestelmä rajapinta ( fopen, signal,... ) 08.10.07 Sulautetut järjestelmät 10
IO-kirjasto laitekohtainen IO-toiminto, useimmiten merkki-io (getchar, putchar,... ) käytetään joko suoraan tai standardikirjaston kautta 08.10.07 Sulautetut järjestelmät 11
Muuta Newlib on kirjastopaketti, joka sisältää C- standardikirjaston kevennetyn version. kirjaston vaatima käyttöjärjestelmätuki on minimoitu tavoitteena helpottaa sovellusten siirtoa sulautettuihin (tai muihin pieniin) järjestelmiin 08.10.07 Sulautetut järjestelmät 12
Käyttöjärjestelmätuki laitteisto- tai sovelluskohtaiset rutiinit käyttöjärjestelmän emulointiin C-standardikirjasto odottaa joidenkin käyttöjärjestelmärutiinien olemassaoloa esim. fopen open emulointi tai kj (jos sellainen on) tarpeen yhteensopivuuden nimissä, jos halutaan sovittaa standardisovelluksia sulautettuun ympäristöön 08.10.07 Sulautetut järjestelmät 13
Ohjelmointityökalut Kääntäjä (C, C++, Java, tms. ) assembler (gas,... ) yhdistelijä (gld,... ) muut työkalut nm, ar, objdump, objcopy,... Debuggeri (gdb, ) 08.10.07 Sulautetut järjestelmät 14
Kääntäjä useimmiten gcc (tai sen variantti) tuottaa symbolista konekoodia (.s) 08.10.07 Sulautetut järjestelmät 15
assembler arkkitehtuurikohtainen symbolisen konekoodin kääntäjä objektikoodiksi (.o) usein näkymätön vaihe käännöksessä objektikoodi paikastariippumatonta 08.10.07 Sulautetut järjestelmät 16
yhdistelijä yhdistelee objektikoodit erilähteistä (ohjelmoija, kirjastot) valmiiksi tulostiedostoksi sitoo ohjelman sijoittelun muistiin poimii koodialueet yhteen läjään dataalueet toiseen, jne... 08.10.07 Sulautetut järjestelmät 17
Ohjelmointityökalut *.c *.s *.o exe? käännös, assembly, yhdistely, entä sitten? Miten sulautetussa järjestelmässä koodi saadaan muistiin? 08.10.07 Sulautetut järjestelmät 18
Muistinkäyttö sulautettu järjestelmä staattinen ohjelma sijoitetaan suoraan muistiin, ei massamuistia ohjelmoijan kerrottava eri tarkoituksiin käytettävissä olevat muistialueet (Flash)ROM, RAM, etc... lisäksi koodi on saatava muistiin oikeaan paikkaan ja käynnistettyä 08.10.07 Sulautetut järjestelmät 19
Ohjelman lataus jos järjestelmä aivan tyhjä, erillisellä ohjelmointilaitteella luodaan ohjelmarom yleensä laitteistoissa on jonkinlainen ohjelma valmiina ( bootrom, bios, etc... ) AVR-prosessori: muistissa valmiina flashohjelmointi (vrt: PC-bios päivitys) tämä osaa ladata/käynnistää koodin 08.10.07 Sulautetut järjestelmät 20
Ohjelman lataus pelkkä sovellus kaikki tehtävä itse bios olemassa bios tekee perus alustuksen, käynnistää sitten sovelluksen sovellus flashmuistissa, josta bios sen tunnistaa ja osaa käynnistää tai configuraatio eeprom (vrt. PC-bios) joka kertoo, mistä sovellus löytyy 08.10.07 Sulautetut järjestelmät 21
Ohjelman lataus aina koodia ei haluta ajaa ROM pohjalta, silloin siirto RAM-muistiin ja suoritus sieltä testausvaiheessa käynnistys usein eri tavalla kuin lopullisessa järjestelmässä 08.10.07 Sulautetut järjestelmät 22
Muistettavaa koodi läsnäolevaa (resident), ei erillistä latausta käynnistyksessä mitä mahdollinen bios alustaa, mikä jää sovelluksen tehtäväksi lopullinen vs. testaus, onko tilanteessa eroja 08.10.07 Sulautetut järjestelmät 23
Ohjelmointityökalut gnu binutils sisältää edustavan joukon erilaisia ohjelmia, joita saattaa sulautettua järjestelmää ohjelmoidessa tarvita miten saat ohjelmasi kohdejärjestelmään? download-mekanismit, tiedostomuodot bootstrap 08.10.07 Sulautetut järjestelmät 24
Ohjelmistotestaus Simulaattori olisi kiva, ettei tarvitse aina ajaa testiä kohdelaitteistossa Onko kohdelaitteisto olemassa ohjelmaa tehtäessä? Tarvitaanko laitteistoon tukea testaukselle debug-portti tms. 08.10.07 Sulautetut järjestelmät 25
Testaustyökalut Logiikka-analysaattori Oskilloskooppi Emulaattorit prosessorille eprom-emulaattori 08.10.07 Sulautetut järjestelmät 26
Ohjelmistoarkkitehtuurit Silmukka Keskeytysohjattu Prosessipohjainen 08.10.07 Sulautetut järjestelmät 27
Silmukka pienten järjestelmien ydin yksinkertainen vaikkapa näppäimistö voisi olla tällainen 08.10.07 Sulautetut järjestelmät 28
Silmukka Sopii järjestelmiin, joissa ei ajoitusvaatimuksia tehdään vai yhtä asiaa tai pieniä peräkkäin pyörii prosessorin sallimalla vauhdilla Start: jsr _Init clra loop: out a,scanreg in ScanReg,b and #1,b beq nokey jsr SendCode nokey: add #2,a jmp loop 08.10.07 Sulautetut järjestelmät 29
Silmukka jos tarvitsee tehdä montaa asiaa lomitettuna ja ajoitettuna, hankaluudet alkavat loop: JSR eka JSR tokan_alku JSR eka JSR tokan_loppu JMP loop 08.10.07 Sulautetut järjestelmät 30
Silmukka jos ajoitus silmukan keston avulla laske syklejä, silmukka oikean kestoinen if:n eri haarat saman kestoisiksi 08.10.07 Sulautetut järjestelmät 31
Keskeytysohjattu ydin Keskeytys, mikä se on? Asynkroninen aliohjelmakutsu Keskeytysmekanismia käytetään Oheislaitteiden palvelupyyntöihin Poikkeustilanteiden käsittelyyn Käyttöjärjestelmäkutsujen tekemiseen 08.10.07 Sulautetut järjestelmät 32
Keskeytysmekanismeja Suora, siirry osoitteeseen X Vektoroitu, Siirry osoitteeseen, joka löytyy keskeytysvektorin alkiosta N N on keskeytyksen tyypin mukaan määräytyvä tai oheislaitteen antama tunniste Suorita käsky, jonka oheislaite antaa (8085) 08.10.07 Sulautetut järjestelmät 33
Toiminto keskeytyksen tullessa Talletetaan prosessorin tila yleensä PC + tilarekisteri, useimmiten myös keskeytykset kielletään talletus pinoon tai erikoisrekistereihin myös muuta voidaan tallettaa Pino talletuspaikkana sallii sisäkkäiset keskeytykset, eli keskeytys voidaan keskeyttää Rekisteriä käyttävissä arkkitehtuureissa tarvitaan lisätoimenpiteitä, mikäli näin tällaista halutaan 08.10.07 Sulautetut järjestelmät 34
Toiminta keskeytyksen tullessa tilajaollisissa arkkitehtuureissa tilanvaihto USER -> SUPERVISOR paluuta varten oma käsky (RTI) 08.10.07 Sulautetut järjestelmät 35
mc680x0 Tallettaa ohjelmalaskurin ja tilarekisterin pinoon Kysyy keskeytysvektorin oheislaitteelta Tai käyttää kiinteää vektoria (exceptions tai autovector) Nostaa suoritusprioriteetin keskeytyspyynnön tasolle (siis ei suoraan kiellä kaikkia keskeytyksiä) Siirtyy etuoikeutettuun tilaan Kontrolli vektorin osoittamaan paikkaan 08.10.07 Sulautetut järjestelmät 36
sparc Tallettaa tilan keskeytyspinoon (kovossa) Pc:t, cwp, asi, ccr, pstate, traptype Siirtyy etuoikeutettuun tilaan Kieltää keskeytykset Siirtyy käyttämään alternate globals rekistereitä Traptype ohjaa kontrollin vektorin kautta 08.10.07 Sulautetut järjestelmät 37
arm Siirtyy käyttämään pyynnön mukaisia rekistereitä Tallettaa ohjelmalaskurin R14 rekisteriin Tilarekisteri ohjelmalaskurissa Kieltää keskeytykset Neljä tilaa (user, firq, irq, svc) Kontrolli pyynnön mukaiseen osoitteeseen 08.10.07 Sulautetut järjestelmät 38
Toiminto keskeytyksen tullessa Kovo tallettaa (yleensä) vain tärkeimmän, ohjelmoijan huolehdittava lopusta itse Keskeytys voi tulla koska tahansa, mikäli keskeytykset sallittu Yleensä vain käskyjen välissä (tai seurauksena) Löytyy arkkitehtuureja, joissa keskeytyksiä käsitellään myös kesken käskyn 08.10.07 Sulautetut järjestelmät 39
Keskeytys Asynkroninen aliohjelmakutsu Esittelee rinnakkaisuuden prosessoriarkkitehtuureihin Tämä huomioitava sovelluksissa yleensä rekisterien arvojen säilyttävä ennallaan keskeytyksen yli yhteisten muuttujien käsittely Keskeytys vs. tausta Keskeytys vs. keskeytys 08.10.07 Sulautetut järjestelmät 40
Keskeytysohjattu ydin koostuu taustasilmukasta ja keskeytyspalveluista silmukassa tehdään jotain kiireetöntä varsinainen toiminta keskeytyspalveluissa 08.10.07 Sulautetut järjestelmät 41
Keskeytysohjattu ydin ajoitetut toiminnot kellokeskeytykseen tapahtumaohjatut toiminnot omiin laitekeskeytyksiin taustasilmukka voidaan ymmärtää silmukkaytimeksi paljoa ei kuitenkaan saa yrittää tehdä samaan aikaan priorisointi, päällekkäiset keskeytykset 08.10.07 Sulautetut järjestelmät 42
Keskeytysydin prosessorin rekisterit voidaan jakaa kiinteästi eri keskeytyspalveluiden kesken vaatii paljon rekistereitä/vähän tehtäviä 08.10.07 Sulautetut järjestelmät 43
Keskeytysohjattu ydin ongelma: keskeytyspalvelu ei saa olla pitkä tai keskeytyslatenssi kasvaa keskeytyslatenssi: kauanko aikaa menee palvelupyynnöstä (keskeytys) homman valmistumiseen 08.10.07 Sulautetut järjestelmät 44
Keskeytysohjattu ydin Ongelma: miten keskeytyspalveluiden välinen prioriteetti määräytyy? Keskeytyspalvelu periaatteessa atominen toiminto Kun se on käynnistynyt, se suoritetaan loppuun, ennen kuin seuraava keskeytys käsitellään Vähemmän tärkeä käsittely voi viivästyttää kiireisempää 08.10.07 Sulautetut järjestelmät 45
Keskeytys ohjattu ydin Sisäkkäiset keskeytykset voidaan sallia Ohjelmallisesti Laitteistossa Huomioita kontekstit tallettuvat pinomaisesti Ensiksi tulleen keskeytyksen käsittely viivästyy eniten Saattaa johtaa liian pitkiin latensseihin 08.10.07 Sulautetut järjestelmät 46
Huomioita Ongelma pinomainen (keskeytys)kontekstien talletus Kontekstit puretaan käänteisessä saapumisjärjestyksessä Usein kuitenkin saapumisjärjestys haluttaisiin säilyttää Ratkaisu: Irrotetaan kontekstit pinosta Sijoitetaan ne erilliseen taulukkoon, josta kiireisin valitaan suoritukseen Näin on keksitty prosessiydin 08.10.07 Sulautetut järjestelmät 47
Prosessiydin ongelma jaetaan joukoksi tehtäviä (funktioita) nämä priorisoidaan ja liipaistaan suoritukseen keskeytyksistä 08.10.07 Sulautetut järjestelmät 48
Prosessi funktio ja sen konteksti konteksti -> prosessorin tila funktion suoritusaikana konteksti voidaan tallettaa ja ladata 08.10.07 Sulautetut järjestelmät 49
Prosessiydin periaate joku konteksti ladattuna ja suorituksessa muut odottavat saapuva keskeytys tallettaa aktiivisen kontekstin aktivoi muita konteksteja kiireellisin ladataan suoritukseen 08.10.07 Sulautetut järjestelmät 50
Prosessiydin prioriteetit voivat olla dynaamisia sulautetuissa järjestelmissä usein staattinen prosessijako kaikki prosessit luodaan alustuksessa yksikään prosessi ei terminoidu 08.10.07 Sulautetut järjestelmät 51
Prosessiydin valmiita ytimiä saatavilla kaupallisesti reaaliaikakäyttöjärjestelmät VRTX OS-9 psos QNX yms. 08.10.07 Sulautetut järjestelmät 52
Prosessiydin tukee modulaarisia sovelluksia helpottaa ohjelmistokehitystä keskeytysten kautta rinnakkaisuus tulee esiin, käytännön sulautetut järjestelmät kooperatiivisia mekanismit yhteisten muuttujien käsittelyyn 08.10.07 Sulautetut järjestelmät 53
Rinnakkaisuudesta yksinkertainen tapaus taustaprosessi <> keskeytyspalvelu monimutkaisemmat tapaukset prosessi <> prosessi 08.10.07 Sulautetut järjestelmät 54
Rinnakkaisuudesta missä mahdolliset ongelmat ovat? yhteiset muuttujat Laiterekisterit Latenssin tuomat ajoitusongelmat koodin vapaakäyntisyys Globaalit muuttujat ovat potentiaalisesti yhteisiä kirjastojen vapaakäyntisyys? 08.10.07 Sulautetut järjestelmät 55
Rinnakkaisuudesta Ongelmat muuttujien atomisuus 8/16/32-bittiset luvut <> 8/16/32 bittinen arkkitehtuuri muuttujaryhmien konsistenssi kaksi muuttujaa pitää olla synkronisoitu esim. puskurin indeksit vs. merkkien määrä 08.10.07 Sulautetut järjestelmät 56
Rinnakkaisuudesta Yksinkertainen tapaus lähetyskeskeytys <> (tausta)prosessi keskeytysytimen tyypillinen tilanne keskeytyspalvelu atominen, vain prosessi tarvitsee erillistä huomiota Myös käyttöjärjestelmissä, joissa prosesseilla erilliset muistiavaruudet 08.10.07 Sulautetut järjestelmät 57
Rinnakkaisuudesta char buf[buflen]; int count = 0; int in = 0; int out = 0; char *TX = TX_REG_ADDR; /* keskeytyspalvelu, kutsutaan keskeytysvektorin kautta */ void OutIntr() { if( count ) { *TX = buffer[out]; out = (out+1) % BUFLEN; count--; } else { DisableOutIntr(); } } /* Tulostusrutiinit, sovellus kutsuu tulostaessaan merkin */ void Putchar( char c ) { DisableInts(); IO_Putc( c ); EnableInts(); } void IO_Putc( char c ) { if( count < BUFLEN ) { buffer[in] = c; in = (in+1) % BUFLEN; count++; EnableOutIntr(); } } 08.10.07 Sulautetut järjestelmät 58
Rinnakkaisuudesta Keskeytysten oikea-aikainen kielto ratkaisee Sopivilla algoritmeilla tarve voidaan välttää Mikäli arkkitehtuuri sallii Mikäli tilanne sallii 08.10.07 Sulautetut järjestelmät 59
Rinnakkaisuudesta Monimutkaisempi tapaus lukija-kirjoittaja kahden prosessin välillä eroaa edellisestä sillä, että kumpi tahansa osallistuja on keskeytettävissä yhteisen muistin omaavilla prosesseilla sulautetut järjestelmät, käyttöjärjestelmissä, jotka tuntevat säikeet tuttu kj-kurssilta 08.10.07 Sulautetut järjestelmät 60
Harjoitustyöstä laitteistona auto, jossa linux-kortti ja sillä apuna 2 AVR-mikrokontrolleria tehtävänä ohjelmoida linux-sovellus ja sille avuksi toiseen AVR:ään apu-sovellus. 08.10.07 Sulautetut järjestelmät 61
Lohkokaavio 08.10.07 Sulautetut järjestelmät 62
Ohjelmointitekniikoita Ytimien piirteitä Oheislaitteiden käsittelystä Muistinhallinnasta Perustekniikoita Säätöalgoritmeista 08.10.07 Sulautetut järjestelmät 63
Ytimien piirteitä Silmukkaydin pieniin yksinkertaisiin järjestelmiin ajoitusten tai prioriteettien hallinta hankalaa monoliittinen, hankala modularisoida 08.10.07 Sulautetut järjestelmät 64
Ytimien piirteitä keskeytysydin jos ei paljoa tekemistä, mutta kovat vasteaikavaatimukset Hankala paljon prosessointia vaativissa tehtävissä 08.10.07 Sulautetut järjestelmät 65
Ytimien piirteitä Prosessiydin Joustava ja skaalautuva, helpottaa sovelluksen modularisointia pienissä tehtävissä voi kuormittaa liikaa muistettavaa irrottava <> ei-irrottava kiinteä prioriteetit, round-robin vai dynaaminen skedulointi? 08.10.07 Sulautetut järjestelmät 66
Reaaliaikatehtävä Yleinen muoto task() { init(); for(;;) { do_work(); } } 08.10.07 Sulautetut järjestelmät 67
Reaaliaikatehtävä Vaihtoehtoinen muoto func() { if(!initialized ) { init(); } else { do_work(); } return; } 08.10.07 Sulautetut järjestelmät 68
Reaaliaikatehtävät Yleinen muoto prosessiytimissä Vaihtoehtoinen muoto käytössä eiirroittavaa skedulointia käytettäessä, erityisen käyttökelpoinen pienillä prosessoreilla pienissä tehtävissä 08.10.07 Sulautetut järjestelmät 69
Oheislaitteiden käsittelystä Kyselläänkö vai keskeyttääkö? miten keskeytyksiä hallitaan? keskeytyksen kuittaus tasoherkkä <> reunaherkkä Synkroninen vai asynkroninen muista volatile C-kielessä readonly/writeonly rekisterit päällekkäiset rekisterit varjorekisteri tekniikka 08.10.07 Sulautetut järjestelmät 70
Muistinhallinnasta paikalliset vs. yhteiset muuttujat pysyvät vs. automaattiset muuttujat Kiinteä vs. dynaaminen varaus 08.10.07 Sulautetut järjestelmät 71
Muistin käyttö Kiinteät varaukset Pysyvä dynaaminen varaus Dynaaminen varaus/omat muistialtaat Dynaaminen varaus/yhteinen muistiallas Prosessiytimessä pohdittava myös pinon käyttö. 08.10.07 Sulautetut järjestelmät 72
Muistin käyttö int a; main() { int b; int *cp; } cp = malloc(n); Globaali muuttuja Data alueella Funktio Koodi alueella Paikalliset muuttujat Pinossa Dynaaminen muuttuja Varataan data-alueen loppuun (yleensä siellä on ns. heap) 08.10.07 Sulautetut järjestelmät 73
Koodialue.text Data-alue.data Data-alue.bss Vapaa alue Keko, eli dynaaminen varaus täyttää vasemmalta Pinoalue - stack Pino täyttää oikealta 08.10.07 Sulautetut järjestelmät 74
Perustekniikoita perinteisesti paljon ohjelmamuistia, vähän datamuistia Aika vs. tila Taulukointi laskennan sijaan Lasketaan etukäteen taulukkoon, esim funktiot kuten sin(), cos(), tan() sopivia uhreja. 08.10.07 Sulautetut järjestelmät 75
Perustekniikoita Puskurointi Kiertävä puskuri tavallinen tekniikka Yksinkertaista muistin uudelleen käyttöä In pointer Out pointer 08.10.07 Sulautetut järjestelmät 76
Säätöalgoritmeista Peruskäsitteet asetusarvo eli haluttu arvo oloarvo eli mitattu arvo erosuure, edellisten erotus ohjausarvo, mitä laitteelle kerrotaan, jotta erosuure pienenisi 08.10.07 Sulautetut järjestelmät 77
Säätöalgoritmeista kolme perussäätäjää P-säätäjä I-säätäjä D-säätäjä ja yhdistelmät PI, PD, PID 08.10.07 Sulautetut järjestelmät 78
P-säätäjä yksikertaisin säätäjä u = K*e + M u, ohjausarvo e, eroarvo K, kerroin M, ohjauksen nolla-arvo 08.10.07 Sulautetut järjestelmät 79
P-säätäjä Mitä isompi ero, sitä suurempi ohjaus jättää aina pienen virheen sopivilla kertoimilla voi alkaa värähdellä 08.10.07 Sulautetut järjestelmät 80
I-säätäjä Integroiva säätäjä, perustaa ohjauksen useampaan kuin yhteen eroarvoon u = K * average( e(1) e(k) ) u, ohjausarvo e( n ), eroarvot k, montako huomioidaan K, kerroin 08.10.07 Sulautetut järjestelmät 81
I-säätäjä ei reagoi pieniin muutoksiin ei asentovirhettä hidas käytetää harvoin yksin 08.10.07 Sulautetut järjestelmät 82
D-säätäjä Derivoiva säätäjä, perustaa ohjauksen erosuureiden derivaattaan u = K * ( e(n) e(n-1) ) nopea herkkä värähtelemään ei yksinään käyttökelpoinen 08.10.07 Sulautetut järjestelmät 83
PID-säätäjä Yleissäätäjä P osa huolehtii perussäädöstä D osa tuo nopeutta I osa vaimentaa värähtelytaipumusta saavuttaa asetusarvon, ei virhettä 08.10.07 Sulautetut järjestelmät 84
Esimerkki Pieni sovellus (worms) Laitteisto MVME133 Mc68020 2 Mb Ram sarjaportti Valmiina debug rom, joka initialisoi prosessorin ja osaa ladata koodin rammuistiin RAM pohjainen suoritus 08.10.07 Sulautetut järjestelmät 85
Esimerkki Yksinkertainen ydin Synkroninen vuorottelu, 4 prosessia, ei keskeytyksiä 08.10.07 Sulautetut järjestelmät 86
Esimerkki Rakenne Initialisointi IO-rutiinit glue -rutiinit, eli liityntä DEBUG-ROMiin Ydin sovellus 08.10.07 Sulautetut järjestelmät 87