elekt ACAD: th. schoolot €l€ctrcnics
Do5Buchisl in Wesenticfenveisebih m eßiienTei werdenlechnikenvorsetell, mir denei PoßllelePb ouicmorischen Abldufdeueruigeiner qrommobltiu{e relisiertwerdenkönnen.Diee @ichenvondereinfocLen von eins on die bedrönkten Mdglichl<ei'isn drrch Inreruplsbis zur lmpementierung Äinrergrundprozeses Lösr sich ouf bequeme voi R€lisieruns HiniergrundProze$en RTOS Die AvR-Ailkrco*rclhm ongepcsien wird ou5_ mir HinrersrundP@essn Weisemit lirerruprsdßhfuhren. of die ProblemederSynch.onisierung t, obers wdden Udgeblng vorges|el führlicheins€ongen.Inieruplsweden &orauch in ih€r ,,iorÜrlichen' Einsdlzerci lnterrupt be . Dä6 Auftrcten einesInterrupts kann ein Ereignissoin,auf das Prozcsscworten könnerr.Das ist eineelegärtcMcthode,Interrupts in das Systemzu intcgrioren. . Die Aufnahmeeine6neuenProzesses in das Systemist ein Ereignis,auJda.rdcr neueProzesswartet und da6€iü schonim SvstembcfindlicherProz€ssauslöson Er€ignisscsindolsovielseitignutzbareSynchroüisationsobjekte. Alle iu dcl Aufzählung genannt€nEinsatzpunktewerd€nan einemBeispielerläutert. Scmaphore werdennahczuim klassischeü Stil aufgebaut.Mit ih cn weden kritisch€ geschützt,das sind Codebereiche, RßBionen in denensich nul €inc bestimmteAnzal von Prozessenaufrlältcn darf. Woll€n mehr Prozessedie kritische Region betreteü, werdendiesegeblockt,d.h. wie schonbei der Ereignissenin dia Warteschlange des Semaphors eingefügt. Das Kapitel schließtmit einem$ößerenBeispieljin dem fast alle Svnchronisationsobjekte zum Einsatz kommen.Es besteht:rusder Simulationeiner Tanksrelle.Diese Simulation läufi in Echtzoit ab, aber etwa so, wie eine Modelleisenbahnin Echrzeii abläu{t, also mit einer verzenten Zcitachse.Es konmt keine der Methoden zum Zuge, wie sie in dor Simulationsteclmik aryewendet werdcn, es wird nur mii dcn tvliftetn
l1
2. Zum Inhalt durch einer geflrbeitetrdie das Systemanbiet€t.Z.B. wird die Reiheder Zap{8ä11len Semaphor daqestellt. die Beispielpm$ämm€nicht Das Programmbestehtausüber 850 Progrä'ar:tzeilen, Allc scineTeileweden aberausftihrlichbls in die Einzelhciienlinein ereingerechn€t. klärt und es gibt viele Zeichnung€n,die komplizierte technischeVorgänge anschauljch machen. Es wird il]lmer wieder gezeigi, s'ic Verfahren g€wäh1todcr geändert werden könneD,um sie den technjschetrGcscbcnheitendes Proz€ssors meisi ein Mangcl des Befehbdatzesoder eine lehlendc Adressierungsart anzupa.lien. Besonderseingehend wird die Verw€ndung dcl nn Progralnm oft aüftrctnxlen verkeil€ten Lßicn
2.4. Zu Ka!itel 7 vor, welchedie kleinonArbeitsspeicher DiesesI{apitel stcltt eine SpeicheNerw:Iltung ist nur Spcicherblock von AvR-Controllernselll eftektivnutzt. ln jcdem ausgegebenen ein Byte von dor Verwaltungr€servicrt.Di€ Folgedavonist zwor,dassdie Blockgrößc der AVRnach obcn durch 255 beschränktist, aber das isr bei don Einsatzgebieten Werdenwirklich oinmalSrößereBlöckcbcnötigll ControllerkeineechteBcschränkung. kiinnendiesemit andcrcnMittelD verwaltetwerdcn. GroßerWcrt wird auf die Rekombinationvon BlöckenSelegt.Dcr Prcis,der lilr eino gezahlt Nird, ist allerdingsoin rocht kornplexesProgute Rßkombinationsfähigkeit gramm.Auch hier werdenmit viclcn Zcichrun8endie VorgängcanschäulichSemacht mi! dem nrdimentä.ren RTOS ous Kapi Dic Kornbinationder Spcichcrverwaltung wic dag Belriebssystcm, tcl 6 crgibt ein schonfiir rocht komplexeAbläufebrälrchbares Sirnulälio sprogrammous Kapitei 6 zejgi, in dcm bcidcszusammeneingcsctztwircl
2.5. Zu KaDitelI zu implcmcntier€nbedeutetnatiirlich,den StandardIEDE EineF]ioßkommaarithmeiik ?54 um$etzenzu müssen.DicsorStendardst€llt allerdingshohe Anforderungcn.Unt diesc bc$serzu verstehenund dann auch r€alisierenzu können, empfiehlt os $icli, einmol unabhinBig von jeglichenImplune tieruDgen,Stä"'ldards, Flicßkorrunazahlen Bitnustern usw. zu betnchten. Nach eincl rnotiviercndenEinleitune werden Fließkonnazahlanals Objekte eingeführt. Es ist zu erkennen,dassman nicht generell von d€t Flicßkommazahlsprec.hcn kann, sondern dass dercn Eigenschaftcn von der ADzahl der zur Darstellung verwendeten Zifiem und vom Exponentenbercicli äbhäng€n Das macht die Einführung von Fließkomnazälienbereichen plausibol, die schoneinen Bezug zur lmplementierung herDer Eindeutigkeit do Darstellung wegen geht mar bei ällgemeinen Beträchtungen gernezü normalisiertenZahlenüber. Dic sich dabei eryebendeLü&l) im Zählengitter deutet äber schon darauf hin. dass sich bei der Beschrä*ung atrf norma]isierta Fließkommazahlenin Extrenflillen Genauiskeiisproblemeer8€ben, die den Standärd auchnichtnormalisiedeZahlenzuzulassen. veranlassen.
12
2.6. Zü KaDitPl I Weil das Runden in Stärdaxd eine so gloße Rolle spielt, wird es hier ausführlicher behandelt als sonsi wohl in einem Buch über Programmierung üblich Die Einftihrung eines Fehletcrms wird sich in den {o1g€ndcnKapiteln als sehr nützlich erweisen. Der Staldaxd verlansi das oinnvolle Rechnenmit +oo und -oo. Weil die Eisensr,haficn von +oo natürlich vom Stärdard sanz unabhänsig sind, wcrden ihre Eisenschaften von Operationenmit dcn besservom Ständardunabhängigbetrachi€t.Die Ergebnissc Unendlichkeiten lasöensichleicht nit Hilfe von konvergcntcnund diversentenZahlcnfolgenbestimm€n.Das Rcch en n t +oo bringt gewisscVorteile,es wird aber artch die dariDlaucrn. kurz auf die Ge{ahr(nhiDsewiesen,
2.6. zu Kapitel9 ünd langist ein schrvierigcs Die Umsctzlmgdes Standardstlir eincn 8-Bit-Prozessor wierigesUntcrfang€n.Tatsächlicherüics rJichdas Projekt als 3o aüfwcndig,relativ wurde Das zu seinemNutz€n betrachtet,dasbo$ouf etwa halbemWegeabg,ebro(hcrl Zahlcn,der verlaü8te Rechncnmit Unendlich,mit Nichtzahlcnund nichtnormalisierten die komeine6jedenRochcnergebnisses, Nach$'€is der Genauigkeitodcr Ungenauigkeit (iraps) us$t.sind gut, plexeBehandlungvon Unterlauf,die Organisationvon Fr,lltüren möglicherweise essenticllfür die LösungkompliTiertcrnumcrischerProbleme,ctwa dic Bestimmungvon EigcnwertengroßerMatritzen, bci cincm AvR-Prozessorcrschcint das alle6j€dochwic dic sprichwörtlichenKanoncn,mit denenauf Spatzengeschosscn werdensoll. Schondie einfa.hstealler Operationcn,die Bildung desAbsolutbctroges einer Zahl, wird bci strikter B€lolgungdasStandordszu einemMonstmm, vcrglichcn mii der SimplizitätdesVorgangsaulierhaibdcs Stond&rds,der nur darin bcstcht,das Vorzeichcnbitzu löschenl aber es ist domit nicht vertan, denn nichts Das Projekt wurde zwor obgebrochen, kann den Standardbesso illustrierenund erlüutern ols dic hwgeführtenImplemcnImkommcndarin vor, alle wesentlichcn Schwierigkeiien tierungenlAlle wesentlic,hcn plementierungstechnikcn kommenzum Einsfl,tz.Das Kopitcl kann also a.lseinegroßc, gespickteErlärtcrung de3 Standardsgelescnwcrmit vi€l€n Programmicrb€ispielen volbtändig ünd voll fiükden. Andercrseitssind aber di€ gezeigtenUnterproeremme Pakct crgänzt tionsfähig,siekönncnzü einemdenganzenStandordimpl€mentierenden werden.Nötis wäxedazu ,,nur" die Implcmonticrunevon Addition/Subtraktion,Division, VcrBleichünd Urrvändlung vom Bi är- ins Dezimalsyste$rmd umg€kehrt, allcsnach den sirikten Vorsch ften dasStandärds.Für diesenFall wrEda die für die Division schon geleistetenVorarbciton in das Kapitel aufgenommcn. Nachder Vorstellunsder Zdllen{ormatewerdenFalltüren,dic Ausnahmesituationen und die Genäuigkeiterläutert. Der Implementienngstcilbogin t mit der Darstellung der Realisierungvon Falltürer und Kontrollvadablen. E6 folgen die später Sebrauchtcn nichtnumerischen Opeütionen ü'ie die Zerlegung eincr Zahl iD ihre Bestandteile, die Normalisieruneonier Zahl, die Behardlung von Uber- ünd Unterlauf und nätürlich das Runden. Es schließensich drei numcrischeImplementieNngen ar: Die Bildung des Absolutbetrages, das Runden zu ciner gaMen Zahl und die Multiplikation Es muss ällerdinss daxäul hinseltiesen werden, dassdic Unterprosramme den Stan
13
2. Zum Inhalt daid nicht total ümsetzer. ft vird n:iniich nicht das cinfach genaue Zahlenfornat umgesetzt,sondernein Format, das im Kapitel zueidrittebenall genarnt vird. Es wird so genannt, weil seine Mäntisse nichi drei, sond€rn nul zwei Byies umfasst. Däs ist aber auch d€I einzis€Unterschi€d,in allen anderenBelansensind beideFormate nicht zu unterscheiden.
2.7. Zu Kapitel l0 Zwax lassensich Rechmnsen mit Firkonlmazählen selr vicl schncllcr durchfühcn als mit FließkommMahlen, aber wenn die Absoluterößen der Operandenzu sehrditreri+ ren, wird Fixkommarechnung impraklikabel.Eine Fließkommäaxiihmeiik sollte also zur Verfügungstehen,ünd sie sollte such für di€ kleinerenAvR-Prozessorcn mit wenig Arbeit6- und Programmspeicher zur Verfüguügstehen.Das vorangehende Kapitel macht es klar, dassdieseForderungnicht mit einerFlielSkommaarithmetik zu erfülleü isi, dic dcr Stard{rd IEEE 754buch!,tubenund Binngetreu(l) realiBiert.Deshalbwird präsentiert,die mit bedeutendweniger in dicscmKopitcl cinc Fließkommaariihmetik Speicherplatzauskom i als die dcsvorigcn Krpitel$, dic aber,wos Rechencrgrbnissc betrifit, nur in einigenExtremfälleDvom Siandardoh'ciclli. Dm Falltürsystcmdcs Standardsist durch ein einfach$ SysLemzur Fehlerbehandlung ersetzt,dss es sber doch gestattet,eine durch einen Fehler unterbrocheDe Rechnungfortzusetzen,we n der Fehlerin der Fehlerbehandlung beseitigtoder umga.r1gen werdenkann. Irnplcmcntiertwird indiesemBucha.llerdings nur eineCrundausstaltungr Die GrundrcchcnartcnAddiiion, Subiraktion, Multiplikation und Division, der Vergleichvon F]icßkommozählen und dic UmwandlungvornBintu- in dasDezimalsystem. Eine Fließkommazohlbcstohtous drci Byircs,domit kann ch ATtiny2313 sx5-Matrizen verarbeiten und es bleibt uoch gcnugSpcichcrplaizfiir dcn Stopcl und cinigowcitcrc Dätenstrukturenübrig, Die Zahlenhäb€n ailerdi gs circ 16-Bit-Msntissc,dio ctwr) fiirlf Dezima.btellen entspricht.Zur Verarbeitungvo Messdaterist dss vollkomrnenausreicheDd.Di€ Umwandlungleistet nur einenBasisdierßt,l(anü äbcr leiclrt ausgebaut werden.Implementierungen von Wuüelj Exponentialfuaktionusw. gibt es i diesen Buch nicht. Zwci Beispielczeigcn,wie einfoch die A thmetik in einem Assemblerprogramm cinzusctzenist. Im c$t€n Beispielberechnetein AvR-Prcz€ssoraus lvl€ssdatendie Durchflusslnengecincr Olleituüg. Däzu wird oin Intogral durch eine Tropezsummcrlpprcxinli€rt. Däs zweiteBeispielenthziltciD Untcrprogrammzum Sorticrcnvon flicßkommazahlen,es demonstriert die Anwerdurrg der Vorgleid$operlrtorcu.
2.8. Zu Kapitel11 Zufällszahlenhaben einenr,,eitenAnwendunssbercich. Dazu zähleninsbesondere Simulrtionsprogrämme, und Kapitcl 6 enthlilt mit dem T.rkstellensimulationsprosamm ein BeispieldäJür.SiekönnenaberdürchaüspräktisclienZ\€ckan dicron. So11z.B. einc Nlodelleisenbahnä,'age mit einem Flackerlicht äusgestattet rverdeir,das einen Feuer bmnd simulielt, so kann das mit einem ATtiny2313, einem Zufä]lszä}lenseneräior aus
2.9. Zu Kapitel A diesemKflpitel und einemdigitalenFilter in die Tat umgesetztwerden. Oft komnt es darauf an, Zufallezahlcnmit größtmöglichcr Gcschwindigkcit zu epeu Brr. Es wcrdcndcshalbVcrfahrenpräsertiert,die es gestaiierj aüch mit einem8-BitProz$sor cxpole tial- ünd nornalverteilte Züfallszal en mit großer Geschwindigkeit zu crzcuBion.Dicsc Zü{ällsza}iler snrd allerdirss }'ixkommazahler. Das Tanksiellensimulatioilsprogranmzeigt,dassdasin marchenFällenideal ist. Fü die anderenFälle werden aber auch Fließkommav€rsion€ndff Zutallszalien implementiert. Für das Erzeusenvon Zufallszählenmit einer diskretenVerteilunswird €ine spezi€l]e Technik pr:isenti€rt, welche die üblicherweiseverwendeteFolse von Versleichen vermeidetund siattdesseneinen(schnellen) indiziertenZusrifi aufeine ausd€nWerten der diskret€nVerteiluDgkonstruierteTabelleers€tzt. Zum Verstehender im Kapitel ängewandtenVerlähren sind BaFisk€nntnisse dcr Zur Anwendungder lm Xapitel prtuenticrWahrschejnlichkeitsrechnung erforclerlich. genügenddgcgcnnur obcrflächlichcKcnntniseeaustrVrhrs.hcinten Unterprogramme lichkcitsrechnung und Strrtistik.Es ist cir Hduptproerrnn vorh ndcn,däsallc Unterprogrn' mc dcsK{pitds cinsctzt.
2.9. Zu KapitelA Die BezeichDen Tiiel desKapitelskänn man (gurwillig)mit Vermischtes übersetzen. nung isi ganz passend,d€nn die prüsentierienThenen habenwcnig miteinandcrrmd mit den vi€r Ilaupithemendcs Bucheszu iun. Da ist zunächstcinmaleinc Mcthodc zü Fchlcrcrkcnnung z.B. bci cincr Dotcnübcrjcdcs prülcnclc im mit vicr Toklcn 1ür zu Bytc arNkomrnt tragung,die Wesenllichcn (Abschnitt4.1). Um das zu crrcichcnwcrdcn allcrdinssBclitrlssäizund s-Bit-Archihktur dcr Avn-ProzcssorcnbiH zunr Außc$i(x.l $scrcizt.s Dio Giite der Fchlererkornung koürrrt drt nn CÄC hcra , dbcr sic irit in der Praxis vollkomme ausreichcnd,wcnn üren nicht gcradeSeüdüngenvo ein€r lvlarssod€ €mpfängenwill oder urrtc ci cm Scüdcrmastwoh{t. Und si€ ist eben mit sehr viel w€nigerAufwand zu iürplementi€ren. Ubrigensenthält d€r Abschnitt €in schönesBeispielfür aufwendige Oplimierurg arn lalschenPlatz. Der üächsteAbschniti (A.2) präsentierteineDä,tenstruktur, die leiderviel zu Nenig bekanri ist. Die GrundfunkiioneinesFunktorslässi sich beschreiben als die zeitliche Entkoppelüngeinespä.rametsiertenFunktionsaufNfs.Besondersim Zusammcnhang mit verkettetenListen lossensich mit FunktorenkomplexeAulsabenauf cinc saub{! re und nachvollziehbare Weiselösen,wie es mit konvcntiondlerPro8rammiortcchnik kaun zu err€ichenist. Däs Außersteän Elesanzwird erreicht,wenn FuDktoremit ci(stat'emacnine)gekoppeliwerden.Der Abschnittpr:isoritiot nem Zustandsautomaten einemöslic.heBasisversioncincsFunktors,sozr$aecncin hnktorskdctt. Ein klcnrer Wermutstroplen ist leider, dass dic Anwonduxs von l,\mktoron pros.rämntech isch nicht zu dar gäIz onfäcli zü neistendcn Auf8äbc zählt. Dic I'Iühe lohnt sich aberl 'Irs€ndw€lch€'maejscle" Zahlen urd ähnlicherUnsinn wi€ in d€m Wikipedi+Beitrae zum Th€mo Flet'c,rrersind jedoch nicht e.lod€rli.h. DieFr B€itrag idt kein Einzdfäll, er.tklassig.r ^rrögtrz (öm.n b.gcgn l mar b.i Wikip.dia lcidd zu olt g.ipar nit d.itttlässig.n
15
2. ZLtm Inbalt Es folgennoch zweiklein€reBciträge.Da isi eininalein eidacher Timer, dcr in der UNersior desBrches von einigenProgrammenbenutzt wurd€,zum arderenwird ge fiir eineelnfächeSpcnilierverwaltung zeigt,wie bei AvR-Prozessoreder Systemstapel genutzt werden kann-
2.10. zu KapitelB wcrdoi musst€,ist dem AvR.Assemblerzu Dd,tlsdiesesKapitei übcrhauptg€schrieben vcrdanken,bessergcsa8t)seinenDefekten. Der fehlende Linker erschwcrtdrs modulareProgrä nieren. Man kaDnsichmit dem Einzusvon Codedateic bchelfen,mu66ddnn äberdie Nanens8eblmgvon Symbolenrcgcln.Inl dasim BuchsclbstdurchKapitcl wird ein möglichesllcgclsystemvorg€schldgcr, veg vcrlrrcndelwird. Zus;itzlichwird noch demonstricrt,wie in die&)rSituälion mit I terrupts umgegrng$ werd€nkenn ^uch davonwird in BrrchGebräuch Di€ Insumzienz des Makroprozessors zu berutzen VorgceinencxtcrnonMakroprozessor lüsste6 geratcncrscheirlen, schlagenwird dcl Makroploze$sorlvll/I (siehehttP://www.nl1.or8.uk) A einemkleincll Testlar.rlwird gczcigi,wie ]|IL/I ir clasEntwicklun8$ystcn inicgriert ll'crdm kann. Dos Kapitel lcgt ouch dar, warum nidlt gbich zu einemandcrenAssembloriibcrgcSystemrluchgroße gaügenwurdo.Jnlc falls la.ssen sicll nrit dcm im Buch vcrwcrrdcten Programmcndrrcibcn,wie Xapitd 6 z(igi.
16
3. Die verwendetenSymbole Um Klarheit {ür den Leser zu scha.ffen,wird, sofern das nicht zu Exzessenlühfi, stets zwischen einem R€gist€r und seinem lnhalt, allgem€in zwischen einem Speicherplatz und seinem Inhalt unterschieden.Z.B bezeichnetro den Speicherylatz im Prozessor' auf den in Progammen unter diesem Namen zugegrifien werden kann Dag€genbezeichnet ro die Zahl, die momentan in ro gesp€ichert ist Ofenbäx karn nur ro ein WcIt zugewiesenverden, niemals aber t0. Deshalb finden sich in den Kommentaren und Erläuterungen viele Zuw€isungen$'ie ro e lF, äber ni€mals €twas wie r0 F 1F Genausofinden sich viele Vergleiche!''ie to = 1F, aber niemals etwas wie ro = 1F. Adre$en werden ofi nrit griechischen Buchstaben b€zeichnet, eir''a o, B, 9, ",ber auch 7r. Eine Verwechstungmit der Zahl tr ist nicht zu befürchten Wert Das ist Ist o eine Adresse,so ist o[i] det an der Adresseo + i gespeicherte Das hängt z B ein Wort onderes sein, cs kann such ehüas meßtens ein Byte, aber geht Kontext heNor. gebräucht immer sus dem wird und Adrasse a davon ab, wie die auch für den Speicherplatz Platzmangel a['] aber steht aus In marchenKommentaxen an der Adresseo + i. So bedeutetdann ott] - FF, dassdem Speichcrplatzän der wird. Adresseo + i der Wcrt FF zügewies€n ro bis rsx
Die 32 Rcgisterfür allgemeinenGebrauch(GPR)
r0 bis !31
Dic lni.a,fe der 32 Register
rr:o bis rar:so Die aus dcn Registernro bis rs1 zu bildendcnDoppehegister z B rl;6 = t123a q rr:o bis t31r3o Die Werte der Doppelregister, X
Da€ Doppelregisterr2?:2€
I
r2z:2€ D€I Wert desDoppelregistels
Y
r2er2s Das Doppelregister
I
r2e 2s Der Wort desDoppehegistcrs
Z
Das Doppelregistcrtslrso
3
rs1:so Der Wert desDoppelregisters
ro.Obis rs1.7
Bit 0 desRegistersro usw. bis Bit 7 von rs1
i
Das globale Intenuptfreigobebit
t
Das temporltreSpeicherbit
b
Das,,halbe"Uberlrässbit
17
3. Die vetwendeten Symbole o
Das Überlaufbit
n
Das Negativbit
r
Das Vorzelch€nbit
J
Däs Nullbit
c
Das Ubeftragsbit
Rxvz
Dae lo-Regßter mit dem Namen XYZ.
!4xyz
Der Inhalt des Io-Registerc mii den Narnen XYZ.
I\a)
Der Inhalt der AdreBs€o
"4k)
Die Adrcsse der Vsriablen v
wa
Das obereByt€ cles16-Bit-Wortesu
u'
Das untereByte des 16-Bit-Wortesu
o, r
Die Binärzifferno =0 und r = 1
0 bis 9, A bis F Die Hexa.dezimelziflem 0 = 0 bis F = 15 lr
Der Absolutbetragder rationalenZ6.hlr, also r = r lalls r 2 0, r=-rfollsr> 8) != ((bS+2+4) >> 8) SeiteDgrenz€" 19 .nessag€ "Queüe ueberstleicbt 1l .endif l5 16 Start: 17 rs 19 2a 2r 22 et 9., 25 26 27 E\rigt
.cseg ldi out ldi out ldt ldl ldi call ldi caII caII rjnp
r16,L0I'I(RAMEND) I I SPL,r16 I 1 6 , H ] C H ( R A M E N D )1 1 S P H !, 1 6 | Ze S !30,L0W(bS) 1 r31,HIoH(bS) 1 n=4 116,4 4+ Quouelni 1 r16,0x11 4 Queu€Put 4 Queu€G€t 2 Ewig
als externeInterrupts 4.4. DiverseInterruptquellen oder eincmPotentia.lan einemConJederInterrupt, der von einerPotentialänderrmg Nerdenkann,soll hier zu derlextemenIntelrupts zähle . Mit dicaer trollcrpin ausgeiöst Interrupts INT0 dazü, sondernz.B auch Definitiongehörc nicht nul die klassischen jnt'e'rrupt einiger TiüIer. Die Coütrollerphcripheinpüi capüürcirirerrupt und overfow rio kann durcha.usanderen Zweckendienen als die Bezeichnungensuggerieren JederTimer, der extern gctaktel werdenkann und dcr in der Läge ist, bei eiüem kann direkt einen Interupt auszulösen, bestimmtenZuständ oder Zustandswechsel gctaktet werdcn, und als externer Interrupt dienen So kann z.B Timerl von außen Wert dcn er erzeugt ein€n Int€rNpt' wenn er getaktet wird und sein Zähleu€gister mit nnax geladen, nn* = FFFF hat (overfowintellupt). Wird alsod.r€Z:ihlerreeister jnte lDterrupt externen upt' einc! so bildet die Kombination externer Takt overdow wieder den Zähler Zwingende Aufgabe fiir ehe ISR diosesInterNpts ist es natürlich, mit n,,'s zu laden. Der input' capiure irfefrupt, den marche Tiner erzeugenkönnen, wem sich das Potcntial ändert, das an einem bestimmten Controllerpin anli€gt, ist ein veiterer Kar didat für einen axtemen Inieüupt Die Funktionalität desTime$ wird dafür 8ar nicht benötigt, sie karn anderweitig eingesetztwerden,es genügt, wenn d,rsftr input captüe zu verw€ndendeRegister liei iSt
42
,r.5. Saft,wareIntenLtpts Sclbstverständlichlässt sich auch der änalos comparafor (ÄC) als crlerner Inierrupt verwenden.Ist das Poiential a Pin AIN0 positiveralö an P AIN1, so erscheintam Ausgalg desAC einc lo8ischeEins, sonsteineNull. Ein bestimmterZustandodcr enl kann einen Interrnpt auslösen.Wird also an Pin AIN0 über cnren Zustandswechsel geleet,so wird je nach Einstellunedürch SpannNssteilerdic halbe Speisespannuns einenPotentialsprungan Pin AIN1 ejn extencr Interrupt erzeugt.Genügt auch eine von etwa 1,lV, so l(anll der positiveEinsarg dcs AC nit kleinereUmschaltschwelle desCoDtrollcrsvcrbund€nwerden,der Pin AINO ird der internenSpärmunssrefer€nz darn für andcrc Zweckefrei.
4.5. SoftwareInterrupts Nerdenkann, dr.ssbei der KonzipieEs gibt gelvisseAnzeichen,au$dutcn geschlossen nicht dämit gerechnetwurde, daFsjunals ein Betriebssystem nürg des Befehlssatzes auf eirem AvR-Controllcr läulen könniie.Dinesll diescrAnzcichenisi däs Fel en cincs Befehls,mit dem ein spczielleriniemer Interrupt alßgclöstwerdenkann, mcist SWI genannt,also SoftwareInierrupt. Ein Betriebssystcr, ob groß oder kloin, ob dtu sich von der RTOS oder DOS, bcnötigl eineMethode,Bcfchlcentgegenzunehmen, gewöhnliclcnMcthode,Unterprogramnrc rufzurufen,unlerscleidet Ein rol solltenBegclcitct werden,die fehlsa frufc nicht über €ine besiimmtcProgro lnßpeicheradresse zu Prozcssorvcrsion tindernkönnüe,dic abcr 0ucheinenlan$ichvon Prozessolversion gcn Bcfclll und damit ein größcrcsProgrammzur Folgehätte lbrncr ist cs bei vieleD wird, Systcmcnüblich,classbei eincmBcfchlsaufrufin ejnenSystcmnxxlusgewechs€lt gcschütztist und möglicherdcr gcwissePrivilegienbcsitzt, gogcrrUnterbrechungen lvciscscinc eigenenSlapclbcnrtzt. Dä$l&st sichmit eincn Intcrrupt (äuchllap oder cxccprjongenanni)güt crrcidxxl, d€ n InterruDtssinclofi von Hausausnlil gewisso] ausgestattct. Fähigkeitenzur Systunrurßchallung Dio Controller C167lC164 bcsiizon Ein swl-Befchl ist dcm ach wünschenswcrt. den BefehlTRAP,cbonsoder 68332, selbstdcr 68HC08 besitzt einens I-Bcfiü], nur AvR-Prozessoron müssenauf ihn verzichten.Es ist aber ichNalles verlorHr,dc n ein SWI-Bofchlkann mit einem externonIntcrNpt simuliert werden.Dio Schaltung, die bei eincmPin, der einemextemenIntcrmpt zugeordnetist, datür sorgt, dassein wird, reagiertnämlichauchdann, Pegellrechscl erkärrnturd ein Interupt ongcstoßen wcnn dcr Pin äIs Ausgangkonfigrdot ist. Das bedeutei'dasscin cxtcrner l terrupi vom Controllerselbsterzeugtwcrdenl(anr. Das achfolgende Programmzeigt, wie €in SWI mit dem cxtcrxer Irterrupi 2 dcs ATmega32realisieriw€rdenkam. 7 e , I
. include "n32def.iDc" .d€vice ATnega32 .include "vecn32.av!" .cseg Die n,innnalstische ISA des SWI aliö INT2
rlEin anderesist das Fehl€nein€6Bef.hls ltu ?sl Ä"d Set. Daraur vifd ir.nLcm 6päterenAbschnitt noch g€nau€relngeganger.
5 INT2idlr: 6 7
cbi reti .irclude
PoRTB,2 "vecm32.avr"
S' ' dld ion d
,
1 4 ts",1l. ser
sbi PoRTB,2
rr 12 srart: 13 1,1 l,
. cseg tdl out rdi out
SystenstapeleiNichtcn
1 r16,L0W(RAMEND) 1 SPL,I16 r16,HICH(RAI.1END) 1 SPII,116 1
Dos Rituol 'ur vorbereirn,sd$ Swl
16
in
PORTB,2 116,0b00000100 DDRB,r16 TI6,MCUCSR 116,0b01000000 MCUCSR,TI6
1 I I 1 1 1
Dtc Bclühigungdc$91V/
23 24 ,t
ot! ottt ClobulcDoIII'isrns s€i
26 27 E\rigt
s\ti rjnp
r16,ClCR 1 116,0b00100000 1 CICR,116 1 I
1+ Ewig
2
zu Beginndcs Rituals in Zeileld wild das Poribit RpoRrB.2gclöschtund dann de! zugehörige Pin als Aussans deklariert. In de Zeilen 19-2.1 wjrd drfür s6orst, dass INT2 von enlcr ansieisendenImpulsllankeau8gelöstwjrd, jndcm Bii Isc2 in RegisterRMcucsR Seselztwild. Die Befähigunebestehtnul. daxin)durch das SetzeDvon Bjt rIT2 in RegislerR{cR exierne Da der Inicrrupi von eineraDsteigenden F]tu*e ausgelöstwird, mnBB Interupts 2 zuzuLassen. in Ruhezusiendden Wert o haben. Der SWI isi danl weiter nichis als diesemBit P0RTB.2 denwcrirzugeben,wieesauc.himMäkroindenZejlen8l,rcalisieriisi.DieISRdesINT2 mii eincr falLcndenImpulsflankewieder lterbei. in den Zeilen 5 d füh der Ruhezusi,and Es gibt noch weiterc Mög1i..Lkaite[, einen SIV] zu simulieren. Eini8c bcruheD ebeDso wie INTX darauf, dass oixe Eineängsschaltung nicht nur ouf ejn cr'lorncs Signal reaglert, sondern auch voln Prozessordurch die Umschaltung cincs Pnß ezeugt werden kärn. Das ist z.B. bei der ptr ciange inteüupts soJ mit dancn enige Controller ausgerüstet sind. Es gilt aber auch beim inpu, captve intP;rtlpt eines Time$, der vom Prozessor selbst durch Manipulation des Pins ozcuet werder kann, der dä,s input' cäpture auslöst. Nicht immer mu.ss abd aiü Prozessorpin geopfert werden- In AL schniti 5.2.3 wird gezeigi, wic bein ATtiny2313 der counüer overflow jntc[upt' des USI als SM verw€ndet vcrdcn kan .
44
11.6.Die se elle Schnittstclle
4.6. Die serielleSchnittstelle Dcr Daiensenderder sedellcnSchnittsi€llekann zwei lüterrupts auslösenDcrcn Untcrschiedespielen aber r dän eine Rolle, wenn fiir däs Sendenund Empfansen eine Bcmei sameDatenl€itungvcri'endet lvird (nalfduplx). RUDRcrzeügt.Das UDREIn di€serVariantewird ein Intenupi bei loeron Senderegister vurde oder sein nie ctvas hineingeschdeb€n ist teer, wenn noch Senderegister wude. des Senders übertragcn in das Schiebocgistü Inhalt znr Sedalisicrung also für empty". UDRE st€hi 'RUDR Birrahm"nrrdnr s.r"ler '"" r' TXc Li1 Inr.rruprwir.1prrpugr.w. nn d' r kornplcrrF ans dem Startbit, denDrtenbits, möglicherwoisc hat. Der Bitrahmem bcstcht scn traxsmissioücornlloto, de Stopbiis. TXC beduttct dcm Paritätsbit und ans aus dor Sendebefehl ist vollstündigausgetührl. Dic suraueXenntnisdeöZoitpunldes,an welchendie Dlrcuülrung desSendobcfchls gea.rbeitet wird, wann alsofür cndct, ist wichtig,wenn mit dem Halbduplexverfahrcn .lie dirckt äch gemeinseme vcrwendet wird, cinc Datenleitung lcn und Empfäügen Sc werdcnnluss.DazulässensichbcidcInteuLtPts denl Sendenauf Dmpfanguulgeschsltet um ci cn Sendebelehl cinzulcitul, und TXC,um dio Dtrtu eitun8 umz nutzen:LTDRE. schalüen, wird, wur Der Daturcmpföngerist n\r ztr einun Interrupt fähig, dcr 0ngestoßen in däs Dnpfnngsregistelübertrtg()l Daten vollständigvom Empfang$schicbcrcgisijer MoncheControllerbesitzcnzwci scrielleSchnittstcll(j|.Dicsekönnennicht nrlr &uf troditionclleWei6egenutztwcrdcn,abo die eine Schnittstclleals Datenkanolfiir den Monitor, die and€reals Dotcnkanalfür di€ AN'cndung. In Abschnitt 4 6 2 wird z B. vorgeschlagcü, mit cinor scriellenSchnittstclhoinc Hiitergrundprozcss&ufzubauen. 4.6.1. InterruptgesteuertesSendenund Empfangen Die Verwcndüneder serielleDSchnittstollc üit Polling,d.h mit Abfrager der relcvonten Statusbitsin einer Progrsmns(hlcifc,ist sehrinefibktiv,l)csondersbei geringcron Biträten. Z.B. badeuteteine Bitrato voü 9600 Bit pro Sckundc,.lassein Bii in ctwo ein(I zchntel \,Iillisekundeecscndetoder empfangenwordcrrkann Ein typisdrcr Biiilihne]l, der äus zehn Bit bcstehtlrr,wird bei dicscrBituaie in eher Milliscku de ecsondet.Nacheinemgoscrdate Byte hat der Prozcssordaherbei einerTaktfrcquenz von l6MHz nahezu16000Täl> 8) l= ( (bS0Snd+2+nbS0SndQ)>> 8) t . n e s s a g e ' Q u e u eb s o s n d u s b e r s t r e i c b L S e i l e n g r e r z e " ?, ll /9
4o
,endlf ) >> 8) .:if (bsoRcv >> a) l= ( (bS0Rcv+2+nbS0RcvQ S e i Lengrenze-' b S o B . v r e b e r s t r e i . b t .Dpssage "Queue
4.6. Die seüelleSchnlttßte e 1'
.CSeg Dic Initialisie!ürs.Der Inl]slt von 116bcatillDi die Baudraie.
ld Solni:
push
r30 r31 r16
2 2 2
Dsc Rir,al (für Sender und Enpfinee,
clr
19 20 2! 22
ldi 25
tdi 1di
28 29 30 31
call ldi ldi 1d1 call
33
Pop Pop pop
35
1 r30 I UBRRII,I3O 116 1 UBRRL, 1 UCSRB,r30 r30,0b10000110 ! 1 UCSRC,'3o r30 , Lol,{(bsosnd) 1 !31,IUCH(bsosnd) 1 116,nbsosndQ 1 4+ Queu€Inl r30,LoW(bsoRcv) 1 r31 , HIGH(bS0Rcv) 1 116,nbsoRcvQ 1 4+ Qu€uelni 2 116 2 r31 2 r30 4
RusRF-LI=t16
l Siartbit,8 Datcnbit,l Stopbjt
initiux$eren SeDderschLanse
iiaLisieren Emplänserschlausei
Einsch.lion,lcs Sondۧ
,7 SosndEinr push in ,6 ori 9' out l0 poP 11 fet 12
r16 2 1 r16, UCSRB r16,0b00001000 I I UCSRB,r16 2 r16
+ r RucsRs.TXEN
Ausschalicn dcs Sondeß
l5
SoSldAüs I
push
.t.t
ia
li
andi
/16
O1\a
/,'/ ]8
PoP tet Absen,la,
S0 rite:
le J, 51 52 5J Sol,ir1: 5,1
r16
2 1 1 1 6 , 0 b 1 1 0 1 0 1 1 11 1 UCSRB, r16 2 r16
atres in 116 dbclaobonrn
push Pusb ldi ldi calt btva
* o RUCSRB.TXEN
ayt"e
2 r30 2 r31 130,L0W(bS0Snd) 1 131, HICH(bsosnd) 1
z - Adresseder Scnderschlan8e Sendcrschlans€- ttu
Sovr1
47
1. Inteffupts Befithiguns des Senders
55
pop pop
r3o,ucsRB r30,0b00100000 UCSRA,r3o r31 r30
1 1 1 2 2
ro 116 r30 r31 Io,SREC r30,L0{(bS0SEd) r31 , HIGH(bsosnd) Queu€Cet lJDREhdl2 UDR,r16 SREC,Io r31 r30 116 f0
2 2 2 2 1 1 1 a+ 1/2 1 1 2 2 2 2 4
Dic ISR dG Scnddihtefüpt!
61 LrDREhdlr: pu6h 6e Push 6, Push push 6l in 6t ldi 66 67 IAi 68 caII 69 breq olrt 70 7? LrDREbdllr out 72 PoP 73 Pop 't4 Pop 75 Pop '16 rer,i
gtatusbituretten z - Adre$seder Sendercchlange h6 - SenderschlmCe , = r falls Schlongo lacr ahend€n Statusbitsrcstauderen
Enilthigung des SoDdcrs
z UDREhdl2; in 7a andi 79
80
01Ja
rJmP
!3o,ucsRB 1 r 3 0 , 0 b 1 1 0 1 1 1 1 11 UCSRB,r3o 1 uDRrhdll 2
- o RlcsRs,UDRIE
A b . c r d i r d , r H o x ^ d , , r n b l ,h ' w n L l L ' . b , . , . " . d , r _ o { l , q g e l q . e n B y r . ö
El sovlrlr€Hsx I Push 82 Push 8,9 nov 8l slrap 8.t ardi ,6 cpi 87 br10 aa subi subi 89 SollrHxl r rcall 90 mov 91 ee andi 9J cpi 9l brlo aubi 95
4E
116 rt7 117,116 116 r16,0x0F 116,10 soltrHxl t76,256'7 !16,256-48 Sowrite 116,117 r16,0x0F 116,10 sollrHx2 11,6,256-7
2 2 I I I I
I I
I
r 00, so wird n ab8esandt,um einc wciicrc Tcilarbeit 0.nrustoßen. abg$andi,,dar Vorsans also absebrochen.
Abbildung 4.2.rScndcrund Empftinger€ind zu verbinden
Der Vorsms ken allseniein so beschriebenweden: Der HiniergruDdprozcs8 rvi.d senau füDl mat aufgerufeq uld ruft seinerseitseine gewissePmz€duf ouf) dcren Adr$se er de. Vdiäblen rN€st ent müt. Welche Proz€duren aufgerufen werd€nj also der ArbeiisiDhalt, hÄngt alleiüe von der Inilialisierune uDd von den Prozcdurcn selbst ab. Der anfsebaute I'IechMismus isi demnachsehrvielseitigeimeizbar. Die Prozedurenenthalten natüllich alle den Sortiervorgang,der darin besteht, dic beiden der Prozedurzus@rdnetenBytes des Vekiors zu lesenjzu wrgleichen und sie dann an die jeweilsmdere Adrcssezurückzuschrcibcn. falls dd zweitekLeinerist als daeerste.Da ist der Inhali der Tejiaufaabe.Die vier eßten Prozedurenladend@n noch die Adresseder nüchsten Prozedur in die Zutands@iable. Die fünfte ändert stdttdessen den Wert der Svnc,hronisationsvadablervon 00 auf FF.
60
t17 Det Analoe/Disitalw,n llet als HintPls|undpro'nss kmn irgendweldreüdere Arbeit €rlcdigen,waihrendder Hinio Der Vordergrundprozess gruDdvorssngabläuft. Er prüft an geeigDetcnSieller, ob dcr lvert der Svnchronisationsve ab Die riablenverändcrtwurde,und ist ds .ler Fall,so scLalicter die seriellcSchnittstellc siDuliert Wdteschleife lll durch eine lsi ab Zeile Arbeltd€sVordergundprozesses iöi nicht an di€ sdielle Schnitistellegebundmundsieist vieltältig Die gezeigrcMethode atch SPI v€Ncnd€n' wennsleich nic'ht so univer ließe sich variierbäx. Beispielsweisc nicht so stark schwänkenkömcn $'ie bei Inicrrupts zwischen sell, da die Abstihdc Abschnitt g€zcigtwird, kmn sogar der im dichsten Wie der sedcllenSchnittstclle. $'erden einseseizt Analog/Digitalwandlcr Im Prinzip ist cin im Hjntersrund ablaufcnderZustandsaütomat(siate nracl nc) vorhu d€n sind' realisieriworclen,nur dässkcinc €xplizit€nZustandsdeskriptoren
als Hintergrundprozess 4.7. Der Analog/Digitalwandler Dcr Analog/Digitalwandlcr(ADW) bl.a]rcLizur Abricklüng eiter Wandluügoi c Zeii f-. nach der ci InLeüupt crzetgt wcrdc kann Mit der ISR dcs ADW liisst sich realisicrcn,der imncr dann dic Xontrolle übcr innt, folglich€in Hi tergrundprozess cinc Laufzeit i. absolvicrt wenn dl)"sHäuptprogralnmoder dcr Vordergrrrndprozess dcr eine gowisseAufSäbc hat. Drß Hauptprogrünm stößt dcn llintergrrrndproz€ss, zü löscnhut, cladurchon, das$cr cine Umwandlungeinlciict. Nach clcr Zciij i'" wird aufgcnfcr, erlediSlciren Teil scinerAufSobcund Iö$t cine der Hintcrgrundprozcss zuriickgibl weitcrc Umwanclhmgäus, chc cr die Kontrollc an da.! Houpüprogrr,nrm Nach dcr Zeit t'* wird er erncut äufgerufbn,arbeitet an scillerAulgtrbe,leitet wioder scincAufgobocrfül]i' scht tet einc Urnvandlunscin usw.Hot dcr Hintergrlrndprozess cr don ADW ab und signalisicrtdem Houptprogrammdas Ende scincrArbeit Als ein konkrctcrFall sci oin ATmeaa32sngenommcn,der mit cincr Taktfroquenz von 16MlIz ]üuft. Der UmwäüdlungstAktwird alß dcm Svst€mtoktdurch V)rteilring gcwonnen,dor Brößt€Tcilu gstaktorist 128.Do fiir eine Umwondlung13 Unlwandlungstakteorforderlichsind, ergibt si(ih /* = 104!s Es ist noch ein Sondcrfallzu beachien,d()lü die erstcUnrwandlunguachdemEirßchalteDdcHADW d0ucrt 25 Takte. was auf f- = 200/rs filhrt Aus diesenZahlß und d€r gcfordertenBclästungdcs ergibt sich, in wicvicl TEilaüfgabendie voII] Systemsdurch den HitrtergruDdprozess zu laistendeArbeit aufzuspiltenist. Wird z.B. verlarrgt,dms dolli Hiniergrun{:lprozess zuzutcilenist, so sollte eiDcTeilxür €in Zclmtel der Ccsä.nltzeit Hintcrerurdprozess aufgabein etwa 10ps beendctsein. Beispielwir.l die Ber.,chnungder HexadezimdldarAls verällgemeincrungsfähigo6 stelluneeinesBytcs g€wählt. Die Berechnurrgselbst suegerielteino Aufteilung des Vorsang$, ntimlich in die Bcrcchnungder Darstellungdes unterenund des oboren Ahnlich wie in Abschnitt 4.6.2wird ein Züstärdsautonätaufgebaut,in Bit.1uäxtetts. dcn die Adressc der Zustandsfunktioncräls Zustandsdeskriptorddienen I 9 ., I
. include "nakros. avr" .lnclude "n32def.iDc" .device ATnega32 aseg
61
4. Int'effupts
Der Deskriplor des akiiven züsian& (die Adress€ seiDer Zustan&funkiion)
r vBzhzus:
. byte
(,, z € {4, B}
2
Das zu konye ierendc Bytc und Beincbeiden Hexadeznrdlziflern
6 bBzh: 7 cBzbfii: 8 cBzhlo: f 1, -ll 12 Die ßln d*
.byt€ .byte .byte . include . include includ , includ
ö ht he
1 t I [vecn32.avr" "tinero.avr"
ADMnterrupts
1t ADChdlrr 1.1 15 16 l7 18 .re ADcbdlrl: 2a 21 22 ,9
push2 la push lds lds ijnp pop o1fi pop2 rer,i , include
r31,r30 I3o,SREG r30 !3o,üBzbzus r3l,ctBzbzus+1
I 2
2 2 2 2 1
r30 SREG,r3o r30,r31
z*C.,ze{A,BI I, aDsplins€D,a € {A,B}
ivech32.avrn
Dic Zßiandsfunktlon lil! Zushnd A: Konvc'sion do! oboron Biirll,Edolls
2.{ BytzuH€xA:]ds 25 evap 26 a^di cpi 27 brlo 98 subi e9 subi ,, ByZUH€A1: ,./ sta .9, ldi 39 sts q ldr .95 sts
2 r3o,bBzh r30 1 r30,0x0F 1 130,10 L ByZuIsAl L/2 130,256-7 I 130,256-48 1 2 cBzhHi,!3o r30 , LoW(BytzuHexB) 1 2 uBzbzus,r3o !30,HIGH(BytZ!x€xB) 1 rBzhzus+1,r3o 2
Einleiicn circr wcitcron Unwrndhns
37
rjrop
62
lla > l0l Ja: in Bcrcich'A' bis 'r' lifien rso*PA+30 ÄAabspeichern + (a lrBzhzu6
rnalos n' {ligital
ADCSR,ADSC ADchdlrl
Di€ Zustandsfunkiion lilr Zusiänd B, Konve*i.!
,8 BytZuHexBI lds .r9 andi .p\ la brlo ll subi l, l3 ByZuHeBl: subi
r$ + b loo F /r^ = [b/16]
r30,bBzh r30,0x0F r30,10 ByZuHeBl r30,256-48
1 2 d.s unrer
1 I L/2 1 1
rso*PB=0mod16 IJB> ral Ja: in Berei.h 'A' bis 'r' liften rsoepB+30
a.7. Det AnaJos/DisitaJwandlet als Hnrtutsrundprozeßs cBzhlo,r30
s]'g
.14
^bschdlien des ^DW lnd Entfähisune seines lntcrr{ng
r30 ADCSB,r30 ADChdlrl
clr rJmp
,17
StS StS ldi
5,1 JJ
sta ],di
t 2
2 bBzb,r16 2 f17 1 tL7 2 cBzhHi,rlT 2 .BzhLo,tt7 1 r17, LoU(Bytzul€xA) 2 uBzhzna,tfT r 1 7 , H I C H ( B y t Z u H e x A )1 2 uBzhzus+1,r17
sts 18 BytezuHex: .19 Pustr cl': t0 51 59 i,
I
Ä,r- 00 Äg*00
ArNwahl dc! Rotcrcnzspdnnuq un(l des Kdnul!
!17,0b01000000 ADMUX, r17
1d1 Eirscl'rlnr
dei ^Dw,
aio B€föhiEuns sci're. IntcrNDt! trn(l Einlciton ohrer Un{andl'lrtl
ldi
poP ^nnrn
r17,0b11011111 r17 ADCSR, r17
1 I 2
(lcs S!.pol$ nrd globolc Roflll,igune
,9 start I 0.1 6' dd 67
ldl out ldi out s€i
!16,101t(RAMEND)
1 SPL,r16 116,H]CH(RAMEND)1 1 SPIi,r16 I
IDiiiolisioron der sericllon Schniltstcltc ur
ldl call tdi caLl call
71 79
rles sericllcn LCD-Displovt
116,250 0Col1lalt
1
wArteauf seriellcsLCD-DisPlaY
4+
S0Ini. S0SndEin
Eil Tesi vü.l du'cl'gefüht
1t, 75 l,larte:
78
1di call lds rst breq lds call call
r16,0xF1 BytezuBex r77,cBz}]Lo r17 llarte 116,cBzh1li Solllrite t76,r17 Sovrite
r
ö=Fl
4+ 2 1
KonversioDcinleiten auf Ende warten
r/2
63
89 Ewig: Dds Hauptprosrammund dcr Hintergrundprozess kommuniziereniiberdie Bytesjn den Zeilen 6 8. An der AdressebBzhwird dd Bytc ö abgelegi,dess€nHexaderinialddstellung16p^+pB berechnetwerdensoll, und an den Adr$seD cBzlxi und cBzblo werdenvon HirtergründprG zcssdie beiden ASCII-Zjfiein äa : BA + 30 und äB = BB + 30 der Darstellunggesp€icheri. Ds Byte mit der AdressecBzhlo dient nochdaznj das EDdedcr Berechnungzu sigDalisieren. Es wird vor dcr Bcrechnungnit 00 belegt,dle Berechnungist dann voLlständisdufchscfü]irt, sobald 00 von eino Hcxadczimalziffer €ßelzt wird. Bei der B€rechnungwefdenzwci ZuständedurchlaufeD.ln erstenZusitud A whd dje höherwerljg€j iD zreiten Zfttand B die niederwcrtigcncxadezina.lzifierb€stinni. Die Berechnunscnvon Zustdd A werder ir dessenZüetandsfutrktionla iD den Zeilen 2l J7, die vor Zustand B in dcr Zutandsfunklior lB ilr den Zeilen Jd-17 ausscführt.Do aktive Zutand {ird dtr.ch dic Adrcssc(a von la oder durcI die Adresse(l] votr JB in dcr Wortvadablcn mit der AdresserBzhzus in dcr Zcilc 5 definier| Dje Berechrüngenwerdendürch das UntcrpxograNlr Byt€zd€x ab Zejlel, ejngeleitet.Das in 116 übergebereByie wird in die VariäblebBzhkopicrt, die Varjrblen cBzhlo und cBzirsi wcldeDmil 00 belegi) urd die VarjablelBzhzus wird nit dcr ^dlesse der elsten Zust1trll$ fLrnkiionsciadcn.Es folgendje AuswdhLder Referenz$paDnuns und dcs Kanals.Anschlicßcnd {ird der ADW eingcschflltct,sciDlni,arlupl befähigt urd eine Umwandhmgeineelcitet.Das iloupl,prosramlnkam sich dann and$cn Vorgör4cnwidmen. Die -ISRdes ADw-Iniermprs be€inrt ir Zcilc J3. Sie vcrttndeli rso, rsl und d&5 Statusre gisicr, dic lDholle dj$e! Regisierwerdendehalb bci Eintritt in dc Stapel geleliet uud bei Ausiriit von dahar resl.aulieri,. Die ISIRlä{lt ltighicr Z in dcn Zcilcn i6-J7 rniij dar Adrass€ dcr &kiivcn ZustAndsfunktio u d splirlgi diescän. Sie nft sic nichi auf, soudcm spriugi sic än, un Stapelplatzund Thkizyklcn zu sparen. In der Z8tandsfulktioD von ZustondA, dje zuersi,dufgenrfenwird. erfolgt zntrdch$idie BelechnuDgdc! Hexlrlezinalrifier dcs obcrcn Biijqüarte!ß. Doüu wird die VarjäblevBzhzE in dcn Zcilcn 32-35 lit der Adre$e der Zustandsfunktiondcs nÄßhslenZusla ds B gelden, bcvor ciDcwciicrc Umwoddlungdurch den ADW eingelctd wird. Bcim ür\stcn InlerruDt wird folglichdic ZustandsluDkl,ion von ZustaüdB aDgesprungenj die osi dic IlcxadcznnaLifIer d$ üielen Bitqnartctis bcrcchnclund daüa deü ADW abschälteiund seinenlnicmpt eütlithist. Da, Abspeicherndcr Hcxrdczimalzifcf in Zei]ell sis[alisielf den Hauptplos.amm dos Ende de! Berechnuns€n. Dic Aufgo.bcnteilung1ür €iDenHiniergrundprozcas ist nidrt imner so ofibnsichtlich ivie h dn,soll] Bcispicl. Man kann es sich äuf jedeu Fä]l cinfach lnodrcn und prce.rnpt'jve multiiaÄkrrrq äus Absc.hniti 5.3 oder äus Xapiiel 6 eins€tzen,dia Aufgabontililung wird darn vorr SFtan arzwungcn. Die iD djesem Abschnitt gezeigtc Nlathoda ist idoch
4.8. InterruptgesteuerteEEPROM-Programmierung Dic Prosrämmi€NnseineseinzisenBytes im EEPROM daucd ctwa acht MiUisekunden.Für einenNlikrocontrollerist dÄseinekleineEwigkeit.$rährenddi$cr Zcit kann auf das EEPROM nicht zusesritrer vcrdcnj Dätürlich nichi prosrammierend, aber ärrch nicht lesend. GlücklicherweisekaDn dcr N{ikrocontroller am Dnde des ProgramniervorgangseinenInterrupi erzeugen. däsMittcl, dio ProgrammjerungdesEEPROX,{S in
ti4
4.8. Int$rltptgesteüerte EEPROM'PrcSrammierünC Hintergrund ablaüfan zu lassen,ist dmit gegeben Ein l€senderZügrifl auf das EEPROM dauert nichi viel länser als ein Zugrifl auf den jedenfallsdam, wennkeineProgrammierunsin Gans ist' folslich Prosrammspeicher, anzeigcnüürde. gibt es auchkeinenIntenupt, dc| das Ende einesLcsevorgangs Das folgcnde Modul enthält Utterprogramme, um einen Bytevektor aus deln Ar beitsspeichcr in das EEPROM zü kopieren, ein Unterprosramm für dcn utuek€hrten Vorgarg und ein Unterprograrnm, um eiu Bytc aus den EEPRONI zn lesen. Hier ibt zunächst die ISR des Interrupts, der das Ende cines Programmienorgängs a.nzeigt. Ldseg 9 pbEepEEP:.byt€ | .byt€ , pbEepRAM I bnbEep: .byte .cseg t d ERDYhdlrI push2 't in pusb2 8 lds 9 tst l, br€q 1l dec 12 sts 19 ,,1 tds r,t 1d6 rd out olr 1'/ adiw 18 sts l, sts 20 lds 2l ldE 22 ]d 93 alrt 2.1 e1ß 2n sts 26 sbl 97 sbi 9s 99 ERDYhlrl: pop2 out J, pop2 3t reti 32 33 ERDYhlr2: cbi rjmp s,l
2 2 t 4 r31,r30 1 r3o,SREG 4 130,116 2 r3o,bnbE€P !30 I ERDYhlr2 1/2 | r30 2 bnbEeP,r3o r3o,pbE€PEEP 2 2 r3l,PbEePEEP+1 1 EEARH,r31 1 EEARL,!3o 2 r31rr30,1 PbE6PEEP,r302 2 PbE€pEEP+1,r31 r3o,PbEePRAM2 2 r3l,PbEePRAU+1 2 rt6,Z+ 1 EEDR,r16 pbEepRAM,!3o 2 2 PbEepBAM+1,r31 EECR,EEMVE 1 EECR,EEIIE I 116,!30 1 SBEC,r30 !30,131 4 1 EECR , EEBTE 2 ERDYhlxl
e' 13' tL'
tso + nt n'=a? JarIn[eMuptcntfähigen n rtt'-\ 2-6' Reeen- e' { r €'+ |
Z*P' t!6 + h,, !)t e lit + | e 0! REEoR zurückschrcibcn B' seizen, Bii EEM$E in REECR setzcn dannBit EEE iD REECR
EntfähisendesInl.erupt8
AdrerserIt' und €' und die Anzahl lnterruptswerdendie laufenden Zwischen deneinzelnen Zeiler I -l gchalten An An1äng in den Variablcn in den kopieften Bytes n' .ler noch lichr
1. Inteüupts der ISR wiral zuächst z/ getesenund geprüfi, ob n'?: 0 silt (Zeilen I l0) Gilt n' = 0, so ist entwedern:0 oder es wurden alle 2 Byi€s bereitskopieri, es kdn äbo in die Zeile 33 g+ spruneen werden, m den EEPROM Rady Inte tPd zu entftihjsen, bercr die tSR verlssen wird. Gilt aber n' > 0, so wird t/ - 1 zurückgeschrieben und fortgefahrcn Als Nächsres wird Resicter REEARüber R€gister Z nit der lsufenden EEPROM-Adr6se €' geladerj uschlie߀ndwird €' + I zurückseschriebe!(Zeitet 11-24) Ak weiiere Aktion wird Z mit der laufenden Arbcitsspeichera.dresseB' geladen, danit kann d6 zu kopierendeByte ö, = b"-., 1 in ds Resisterri6 und dsnn auch in d3 EEPROMDatenrcsister REEDRsschrieben werden Die Adresse p' wurde in Zeile 23 auiohalisch erhöht, damit {ird in den Zeilen 2, 2t die ner,eAdresseB'+ r zurückgeschrieben Der Progranmiervorgang wird nun cingeleitet, u.d zwar muss zuerst däs Bit EEMI{EiD Rigister RE€RCund dann i.Derhalb der nüchsten vier Takte duch ds Bit EEIE dies$ Rigisters geseizi werdenrwie es in de1 Zeilen 27 28 auch geschieht.Di€ Vier-Takie-Bedingüngwird siche! aingehalten, da in der ISR keine Interrupts aufireten können welche Auswirkungen es hat, wenn die ISR mit einer lalschen Arbeitsspeicheradresse arbeiten müss, ist klar. Was passierbaberr wcnn die EEPROM-Adresse E den gültigen Adressbercichdes EEPROM8 verlässt? Däs konn eintleten, wcnn 6 bereitB zu groß ist, eber auch, wenn 6 noch gültig, eber € + v für irgendein 1 < l/ < n ds.nn zu groß ist Die Frage lässt sich cinfach beantwortcn. Die Gr6ße des EEPROM8 ist n:imlich eine Zwcierpotenz 2fr, und das AdressrcgisterREEARhat genau m Bits. Dic vom EDPROM geseheneAdresse ist slso immer € mod 2'". So wird z B. bei einem ATmega32 mit
401mod400 = 001 verwandt € = 401 dieAdfesse m = 10stätt der Adresse gesamteArbeit libernimmt,fällt do"s InteEupt' die Da die ISR desEEPROMReady in dasEEPROMkopiert' vom Arbeitsspcicher daseinenBytevektor Unteryrograrnm, einfachaw. Prozedur EepRtoE Es wird ein Byiev€ktor ö = (b0,. ., b"-1) dü Länsen vom Ärbcitsspeicherin das EEPROIVI Input !1?:!6 Die AdlesseB des Bytcvektols ö im Arbeii$peicher r1€Is Die Adr€sse6 einesBytevekto$ € im EEPROM Die Lä ge n d€r beiden Byievektorer Dle ProgramnieNng des EEPROMs mit deln Bytevektor b wird eingeleitet und lüufl im Hintergrund ab. P.o Byie mussmit etwasmehr als 8 MillisekundcnPro$ammierzcit gelechnei werden.Die ProzedurE€pToEtkäln benutzt verdeD,um das Ende desProgranmiervo4äügs Die übergebener Adresscn welden nichi auf Gültigkeit geplültl r EspRtoE: 2 3
sts sts ets
5 6
sts abt
66
pbEepRAM,rl6 2 pbEepRAU+l,r17 2 pbEepEEP,rl8 2 p b E e p E E P + 1 , r 1 92 2 bnbEop,r2o 1 EECR,EERIE 4
€/Fe P'-B n'*n Befähigungds Intedrupis
4.8. Inteüüptgesteltette
EEPROM Pngammierutg
Das Unterprogranm kopiert dje in den Resistcrnüb€rgebenen Adrcssenund die Byreanzahl dorthin, wo die ISn d€s EEPROM R€ady Int'er.upt sie eNdtct. Der Kopiervo€aDg wird dann durch die Bcfä]iigüngdes Int€rrupts en€eleitet. Für dcn umgekeh{en Kopiervorsarsj vom EEPROM in den Arbeitsspeicher, sibt €s kenr.! Interupt, da das Lesen aus dem EEPRONI rit kciner bedeutendenVerzögenng verbulrdcl ist. Das folg€nde Unteryrogranm für diescn KopicNorga.ng besteht cleshalb i m W . s , r . r l j h . n . r L r . . i n e "€ i , t ä c n e nS c h l e i t e Es wird ei! Bytevcktor e:
Proz€dur EepEtoR (€o,...,e" 1) der Ld1lsen von EEPROM in dcn Arbeitsspeicher
Input 126114 Dje Adresse€ des Bytevektorse im IJEPROM 117116 Die ^dr€$e IJ ejres Byterckk8 ö irr Afbcitsspciche! Dic Lönger de! Leider Bytevekroieb Die iibogcbcDcnAdrcssanwerdenlicht aüf GiiLtigkeirgeprüftl / EepEtoRf , , EepEtrl: I i EepEtr2: d 7 I , r, ll r2 13 11 lJ
push4 pu3h2 sbj.c tjnp out out Sbi in st adiw doc blne pop2 Pop4 r€t
rA,t76,!24,r25 126,127 EECR,EEITE E€pEtr1 EEARH,I25 EEARL,r24 EECR,EERE ro,EEDR X+,ro r25tr24,l 116 E€pEtr2 127,126 t25,r24,r76,r0
I 4 1/2 2 1 1 T I 2 2 1 r/2 4 8 4
Laufr eiüe ProgammicNng? Jär warten * 6 REEAR F C REEDR ro+c , nbspeiclem e €€+7 D*n-1
Falls cinc Programmienng in Gang ist, kau! auf ds EEPIiOI4 nicht lcsend zugegrillen werden,daBUntoproghrmn DNssdN Erde enLerPrugaDmierunsersi abwari.D, bcvor es dii, der Kopie besirnen kann. Geprüft rvird dieseBediigurg nit derDBit EEl,iE von Register REECR, das wÄhferd ei@s KopieNorsanscsecsctztist. In Zeile 5 beginni dana.h die Kopierschleifcdamii, d6s das AdressenfegisterREEARdes EEPROMSDil, der huferder Adresse6/ seladenwifd. Das Sefzendes Bii EEREin Register REERC hai zur Folge, d8s ds Byte € dn der Adrcsscc' in dd DaienregisierREEDR des EEPROMSecbrachi vird, von wo es ddtr in Zeile 8 in Resjsio ro gcladeDund dana.h in detr Arbeitsspeicherscschricbcnwird. Die EEPROM-Adresse€7wird dann um EiDsdhöht. Däs Untcrproeramm zum Lesen eir€s einzigen Bytes äus dom EEPROM entsteht aus dem vorisen Uüterproerämn gcwissemraßen durch das Weslässen der Schlcifo. Prozedur
EepRead
Es wird ein Blte e aus dem EEPRONI ausgeleser.
67
4. Int€üupüs
r26:2a Die Adresse€ des Bl'tes € in EEPROM Outpüt Dd Byte € Die übeigebeneAdftsse wird nichi aüf Gültiskeit geprültl I EepRead: 2 3 I 5 6 7
EECR,EEIiE EePRead EEARH, t25 EEARL,r24 EECR,EEBE r16,EEDR
sbic rjnp out out sbi iD teL
1/2 Läufi eine Progsmmierung?
1
Um zü prüfcn,ob der von UnterprogrammE€pRtoEeingeleiteteProgrammiervorgaDg beendeti6t. mussn/ in dcr Zeile I der ISR ctalaufgctcstet\veldcn,ob n/ = 0 gilt. solltc obcr be$er mit dcr folgendenProzedü durchDas kann zwor direkt geschchen, gefithrt werden,Ist nmh ihrem Aufrul das Nullbit, im Stotusrcgistergesctzt,so ist dasKopierenabgcschlossen. r E€pToEtI I 3 ,l ,
push lds tst poP r€!
r0 ro,bnbEeP r0 r0
2 1 2
,Flfallst'=0
des Moduls linclct sich in AbDin Beispielfür dic Vorwendungdcl Unterprogramme schnitt 11.4.Dort wcrden dic ]dufendeninncrc W€rte eincsZufallszahlengenerator$ im EEPROM gcspcich€rt.Dcr Generatorkrnn dann in eincmspäterenProgrammlouf vom EDPROM hcr initialisiort werden,cI sctzt damit scirrcFolgevon Zufallszohlen ou6dem voriscn Programmlouffori.
4.9. Der Aufbau von Schleifenmit Timer-lnterlupts besitzt wic jede Progra"nmstücks Die Schleilein der Zeil€n 15 27 desnächfolgenden SchleifeeincnTeit, der kcineproduktivc Arbeii teistct,sondemnur das Funktionieren der Schl€ife selbst ermöelicht lm Progranm sind das atürlich dia Zellen l9 2l"lie beitragcr' nichtszu der von den übrigenZeilendurchgeführtenSummenbilduüg 7 e .9 I 5 6 7
68
vbx: vbY: vbz: Add:
.dseg .equ .byt€ .byte .byte . cseg ldi
nb = 10000 nb nb nb r24,LOV(nb)
z.B. ATmegal28 mit *ternem
1
r26:2a jst Schleifenzä.l er n
Speichel
1.9. Do
8 I 1A 1/ 79 13 rl 1, Ad1: 16
ldi 1di ldi 1di fdi fdi ldl ld fd
von Schleif.n njt
Allbau
TinetlnteüDpts
r25,HIGE(nb) 1 I x 126,Loll(vbx) "4(ro) r27,HTGH(vbx) 1 Y r28,L0t{(vbY) 1 "4(ro) r29,i1IGH(vbY) 1 z - A(,a) r30,LoW(vbZ) ! 131,HIGH(vbz) I ro,X+ 2n 4+ri 2n r\ + yi r1,Y+ fl ro + ri +Yt {,r1 2n zi+ L+lji Z+,TA l n tr+n 124,1 r25,0 2n-1 ttallsn > 0 zun rächsict Dur(ihhuf Ad1
verbraucht(tf Tokie, vom letztcr SchleilenclurchlufcilrDcr gcsämteSchlcifcnkörper benöiigt vier Taktc, das Dü unprodüktivc?)il dcs Schlejfenkitrpcrs mal abg€sehan. höch$tc Goschwincligkeit onl()ünllt,lobni l\rcl}ll cs auf sind 36,4% dcr Gcsamllaufzcii. stchcnclazu Tcils Dcnr Prograrnmnircr unproduktiven sjcholsodic Bcscitigungcliescs zur v()Ifiigune: progränmic*cchnischc Mjttel folgcn.lc,rcin $onderndic . DrlSrodil€bte Mittd ist, übcrhauptkcincSchlcifczu progamüricrcD, Läufzcit Da"q crsibt cine zu wicdcrholen. Zcilcn l5-J7 10000-mal Bcfdrlc in dc1] = Bci n 10000 sinclda.s 4a Bcfchlsworrc beröligl. cs wcrdcr aber von 7rl Taktcn, großc Meihodc lür n ist dicse Progrrunmbyies, odcr 80000 40000Proßrammwortc wohl realitätsfcrn.Iiir nicht allzugroßc7, ist 6jeiedoch.hlrcl*rü durchführbor Schlcifcn, ülld auchschondurchgeführtwordm, b6oüdefsbei ticl gcsollDchtelten ja Takt ankn nlt ärfjedeD irnerstcn Schlcife tatsächliclj welchm cs iu der bei . Die McthodcaIlI arderenEndcdosSp€ktruDN,dio proktiscltimmer durchfiihrbar zr verdoppchu d deD ist, bcstdrt darin, dennützliclxn'Ieil desSchleifiinkijrpcrs Dic Korrcktur, clie Schkrifclvählernjcht um 1, so dern um 2 hcruntorzuzählen. üach dcIII Dufchlauf dcr Sclilaifeb€i ungerrxlon?r ötig wird, fiillt hier nicht Ut + a+, del ins Gcwiclrt. Die Anzahl dcr 1'aki€ ist dann nx \'Ves€ntlichen uproduktive Anteil bcträgt also 22)2 %. . Diese beiden Extrcmo sird nätürlich ü1r Beispieleder flllgomainenMethodc, I mal zu wjcdorhola und dänn d.nr den produktivcnTail .le3Schleifbnkörpors Schleifenzählcr un k herunierzuzlihlcn.Das ersibt ltl Durchläüreder ncudr Schleife.aber es blciber n mod k Durchläufeder alten Schl.ife übriß, die cxtra aüsgefüht werdonüüssen.Aus dics.'n Grund wird oft fiir /r enle Zweierpotcnz gewählt,weil dan nmodÄ bcsondcNschnellund cinfach berechnetwcrden l€nn. Dnr Gcsämtlaufzeitist oftcnbdr '-
;
" [;]
'
, , , 1 o 1/ r
kmn dieselbe Sc.hlci{endurchläufen Au{ dcn Restteilvon n mod A ursprünglichen Dicser RestÄ/ angervandt werden N{cthoderoch einmal mit enremkleineren
69
4. Interrüpts wcrden Darn berechneisich der prozcntuale teil soll aber hicl vernachlässigt unpmduktivc Anteil zu 4
luo' rT- ,t
clergär nicht mchr von sonderDnur nochvon A abhängigist Bei k = 16 €rgjbt ", da.sz.B. 3,4%. Die vcrgrößerunedes Pro8rammskäim in vielen Fäl1cnsichcr noch tolericri werden. bei Schlejlereins€sctzt . Dic Zahl do Tlicks und Xnij{e,die zur Emzienzsteiscruns Es seinür nochdcr Einsatzvon Spnngtäbel1ul {crden können,ist unbeschränkt. durch dassdic Schlei{c möglir'hcrweis€r . Nicht vcrsessenwerdendarf atleLdines, könganz w€rdm vermi€dcn einenÜberganszu einemarrderenRcchenvefahren ]nöglic'hcr$€jse n€n. Däs ist z B bei obiscr Sunnürbildung nichi i!öslich' abcr isi ja die Sunl enbildungüb€rhauptunnötig. Das ein{äcltsi€Bcispjeldaftu iöt
n\n+1). I + 2 + . . . + = ;-programmte0hnische Mcthoclendiskul'iert Tatsächlichbietor Bisherwurdcn nur rcnr c[irc]rihren Bcfcl ssalzMöglichkeiton,dasVcrhahenvon Schlciabervidc Prozessorcn und dc Es liegt z.B nahc,daslleflmtelzählm desSchlcifenzählors fen zu vcrbessern. Bcfehl z B der Dazu zählt Sprungin einen Belehlz snmmenzufiNsen clar uf fol8enrtcn en Horunlerzül weldxxn das alnz dcsZa0. Am weitcstcngehi licr clerdsPlC33F,bci dcs prrrallel zur Abaxbcitu'g Proun(l der Sprun8vom Prozessor d;s Schlejlenziihlers wcrdcn.l9Drvon kann cin AVR-Prograrnnieler vor6enomrncn duktiven Schlcifcnteils dl{xdiDgsnlu träumclr. Nu Ücsitztaber cin AvR-Mikrocontrollorinindostcnsei m Timcr, de! ein lö-Bit\.gister IWaLI^Lz\tr CPU hcrrlufzählenu d die CPU unterbrcchenkonn,w€nncir Desti;mler Wcrt eücicht isi. Dic Uülerbrcchungmiisstegenouüachdcm leiztm Schlei fcrbefchlcrfolgcn,der clannnatüriid] cin unbcdingterSpruügan dcü Schhifenanflrng d;r ISR wtuc cs, den Siirrpelzu rmr8anisicrcrund dcn Befehldireki hi isi. Aufgäbe -schleifc ZoilcD olso die kön len rnzuspringclr.In dfln obigenProgramr*jtück ter clcr 19 2, gcsifichm wer.leDuu.l d€r Bofchlin Zcilc 27 würde'lurch d€DBcfcl rjnp Ad1 Vorgtr g ist tatsäclrtichdirekt in cin Progalrm Dioserim Korj nktiv beschricbane umsctzbar.Dic einzigonicht ganz leicht zu beantwortendeDage ist dabei, wia der Timar zu programmicraxisi. Natürlich ist klär',da.ssoütput'conpare vor$endctwird' abcr nie wcit soll d(I Timer zäli€n? Es ist möglich,dassdie Beant$ortungdieser Ftäg€vom Prozessortypabhhgt, es ist äho angcbracht,cin Progranm zu schreiben, das den gonäuenWcrt ermittelt, bis zu dem dor Timer hochzählon uss, rrn ernor r"rrekren4Lb"uch'1,r S'hl.ii /u errri'rr' Das folgc cleProgrammsctzt .liescIdee für cnreehfä'h' Schleifcüm' mit der dic Konekth;ii desProsrammsohne sroßelvlühescprültwcrden kann Es sind aber alle (lcr Meihodevorhanden.dasPrograün kann dcslülb leicht ireseDuiclenDestanr:lteile werclen l,erall8crneinert . include i'm12adef.inc 1 losiehe dazu die ausführli.h€ Erört€inns ir [MssPl AbscLlitt 3 1
70
4.9. Der Afoau
2
.device .dseg .orC .includa
4
von Schleifenmit Timer-Inter upts
ATm€ga12a 0x1oo rrvecnl28.avr"
Die lSL des output rcnpare j"
6 0clAbdlr: c1r 7 orrt pop 8 poP e jnp 1d .includ€ ll D*
r,
r10 TCCR1B,I10 r11 r10 Schtend "v€cn12aavl"
1
Timerl anhalten
I 2 3
Fln,snruns id de Progrdmb, A{lban d$ stdpols
ldi
stairr
?1
ldi
!16,L0W(EAMEND) SPL,r16 r16,HICH(RAUEND) SPH,I16
1 1 1 1
Censr€llos Rttudl rnd Belahisün8 dcs oulpui doDprrc ite..,r!l4
c1r 1n 19 20 2!
r16 TCCR1A,r16 !16,TIMSK r16,0b00010000 TIUSK,r16
von'limcrl,
slobale B€lÄhiguhg
I I 1 I I
Fosilosung dör Zahl dd Schlcifond{rdhlanf. n und d* Zlhl i dcr Tdkle pro Dulchl&uf
22 23
clr clr
25
ngdl = 10000 nTpS - 4 t24 r25
1 I
116:14F 0000
116
I
RrcNn + 0000
TCNT1H,r16 TCIilT1L,r16
1 1
Düs schlcilonbozosenoRihßl to! Tincrl
26 27
clr
29
ldi
rdi 32 t3
1di Die r-nal
1 1 6 , H I C H ( n T p s * n S d t - 31)
oCR1AH, 116 r16,L0l,l(nTps*nsdl-3) 0CR1AL,r16 r16,0b00001001 TCCR1B,rl6
s m: RncRrA
',t - 3
1 1 1 1
Timerl ohne Vorteiler starten
I
zu du!.hlaufen(tr Slhleire
15 schlef: t6 37 Schlendr .t8 Euig:
adit rjIAP trop rjnP
r25.r24,1 Scblaü Eig
2 2 I 2
7l
4. Intetltpts 16Zunächsi die Hauptsache, die S.l eife in den Zeilen 31 35 Sie besteht mr au enlem d a n S ' h l ' a r B i r - A J d i r i . t u b " r p \Ll n d d p n I a ' ü l r . n b p d i n c u n s r l o * rB ü c k q p a n s .l:niiri € AUor D L r ^ d d : t i o n . b " r F hTl . h , p m d s l r l , . u r F ' n r a . h .A r ' z u ü b - r p r ü l F no b d r e 5 L t r ' r r F 'eiier uden)' die Diskussion (siehc aber {urde wirklich DInal durchlaufen folSl'die Ds Progiamm beginnt in Zeile 19 wic üblich mit der Einrichiiunsdes St6pels EB ist EinzusicLlen mögLich Einricnting von Tinerl, soweitdas ohne Rücksichtauf die Schiejfe outp't ist I'Iodus; (CTC) hii normaler Pinftt*tion li d'n Zeilen l8-2' wird dann der An werdenbeflihigt Inteirupts worauf befähigt, Slobal von Timerl cotupate ilterüpt A gewÄhlt werd€n *.a* rr*ale Werte für n ünd t fesiselcgt' {obci n rst beliebis ""ir'ln"ra kann, i aber durch dic Schleif€gegebenist Fernerwird 116:,4nii 0000 itritialisiert co U"ein""n ai" vorbereiaunsen rür dic Schleife Eg {erden das Zählresister von Ti i" i" geiarl'et Wie " nerl selöscht;ds Oc-Resister mii 'n = tn - 3 seladon und dcr Timer selbsl a*s-tn - 3 dcr ricllige wert für RacR jst, wird weiter unie{ gezeist' -u" i"-*u"i"-*t, wiederrerDam wird die Schleifein Zeile 35 betre(en Sie wird neh genaun Duichläufen lvird ab Zeile d dazu konmi' Wie es Zeile 37 fort Laufin ressen,aas Progranrn setzt seincn wird Timerl 'ntqrtP' 'onrDsr" ourp'rl crh d(r Sc}lciL Durctlöntpn deurLich.Nach " "rfolgt ri"d duB dch BcIehL auschqken,di" Adressc,lesna.h erle(liqt"mIntcrrupr ausz'rfülrrcndat u h J $ $ i r d d r ' k r b f t e i n i g L w i c d v l n r I n L e r r u p r s r a - n . lh e r o L r s g e u o m n " n . l hd * r S t o P " l binier die Schl€ifc8$plunsen Es ist darauf zu achten, dass während der Schleifendurchläufe kein€ and€ren Inte upts auftreten können' durchlüufr dic CPU vom Schlcifc anfong bis zum SchlciDas ist klar, denn u"'ralernfalls
der CPU [."ra" -"ftt at r" f"f.tzyklen, abcr der Tilrer blcibt von Unrerbrcc'\ungcn unbceinflusst. Die !}agc isl nlm, wie dic Zahl m bestimmtwerdcr kann,die in RegisicrRocR zu lodenist. ö46 vcrhalten clerTimcr ist in der Dokumentotionnicht so gcnaubcsclrrieben, dossdieseZahl auszur€chncwtixe,cs mussalsomit einemspezieilenProgramm gcsteuert aemessonwerdcn Da eber dic CPU rrnd der Timer von denrselbenTäkl geltcül.undda der ^! in mrNs m ;erclen (der Vorteilerdes Timcrs ist abgescholtct), Messung bci der Nla,ll kann ??1 r'i < Inieüupi beriicksichiiSt werdon muss, ist sicho z.B. voü m = tn - 10 ausgehc. Dic benötigtenDnten iasscnsich zB übor die JTAc-Schnittstellesammeln'die sericlleSchnittstelleist äber cbensoSceignet,wie da^sfolgendcProgrammzcigt I 2 3 I 5 6
. include inclüds .device oseg .org .include
"n128def.inc" "ßakroB.avr" ATmegal28 0x100 "vecm128.avr
Enrus dcr Modulc lür den Gcbr.üch dcr selierbn sc}tttiitsiclle
7 s
include . include
I'fifo. avr" "ser128 avl"
Dic ISR des outpü, conpäd i,teruPt Ä von Tnien
I
72
0cllihdlr:ch
x10
4.9. Der Adbau voD Sclleifen
pop Pop jmp .lnclude
TCCR1B,r10 r11 r10 SchleDd I'vecn128.avr"
Der EinspNns in d8 Prosrmh,
rJ Stdt:
1di ldi
17
nit
Tjmer-Intefupts
1 2 2 3
Autu8u dG Si6D€1s
r16,LoW(RAMEND) SPL,!16 1 1 6 , H I C H ( R AE N D ) S P H r, 1 6
I 1
Dis Ihiti6liei€rung dcr seiiellen Schhitt$lelle
21
ldi
116,25
call
S0Ini SosidEin
1
Ccrurelles Riludl nn,l B€löhlgü8 dB ou.püt en'rdie i,tdrupi,4
22 23 21
clt
26 2',1
out
in
116
I
TCCR1A,I16 r16,TIMS( r16,0b00010000 TtMSK,r16
I 1 1 1
von TinÖr1, sl'hale Bcllhiaung
Dic lnilislGiorüng dcr Tqlichlolf.
ldi cIt ch ldl ldi
28 29 3A 31 3e
r22,24 r10
t 1
!," zählt Testdurchläufe
I
r27,HIcH(4*10000-10) r26,LoW(4110000-10)1
127126*m=tn-10
D6r Beginn dc. Toslschlcifo
,, 34
Tsst I
clr c1I
r24 r25
t
Das schlcifonbozogenoRitnal fo! Tinc.l
JJ 96 37 38 39
clr
ldi
116
TCNT1L, r16 0cR1AH,r27 0CR1AL,126 r16,0b00001001 TCCR1B,r16
1 1 1 I I 1 I
Die tunal zu duthlaurende Schleife
,19 SchluJ: adj.w rjlop .1r nop Schlend: #
r25tr24,t Schluf
2 2 1
Die slobnle Berahisnns (lie lsli wurde nichi nii roti venassenl
l5
sel Dic Ausgahe der Daten des Durchlarfs, n, s, p urd '?
73
4. IDteüupts
call
47 48
call tdi call 53 5,1 JJ 56 57 58
call call ldi call
ldi calL 1di catl tdi call ldi call ldi call
6.1 65 66 67 68 69 7t
116,r27 S0!hite !16,126 SoI.Irite
1 I I
Solirite r16,r25 SoHrit€ 176,r24 Sol,ltite 116,' ' Soi1lrite r 1 6 ,r 1 1 S0l,lrite
S0l,lrite 1 1 6 ,' '
1 1
4+ lt) 4+ 1 I
S0ll!it6 f16,BICH(SchraDf) SOWrits
4+ |
r16,101J(Schlanf)
1
S0\,lrit6 116, '} '
1
t!
Zwci Lccrzcichcn'
'
SoUrit€ 116, J )
I
SolJrit€
Einige WArlcschlcilcn, bis dic Inlcruptu dcr scricllcn Schnitt$lollo vorbci rind
llart6l r
ldi ldi
7.1
dsc brne Der Ab{l'I,$
I
1 1 L/2 1 \/2
der T*isclieire
78 79 breq rjnp 82
r17,100 r16,255 r16 I,lart62 r17 llartsl T27:126,1 t22 Eeig Test
t r/2 2 2
Die TestersänzunAeneind ün dss obige Prograrntu herümgeschdebenwodenj cinc ausführliche Beechreibüng kdtr deslulb enilallen. Hinzügefügi vude eine Schlcife, in der für m systematisch20 Weüe von tn - 10 an ausprobiertwerden.m wird im Doppelregisterr2t:.6 hochgezählt, während r, als Schleifenzähler dient- Nsch dem S.hleifendurchlaüf werden, je wejls durch ein Leerzeicnengetr€nnt, der Wert vor n, der lautendeWeri s von r26i24,die beim Auslösendes Interrupis h den Stapel geschriebene Adressep und die Adresseq des
74
4.9. Det Autbarl von Schleifenmit Timat lntcirüpts (schrend).Die Datensnize selbstwerdendurcheh Doppell@rzeiersienBefehlsder Schleife in denZeilen76 8l diencndazu,abzüwarien,bis die serielleScnniti Die VerzögerungFchleifen stellekeineInterruptsmehrerze!8t. Es sei noch angemerkt,d6s der Volteiler von Timerl abge6chaltetwerde! m ss,{enn dd Verfahrenso funktionierensoll, wie es hier vorgestelltrird. Es kdn ällerdingssein, dass man den Vofteiler benutzeDmus, weil die Kapeiiäi ds Zählersnichi ausreicht,wennalrc ni > 216sili. Dss ist naiürlichmöglich,dochnuss di6cr dannexpliziivor demSiait des Tima$ zürücksesetzi{erden. Bei VeMnden desVofteilerssibt esjedochdie Beschränkuns, ! scinhuss,d.h. esmus gclte! ni mod! = 0. dasszt ein Vielfacheder VorteilerkapMität Man kannesauchso ausdriicken,d6s die Schleifendüchlüufenur noch mod , zu b6timmcn sein. sind. In seltenenFällen magdassogarausreichend Es folgendic vom Progrämm übermiitelten Daten, wie 8ic 1on einem Terminalpro_ gramm dargcstellt wurden, das au{ hexadezimsleDar6tellung eingestellt ü'orden wax. 9a 36 20 27 0E 20 01 F6 20 01 F6 20 20 9C 37 20 27 0F 20 A1 F7 20 01 F6 20 20 9C 38 2A 27 0F 20 01 F7 20 01 F6 20 20 9C 39 20 27 0F 20 01 F6 20 01 F6 20 20 9C 3A 2A 27 0F 20 01 F6 20 01 F6 20 20 9C 38 20 27 70 20 A7 F7 20 01 F6 20 2A 9C 3C 20 27 10 20 01 F7 20 01 F6 20 20 9C 3D 2A 27 r0 20 01 F6 20 01 F6 20 20 9C 3E 20 27 10 20 01 F6 20 01 F6 20 20 9C 3F 20 27 77 2a 0r F7 20 01 F6 20 20 9C 40 20 27 17 20 01 F7 20 01 F6 20 20 9C 4t 20 27 ll 20 01 F6 20 0l F6 20 20 9C 42 20 27 11 20 01 F6 20 01 F6 20 20 9C 43 20 27 L2 20 0t F7 20 01 F6 2A 20 9C 44 20 27 72 2a 01 F7 20 01 F6 20 20 9C 45 20 27 12 20 01 F6 20 01 F6 20 20 9C 46 2A 27 12 20 01 F6 20 01 F6 20 20 9C 47 20 27 13 20 a7 F7 20 01 F6 20 20 9C 4A 2A 27 13 20 01 F7 20 01 F6 20 20 9C 49 20 27 73 20 01 F6 20 01 F6 20 20 und Der erste Datensätzbesagtm = 9C36 = 39990,s = 270E = 9998,p:1F6 q : 1F6. Dio Schleifeist bei m = 39990= 4 x 10000- 10 (wie erwär'iet)noch nichi vollstä$dig durchlaufen worden. Ge6ucht ist der €rst'e D&terßatz mit s = n = 10000. Die nächfolgerdeTabellegibt alle Datensäizemit 5 = 10000in der Reihcnfolg€ihr€s Auftretcnswieder. m
nt-m
s
t71o i
le3E-s--
p
q
id
9C3C
4
2710 1F7 1F6
9C3D 9C3E
3 2
2710 1F6 1F6 2710 1F6 lF6
Die beiden letzten Spälten der Tabelle $ind sorgfältig zu analysiarcn. \'Ian kann ihnen entnehmen,dassbci den ersten beidenDatensätzendie Sc.leifc zwar ihre Aufgabc
verrichtethat, nämlich Reeisierrr5:2a bis 10000hochzüzälen, dassaber technisch sesehendie Schleife nicht bis zum Ende äbseaxbeitet wurde. Denn in der ISÄ wird Register111:10mit der Adress€p des Befehlsgeladen,der nach der Rüc.klehrvom Interrupt als Nächstcr ausgeführt wird. Die Tabelleneinträgeder eNten beidcn Zeilen sasennun p : s + 1, d.h. die Unterbrechunserfolst€ nach dem Befehl in Zeile l2l Da6 Abarbciter der Schleifewurde nach Zeile 42 rnd nicht nach Zcilc I5 absebrG chen. Wenn es atso daxaut ankonmi, dass in der Schleife tatoächlich tn Tä.ktzyklen durchlaüfenwerden,so sind m = 10000-5 und m = 10000 4 nicht dazü seeisnet, in RegisterRocnra geladenzu werden. Wenn aber di€ Unt€rbrechung direkt narh dcm Spruubefehl in Zeile l3 kam, so ist der nach der Rückkehr vom Intenupt ausgeführte Befehl der in Zeile 12, eEgiit dann alsop = g. DieseBedingungist in dcn lctzten beidenZeilender Tabelleelfiillt. Wird folglichm = 10000 3 odcr ?7,= 10000- 2 in dasRegisterRocRla Eeladen,ddnn wird jeder Befehlder Schlaifcgcnau10000-ma1 durchlaufen. Dic Zrhl n ist sicher nicht immer so einfach zü beslimmen wie bci obiscr Schleife. Z.B. hot man immer das Problem fesiizustellen, ob die Schleifeihro Arbcit auch vollständigverrichtet h6t, In dem Additionsprogrammam Anfang dcs Abschnitls könntcman z.B. so vorgehen,da,ssman mit beFtimmtcnTcstdatcnfür i, und 3/albeitet wordenist. und prüft, ob letzte Summezi-l auch wirklich abgespeichert noch Anwcndungen fiir die zähler der Timer finden,dic Es la$en sichsicher anderc progrärnmtechnischer Natur sind und mit der Zeitgeberfunktion 8ar nichtszu tun hagczciglcn mtt hicr lvlethode möglich sein, einen simplenDcbugben,Z.B. müsst€es der ger zu realisieren,dcr es gcstattctcJein Programmunler seinerKontrolle schrittwcisc zu durchlaufcn (singlc sücpp.irg).
76
5. Multitasking Ein Prozessoidist eine Codefolge,di€ von einem Proz$sor allsgeführt vird. Dieser Definition entsprichteinerseitsein vollst:indiges ProgranmJdasgeradeauf einemProzessor abläuft, andercrseits aber auch eine ISR, die einen Interrupt bedient. Ein Prczess ist ein Prozessoid, daseinenprivatenStap€lund einepriräte Teilnenseder Prozessorresi ster besitzt.Din vollsiändisesseradeablaufendes Prosrammist sicherlichein Prozess, denn ihl11stehenjederzeitdie Resisterund der StapeldesProzessors zur Vertüsung. Eine ISR i6t dagegenkein Proz$ö, da 6ieden StapeldesProzesses verwendet,den Fie unterbricht,auchgehört ihr keinepri!äte Registerteilmenge. Da Proz*se einen p vaten Konteü besitzen, können sie nebeneinanderherlaufen, ohnecinandü zu störcn,ja ohnc voncinanderüberhauptzu wisijen.Die ],tuung einer Adgabe, die in viele unabhäilgigeTeilaufgaber zcrfäIlt, kann ohnc Wcitcrcs statt einen einzig€n$oßen Prcgramm einer Mcngc von Prozcsscniibcrtragor wcrden.Kiinncn dies€ Prozessesleichzeitis ablaufen, so l€nn män cr$'axtcn! dms das Aufrndcn dcr Lösungbeschleunigtwid. Aber auch Aufsaben, die in voreinandcr abhihgiec Tcilaufsabcnzcrlcsl wcrden können,lassensich löscn,nrdc jcdcr Tcilaufgobccin Prozcssznr Lösungzug.ordnet wird, doch sind dazu Mechä isnlennötis, dic es scstatte , Prozcssemiieinänder zu synchronisieren. Z.B, kenn es nölig seinj dass Prozesseaufeinanderwaxten,um Zwischenergebnisse auszutauscheD. Auch hier kann ausdem gleichzeilig€n Ablauf der gezogen Prozesse Nutzen werden,So kann etwa ein ProzessPd einenADC abfragen, ein weitererProzessPü kann die entnommenenDaten in einevom Nlenschen lesbar€ Gesiait übertragenund ein dritter Proze66Pc karn die bearbeitetenDaten über einc sori€lleSchnittstclleausgebcn.Dicsedrci Täiigkeitenkönnenzumindesttcilweise porallelausgeführtwerdenrWährend Pl, den zum Zeitpunkt t', gelesen€n Daten$atz bcarbeiiei,kann P" ouf dcn nächstenDatensotzwarten,und P" kanndamii b€schüftigt scin,dcn zum Zcitpunkt t,,-1 Sclcsencn Dutcnsoizdcl scridlcn Sc,hnittstcllc zu iiborgebe (ebcnfallseine überwiegerd,,wärtcndcJJ Tötigkcit). Dic Sync,hroi$icrungdcr drei Prozesse ließeBichrelativ einfach lit Scl anecndurchführcu,äbcr cs gcht nicht immer 60 einfachvon der Handl Es gibt zweiBruüdsätzlich ve$chicdencMöglichkciicn,Prozc$sc oblirifen sjlcichzcitig zu las6en.Die eirreist nattiriich,für jedeüProzesseine eigenenControllcleinzrßetzen. Sird di€ Proze66e nach dem na6t'er-slave-Prinzip volr€inarderabhängi8,Bolärst siclr dieseParallelität mit minimalemAufwand realisi€ren.Da6 ist aber icht der Gegerstand desKapitels. Die and€r€Möglichkeitistj zwischenm€hrorenProzess€nr die auf €inernControll€r ablaufen, so rascl hin- und herzuschä]ten,däss der ,4rrscÄ€tr,von PäIallelität erzeugt wird. Der gleichzeitige Ablaufvon Prozessen wird hier äko rr sirnuliert.Das Umschalten zwischenProzessenkann von den Prozessenselbst auf freirvilliger Basß ausgelöst werden - cooperativemultitasling oder es kann von einer äußererInstaDzer-
77
5. Muliitaslins prcemptive multitasking. Beide Vefahren sind Gegenst:rnddicses zwungenweden Kapitels. Es ßt oft zu lesen, dass cooperative müititäsl -.1 Stapelzei8erausrcuer PIT
Regjsteritrhalte aus neuer PTT
6.2. Das Progantm
65 dd 67 68 dP 7a 71 72 ß Z Sosstart:
pop4 pop4 poP2 Pop out cll: orrt PoP2 ter,i cli
8 I
t2A,t2!,!22,r23 t24,t25,r26,!27 r;28,r29 r30 SREG,r3O r30 TCNT2,!30 r30,r31
1 1 1 4 4 1
Siaiusbits zurück Timer2 zurück6etzen
1 I 1 1 1 1
Zühlerr€gister löscheD
Neuen Pioz€s6 foftsetzen
Dd Riiusl lür Timcro CTC-Modus mii Vo(eihmg durch 2lo
116 c:.r TCNT0,I16 aul 116,156 !d! oüt 0CR0,r16 tdl r16,0b00001111 out TCCR0,r16 dB Corrparc Mticlinrlerrptvon fimo.o Di€tsoläbisuns j.n f16,TIMSK 8r r16,0b00000010 or! 82 TII'1SK,I16 out 83
75 16 77 78 7e 80
Duc Rild
till Tlncr2: C?C.Mod!6 hit VodcihrA
84 8,t 6d 87 88 89 ,, 91 92 9,9 ,l 95 Sosstrtl: 9d
!d! ou! ldl out lds lds tds .pi brlo brne rjnP clr out
CTC,+1024
1 1 1
durch ?10
116,155 0CR2,r15 r16,0b00001101 TCCR2,r16 !3o,PPitSoBRun 1 r31 , PPiISoERUD+ rl6,nPitsosRng f16,1 SosDoze Sosstrtl 0c2sta!t 116 TCNT2,r16
Die BelÄhieuns d.s Co.n de M,i.n
9'98 Mjlljsek bei l6MHz
1 1 | 1 2 2 2 I 1/2 1/2 2 1 1
9 , 9 8M i u i s c k b e i r 6 M F I z CTC, +1024 Ztsr> 116ts P P = 0r Leerlauf P > L Timer2 siarten Timer2 züNcksetzen
tniornlpf von Timer2
s't 98 99 100 tu1 1aP 103
ia ori out in ori ourr rjnp
r16,TIFR r16,0b10000000 TIFR,r16 I16,TIUSK r16,0b10000000 TIUSK,r16 0c2star:t
1 1 1 t 1 I 2
tu,I SasDoze.
ldi
x 16, L0il(bso6StkEDd)
1
veNenden Leerlaufstapel
119
6. SLIMOS
105 106 107 108 7r9 SosDozel:
out ldi oüt sei rjmp
SPL,r16 116 , HICH(bsosstkEnd) SPH,I16 SosDoz€1
I
1 1 1 2
Int€rnlpts eriaubenl
Ein€ PrT wird initislGicft, Ihrc Adrcssc n wird in z, ihre LÄrse n, in 11. überceber. In Doppshcgistcr r1fuo *ird die Adresse 'p der Proz4sproz
ll, Sosllak€Pit: 1r1 llP 113 114 115 116 11't 118 tts 120 12! 122 r23 124 125 126 127 128 129 130 131 rJ, Sos kPtl: tt? 134 195 136 137 138 139 110 111 112 113
push4 r0,r1,!19,r20 I cli 1 in ro,SPL I 1 in r1,SPH I r19,r18 I dec r19 1 add r19,r30 1 out SPL,!19 1 ctr !19 r19,r31 t adc out SPH,r19 1 ldi r19,L0l,l(sosstop0nR€t) r push r19 2 ldi r 1 9 , H I C H ( S o B S t o p 0 n R € t )1 push 2 r19 push 2 116 push 2 r17 1 cL! r19 pusb r31 2 push r30 2 r19 2 Push ldi 120,30 1 push r19 2 1 d€c r20 rl2 brne SosMkPtl 1 in '19,SPL Z+oSosSP,r1g 2 std iD r19,SPH 1 std z+osossP+1,r19 2 out SPH,r1 1 out sPL,{ 1 sei I pop4 r20,r19,r1,r0 I 4 r€t
DurchlühNng der Selbttdnnönn'c ei.4 Pm?sd
lll Sosstoponiet: c1i I lds ll5 SosRenovePxo 116 dec
t20
r1oF r,f rle - nr - I !1o F (tr+n, - 1)-
he*(tr+n"-1)r pus,hql
püsh I
p$h E = 00 push rßsREG 30 Rceistcr pu6l 12€ bis pü6hro nsp in die PIT ,chreibell
(durcl aulrur von r€,
1 rl6,npitSosRng r16
KdtischeCodesequenzl
6.2. Das Prcgramm
sts breq lds lds d€c breq
1,!'.| 149
152
DpltsosRng,116 SosRnvProlP r2S,PPitsosRun r29,PPitsosRul+1 116 SosnnvPro2P
1/2 2 2 1 1/2
Bei P"r : I in den Leerlaüf Y+T>-ßP Pdt = 2 oder P"r > 2? Spruns bei P"t - 2
Dd Rins €nilrält mindesiem 3 Prozßsc
tdd ldd ldd 1dd
153 155 1t6 151 r58 159 160 161 162 163 164
std std std std sts sts rjnP
r30 , Y+oPPitSosNxt 131, Y+oPPltSo6Nxt+1 t16 Y+oPPitSosPrv r29 , Y+oPPitSosPrv+1 r28 'r16 Y+oPPltSosNxt , r3o 1 , r31 Y+oPPitSoÄNxt+ Z+oPPitSosPrv'r28 Z+oPPitSosPrv+I'r29 PPltSoeRrLn,r3o PPitsosRun+1'r31 0c2start
2 2 2 2 t 2 2 2 2 2 2 2
Der RinA cnihül! genau cinon Protose
SosRnvProlP:rjmP
so6Doz€
ldd 6ts sts
168
r30 , Y+oPpitSoBNxt 131,Y+oPPitsosNxt+1 PPltSoeRun,r30 PpitsosBun+l , r31
E ftl,igursdesConP{dMai.hlrlcrupis vonTinror2 116'TIMSK in 114 a - n d i r 1 6' 0 b 0 1 1 1 1 1 1 1 111 TIMSX'I16 out 172
rjnP
oc2start
rf> * n7
'F" *'; n> *17 Zum Pro,esswecbsel
2
Zum Lccrlaul
2 2 2 2
Z + 1t"p
Dd Rins cnihdlt sonau zwoi Plozcslo
ldd 1 6 6 SosP"rvPro2Pr
Y-'i
^>+17
1 I I
2
Zum Prczes'rwechel
Eii Prozoscreiht sich in dio Wdicschldgc oinee Eroisnisses E! oir! Der Ercignisindox e wird in rr7 tlborgebe' De! !'chLr e > e wird licht
r?.1 Soswait: 1'/5 176 177 178 17s ßa 131 182 189 rs, 185
Pusih' flA 't27 ,126,!25 'r24 p1ßh4 r23 't22,t21 ,t2A Push4 r19,r18,r17 '116 Pusb4 r15 'r14,r13 'r1'2 Push4 r11'r10,r9 'r8 Push4 17'16 'r5,r4 Pusb4 13, r2,r1,r0 ,a,PpitsosRrin 1ds !29 'PPitSodBuD+1 lds I24,SPL in Y + o S o s S Pr 2 4 std SPH r24, in
10 I I I a a 2 2 1
llberprtlrl
in den Alie Registerinha']te aktueller Siapel retien
Y*r> Stipelreigd in die PIT
t21
6. SLIMOS
136 r8'/ 188 189 190 !91 r92 193 194
std Idi ldi lsl add clr add adc
Y+oSosSP+1,f4 r30,L0v(vevesos) r31,H1cH(vevesos) r25,rt7 r25 r25,T1,7 t24 r30,r25 r3t,r24
2 | 1 | 7 I | I 1
1en
ldd
r24,z+onevesos
2
t96 197 198 199 2aa 241 242 2a3 2a4 2as zao 2a7 2a8
iDc std ldd ldd std std nov\r ltu d€c sts brsq dec breq
r24 Z+on€vesos,r24 12, Z+oppitso sEve 13, Z+oppitsosEvs+l Z+oppitsoeEv€, r28 Z+oppltsoeEv€+ 1 , r29 t27 tr26,r29.r28 r24,npitsosnng r24 npitsosRng,r24 Soel,iaitlP 1,24 Soswait2P
1 2 2 2 2 2 | 2 1 2 1/2 | 1/2
Z-
€o: A(Ea)
1 2 6+ e 1 2 6+ 2 e r26+2e+e=3e Z + €o+3e - €.
lE. * lo"l+r rs,, €.43 EE +n> X+t> =P r2arP F rr{ P,rl r P€Pdri-l Vcrzweisung bei Ari = I = Patr 2? VcMwcisune bci Ar! :2
Dic Konglclldtion it &ü > 2 Bild 6 6 unrcn
209 210 211 212 213 2U 215 2,16 217 ,r8 SoslJaitl: 219 22a 221 222 Dio Kon*cllaiion
22.t SosvlaltlP: 221 22s
tdd ldd ldd ldd std std std std sts sts st 6t rjmp
r30 , Y+oppitsosNxt r31 , Y+oppitso8Nxt+1 r24 , Y+oppitSosPrv r29,Y+oppitsosPrv+1 r28,r24 Y+oppitso€Nxt, r30 Y+oppitso6Nxt+1 , r31 Z+oppitso6Prv,r28 Z+oppitSo6Prv+1, r29 ppitsosBuD,!3o ppitsos&un+l , !31 X+,r2 X,r3 oc2start
2 2 2 2 r 2 2 , 2 2 2 2 2 2
t22
Y€r:
n:> * nr tr!< F r; r> €n.D Verzöseftr n! +.S: Prozesswechscl bondcn
mii Pi\ - 1 Bild 6.6 ot,en
st st rjnp
X+,r2 X,r3 SosDoze
2 2 2
Dje Konstenaij.n nir Pdr = 2 Bild 6.6 Mitie
996 Sos\,lait2Pr 227
Z+n3
ldd ldd
r3o,Y+oppitsosNxt r31jY+oppitsosNxt+1
2 2
Verzöserr: ri - E5 ID denLeerlaufübersehen
6.2. Das Prcsamn
Entfil,igunc
d€s Conpm
itr udi out rjnP
2 22s 230 \sI
i!r,i
r24,TIl{SK r24,0b01111111 TItIS(,x24 Soslliaitl
1 1 I 2
Ein Prozcss signalisied ds Eintreten ein6 Ereisnisscs Eei d l) er lä$i dessenwateschlangc leden Der Ereignisindex e wird in i1" llbergeben Dd Fchler e: € wird nicht 0berprüri
ese Sossigral: 233 234 235 296 2s7 238 239 240 e.t1 2,12 243 9l,l Sossgnllf 215 216 24't 2,18 219 250 251 2i2 253 254 2t5 25A 2ö't 258 25s 260 261 262 263 26.1 265 Zu
267 268
!30 , LoH(vevesos ) r31,HICH(v€veSos) 1.29,r.77 ls1 I29 add r29 ,rL7 add 130,!29 ctr t29 adc r31,r29 r2g,z+onevesoB 1dd t29 tst Sossgnll br!€ ljnp SoscndNix P:(:sh5 r29,t27 ,126,t25,t24 Wsin4 r23,t22,t21,r20 Push4 119,118,117,116 push4 r15, r14,r13,r!2 Push4 r11, r10tr9,r8 Push4 17,!6,15,14 pu3h4 rg,r2,r1,r0 t4'r29 r2S,PPitSosBun lds lds r29 , PPitSosnun+1 1n Io,SPL std Y+osossP,ro in ro,SPH Y+oSosSP+1,r0 std !O , Z+oPPitSosEve Idd r1,Z+oppitsosEve+1 ldd 12 clr Z+onev€Sos,r2 std move r31rr30,r1:r0 lds r2o,npitsosnng cPi r2A,2 brgs SosSgDl2 ldi ldi
cksetzer von Timcr2 u.d Beldhisnnradc$eü C.DplF
out in ori
TCNT2,r2 r16,TIFB r16,0b10000000
z+A(Ea) | 1 I r2e + e 7 r2e e 2e | r2s ? 2e+ e = 3e | Z * A(Ea)+3e: "A\E) 1 1 2 t.s+ \8" E.l +ol L \/2 2 NeiD:zuriickzumPlozess in dcn 10 Alle Rcsisterinha.lie I aktucllcnStaPelleti,on 8 a a 3 3 I 2 Y+P:n> 2 in die PIT 1 Stapelzeigcr koprcren 2 1 2 2 r1:o+ t3 2 1 12 * oo 2 E'l +0 | Z*^:Etr 2 r2o+ P 1 P=I? bei P > 2 1/2 VerzweiSung Mrt.fi Inter{pk
1 I
RrcNr, + 00 Oütprt Compüe Flae
12:l
6. SLIMOS
269 270 2'/1 212 2'ts 2% 975 Sossgnl2: 276 277 SoESgbl3:
out in ori out novw rjnp ldd ldd add
TIFR,r16 r16,TIUSK r16,0b10000000 TTMSK,116 r3:r2,r29:r28 Sossgnl3 r2,Y+oppitsosPrv r3,Y+oppitsosPrv+1 r2o,i4
1 1 1 I 1 2 2 2 I
Output CoDpa.e-Interrupt ernüDen rB2-ä:r> ra:t +6-^i P+P+
E.l
Umspei.hern der Wa*elista in den Proze$riDs
,78 Sossgrl4: 2't9 280 281 282 283 28.1 285 286 28'/ 288 e8e Soss8nl6r 290 291 292 293 29,1 29n 296 297 298
Idd ldd std std 6td std movn d€c breq movw rjmp novw std std std srd novw sts sts sts rjnp
16,Z+oppitsosNxt r7 , Z+oppitSosNxt+1 Z+oppitsosNxt, r28 Z+oppitsosNxt+l , r29 Y+oppitso sPlv . !30 Y+oppitsosPrv+1, r31 r29:r28,r31:r30 14 Sossgnt6 131:130,17:16 Sossgnl4 r31;r30,r3;r2 Y+oppitsoEPrv,r30 Y+oppitsoePrv+1, !31 z+oppitsosNxt, !28 Z+oPpltsosNxr+1 , r29 r31rr30,r29rr28 ppitsosRun,r3o ppitsosRun+1,r31 npitsosRng,r2o oc2start
2 2 2 2 2 2 1 1 1/2 1 2 7 2 2 2 2 | 2 2 2 2
t1ß + a: ^> ^" * p ,o - \ pts^
)€a Z€ ö p" * ö 6" * p Zrp i> r t)
P abspeicheür ZumResi,d. Prozesswec\scls
Ein Plozese üiu sich an eineD redelvou beleilise!. Cih lür .len Puaneier n d@ tsclchls 19.11> n, bo wi,d sos!äk aüss,l \.'. D' d -' ra bsodsrgnll Dor Eroisnisindcx e *ird n' rri, f, in rrs ilbcrseben D$ Fehl$ e > e wi.d nicht iibeDdift.
2ee Sosllelses: 3oo
ldi ldi
r30,L0w(vov€Sos) \ r31,HTGH(veveSo6) 1
Z * A(Ed)
301 302 303 3a1 3as 3a6 3a1 3a8 3as
ts1 add add clr adc 1dd cp brsh
f29,ft7 r29 i29,f17 r30,r29 t29 r31,r29 r2g,z+onevesos r18,r29 Sosl,ilssl
r2e e . f2s + 2e f2o+2e+e=3e z * A\Eo) +3e = A(8")
124
I \ | | 1 1 2 7 1/2
t2o -
lE" lE" 2 Bild 6.6 üntch
fig 360 361 362 363 361 36t
ldd ldd std std st st rjxop
126lY+oppitsosPrv r27 , Y+oppitsosPrv+1 Z+opptt3osPrv,r26 Z+oppitsosPrv+1, r27 X+,r30 X,r31 oc2start
, 2 , 2 2 2
x * (trlt)< tr< * (flt)
+n>> n< +r> Ea + n Y - tr! r>>
r29 ldr SosApp€ndProI pop p1\sh2 t24,t25 162 1di r30 , Loi'l(vevesos ) 163 ,t6,t ldi r31 , HICH(vev€Sos) r25,r17 465 lst r25 166
128
2 4 | 1 | |
lush !29 jn soEcbd z+AlEo) tzt * e t26 + 2e
6.2. Das Ptugramm 1 add r25,t77 1 z-A(Eo)+3e:"L\E) r24 clr 1 r30,r25 add 1 t37,t24 adc 2 r24,z+onevesos Idd llx.lts -E.ll+1 1 ':24 inc 2 Z+onevosos,r24 std r24 , Z+oppitsosEve 2 ldd r25 ,z+oppltsosEve+1+2 ldd 2 E ?- r std Z+oppitsosEv€' r28 std Z+oppitsosEve+1, r29 2 2 2 n >* E t r Y+oppltsosNxt, r24 std Y+oppitsosNxt+1,r2522 std 6 pop3 !26,124,!30 I SREG,I3o out 4 pop2 130,!31
167 463
471 ,l't2 ,l't3
1% 175 176 477 .l't9 484 431 ,182 ,183
!€tl Diü Prozeds lälct sioL in dl€ Lktc dü SchlÄf€r olnfilgcn Dlc Anrohl i der zü 3chlotcndcn Zeitoinhcitcn t sird ü r1t übcfgcben
,r,1 sosste€p: 185 186 ls7 SoESlplr 188 489 .190 191 ,t92 1e3 lsl 1e5 4e6 197 198 199
tst brr€ rjnp pusbS I'oat\A push4 Push4 push4 push4 pu3h4 lds tds in std in std
L t=0? t17 L/2 SosSlPl 2 Jarnit J : r zurück SoscmdNix in den r28,r27,126,r25,124210 AlleR€Sbterinhalte lette aktuelienStapel I t23,r22,r21,t20 8 119,118,117,116 8 r15,r14,r13,r12 a r11, r10,r9,r8 3 17,16,15,14 3 r3,r2,r1,!0 2 Y+n=n> r2S,PPitSo6Run 2 r29 , PpitsosRun+1 in die PIT kopiercn r Siapelzeiger r24, SPL 2 Y+oSosSP,r24 1 I24,SPH 2 Y+oSosSP+1,r24
Dcn P.oze$rins rüttreüen
502 503 541
548
1dd 1dd 1dd ldd ldi ldi ldd inc std
2 r0 , Y+oppitsosNxt 12 11,Y+oppitsosNxt+l 2 r2,Y+oppitsosPrv 1 12 13 , Y+oppitsosPrv+ 1 r30 , L0ll(D61psos ) (Dslpsos I r31 , EIGH ) 2 r4,Z+ontausos L t4 2 Z+ontausos,r4
z -.4(L): ^" ra+ L 14-r+1 L+L+l
129
6. SLIMOS aufsuchen d€r Einlüeeetelle in d€r Schtitcrlßte
5?7 Sosslp2: 513 514 515 516 517 Einfils€n
ldd 1dd ld cp brsh movw 1dd ldd rjDp
126,Z+opslpsos r27,2+opstpsos+1 r4,x r4,rr7 Sosslp4 !31: r30,r27: 126 r26,2+ops]psos r27,2+ops]psos+1 SosSIp2
2 2 2 1 1/2 1 2 2 2
X-):.\> r! +,\l )! > a? ve.l6seh Ja: SCnleiie l" + ^ )+)F Dürchlaul Nächeter
dca ncrcb Schldfeß nr dic Li6xc
t-18 Sosslp4: 520 522
etd std std std std
Y+op6lpsos,r26 Y+opslpsos+1 , r27 Y+ontaüSos,r17 z+opslpsos,r28 z+opslpsos+1, r29
2 2 2 2 2
^i +n
Dcn Proz6swsclßol dbschlioßon.Bei P > 3 d.n ofi.ncn Ring scl,lisßen
593 52tr 595 526 ö2',t i98 SosslpSr 529 590 531 t32 t33 t1,l 535 536 537 5s8 5.99SosSlp2P: 540 541
1d3 dec sts brne rjnP d€c br€q movw movw Btd 6td std std sts sts rjüp no!'w sts sts
EntfÄhisüne des C.n?tr
Mai.hjnternrprs
in edi out rjmp
513 544
2 rl6,npitsosRng 1 116 2 npitso6Rng,rl6 L/2 SosSlP6 2 so6Doz€ 1 116 r/2 SoSSIP2P 1 r31: r30,r1: r0 1 r29:r28,r3;r2 Y+oppitsoeNxt, r3o 2 Y+opPitsosNxt+1 , r31 2 Z+oPPitSosPtv,r2S 2 Z+oppitsosPrv+1' r29 2 2 PPitsosRun,r3o 2 ppitsosBun+1 , r31 2 0c23tart 1 !31rr30,11rr0 2 PPltsosRun,t3o PPitsosRu+1,r31 2
130
In den Leellauf, da &rr = I
Z+nr
Prozesswechsel bccDden Z*n"
von Timcr2
r16,TIUSK r16,0b01111111 TIMSK,r16 oc2stalt
Die lsn des CoDpam Mät{.I '
5-1d0c0bd1r: 517 513
h6 € P5u und P"b = l?
push2 r31,r30 in r30, SREC push2 r30,r29
I 1 1 2
Pmzcssvecheelbeenden
künE von Schlärelt
4 I
4
Der Siddddbeginn
einer 15?
6-2- Das Pl%nm
559 0c0h1r0:
t55 tr6 0c0b1r1: 557 558 559 560 ACOhlr2l 561 562 563
lds tst blDe poP2 out pop2
r29,nslpsod r29 0c0hh1 r29,r30 SREC, r30 r30,r31
p1ßtr2 lds 1ds ldd ldd
t2g,r27 r30,pslpsos r31,pslpsos+1 !28,z+otrslpsos r27,z+onstpso€
€td Idd 1dd
Z+onslpsos,r27 r27,z+opslpsos r31 , Z+opslpsos+1 r30,r27 r29 0c0bL!2 t28 0c0b1r3 r27,r2g 0C0b1r0 r27,npitsosRng t27 0c0h1r5 126,r25,r24 r23,r22,r21,r20 119,r18,r17, r16 r15, r14,r13, r12 r11, r10,rg,18 17,16,15,14 13,12,11,r0 r2S,ppitsosRun r29,ppitsosRun+1 |24,SPL Y+oSosSP,r24 r24,SPH Y+oSosSP+1!!24 r23,t27 !4,nslpsos r30,pslpsos r31,pslpsos+1 r0,z+opslpsos
571 579 0c0h1r3 | 573
577 578 t79 i80
583 581 585 586 587 588 0c0h1r5l
2 1
L:Ol
I
2 2 2 2
Z*):),>
I
565
569
l
dec brne dec b!6q pop2 rjnp Ids tst br€q push3 pusb4 pusb4 puEb4 pusb4 pusb4 push4 lds 1ds in std in std 1d6 lds lds Idd
2 2 2 1 I l-,-1 7 / 2 I > 0r neuerSchleifendurclauf 1
2 2 1 6 8 8 8 8 8 8 2 2 1 2 I 2 I 2 2 2 2
Alle Resisierinhaliein den akiuellenStap€l rctien
Stäpelzeigerin die PIT kopiercn
Z*),:\>
131
6, SLIMOS ldd cpi breq brsh
5s3 s 5s5 596
r1,Z+opslPsos+1 123,1 0C0h1r1P ocohlrxP
2 P:0,P=loderP>1? 1 1/2 SPruDgb€i P: r 1(2 Sprungbci P > 1
Der Prozassrine i6t lccr: Rlu = 0
J97 ocohlroP: 5s8 5ss 6aa o|t 602 609 604 6as
inc movv dec loovd ldd ldd ldal tst breq
r23 129:!28,131:r30 14 r31rr30,r1:r0 ro,Z+opslpsos r1,Z+oPstPsos+1 rs,Z+obtausos rS 0C0b1r1P
I 1 1 1 2 2 2 I 1/2
P D e+ u tr:) ,"." ) *.\" rr:o _
P+ 1:0+ 1 (cst) Unint€rPreiaiion r , )F
ir e tr{ )r = 0? Ja: weiler aufw€cken
Dcn Koplder SctlÄforköttc orn0{ern urd den Prozcsc{ccl'$cl ei'lleitdn
600 ACA\h7 | 607 608 609 61A 611 612 613 D*
sts sts sts sts sts sts nov\.t rjDrP
n6IPSos,r4 PslPsos,r3o PslPSos+1,!31 pPitSosRuD,r2S ppitso8RuD+1, r29 npj.tsoBPog,r23 r31:!30,r29rr28 oo2stärt
2 2 2 2 2 2 7 2
L + LAatr ^> + ^ n> + ^ P F P".\,' z+n, Prozessw€chscl bccnden
l,rozclsrn,s ert\Äli gcndu cinon Prozc$ 8str = 1
,rl 0c0hlr1P: clr out 6!t
116 TCNT2,I16
1 1
Dic Bofühi8rng des Conpuo Mol.I interrupt von'finor2
616 a17 618 6t9 62a 621 622 623 621 625 62,6 627 628 629 6so 6s1 632 633
132
iE o!1 out in ori out std std std std std std 6td std roovt lnc dec now
1 r16,TIFR 1 r16,0b10000000 1 TIFR,r16 I r16,TIUSK I r16,0b10000000 1 TIMSK,!16 2 z+oPPitsosNxt, r28 z+oPpitsosNxt+l , r29 2 2 z+oPpltsosPrv,r2s Z+oPPltSosPrv+1, !29 2 2 Y+oppitsosNxt , x3o Y+oppitsosNxt+1,r31 2 2 Y+oPPitSosPry,r30 Y+oppitsosPrv+1 , r31 2 1 r29:r2a,r31:r30 1 r23 L !:4 I r31rr30,r1rr0
trf 5 tr ri * r nE +n\ n' + ^^ tr *7r P.- - 4-" + 1 I"." e r"." - 1 )-1"
6.2. Das PrcgJatnm ldd ldd ldd tst brDe
69.1 63s 636 63',/ 6tB
ro,Z+oPslpsos r1,Z+opslPsos+1 rs,Z+ontausos 15 0c0h1r7
Dd Prozessrins cnthült mird4tcß
6.99 oCobIrXP: 64a 6tt1 61P 643 64.1 645 646 647 6,18 6/ts 650 651 6t2 6ös 651 655 656 657 658
1dd ldd 6td std std std std std st Bt no\,'l' ioovw inc dec l.dd ldd Ldd tst br€q rJnP
zrci Prozs€:
2 2 2 1 r/2
P".u > 2
126, Y+oppitsosPrv r27,Y+oPPitsosPrv+1 Z+oPPit3osPrv,r26 Z+oPPitSosPrv+1, r27 Z+oPP it SosNxt, r2a 1 , r29 Z+oPPitSosNxt+ Y+oPPitSoEPrv,r3o Y+oPPitSosPrv+1, r31 X+,r30 X,r31 r29 r!2a,r31:r30 !31: r30,r1: r0 t23 14 ro,Z+opBlPSoB r1,Z+oPslPSoE+1 rs,Z+ontausos 15 0C0b1rXP 0c0h1r7
2 2 2 tri*o 2 2 ri -tr 2 2 2 2 2 1 1 I I 2 2 2 1 r/2 Jurwaitq oufwecken 2
Ein lhtorrupt sisnoliEior! oin Elcisris ,. Dant! witd €in wdrt6nder Prozos .klivlefr. soghisls wird ans€sp.unson. € = ,4(E) wird in z llr,drgebcu und Y onihall, dic ^dr$$c d eine, Fehlorbyics
659 Soslntsig: Luu 661 6A2 Aß 661 665 666 667 668
Push ldd d€c brpl Id inc 3t paP4 out PoP2
669
leti
670 Sosltsgl: 671 672 67s
std lds tst breq
r27 r27,z+onsvesoe r27 Sosltsgl !27,Y r27 1,127 t27 ,r2g,r29 ,r30 SREG, r30 r30,r31
2 2
Z+onevesos,r27 r27,npitsosRng t27 SosItSg3
2 2 1
I
r,' * llEll l E l l =o ?
L / 2 Falls ncin: velzweiSen EehLozählererhöh€D 2 I 2 I 1
r/2
Zu!üc.k vom IniclNpt
jl,oll- .e -1 Falls ja: kein Proze$wechsel
133
6. SLIMOS Durchführuns des edren Tlils eines Proz€ssw€chsclsnit dem laufenden Proz4s
push3 ptsir.
674 675 676 677 678 6Ts 680 681 632 683 68/t 685 686 687
Push4 push4 push4 Push4 Push4 1ds 1ds iD std in std movlt
126,125,124 t23,r22,r21,t20 r19,r18, 117,116 r15,r14,r13,r12 r11,r10,r9, rB 17,16,15,14 !3,r2,!1,r0 r2a,PPitsosRun !29,ppitsosRul+1 I24,SPL Y+oSosSP,r24 |24,SPH Y+oso6sP+1,!24 t11: r10,r29: r28
Alle Registednhaltein den akiuell€DStapel retten
Y * t" = t> Siapelzeigerin dic PIT kopieren
rrrrro*'l.
*lcrausl&etr der eßien PIT düs dor Wartelisie d€ Er€igni$as
688 SosItSgS: 1dd 1dd 689 1dd 6sa std 691 ldd 092 std movw 69tt
r28,z+oppitsosEve r29 , z+oPpitsosEve+1 ro,Y+oppitsosNxt Z+oppitsosEve, r0 r0 , Y+oppitso8Nxt+1 1, r0 z+oppitso BEv6+ r2A r31: r30,r29:
yFn=8" E> + E>>
Z-n
Ei f'rß^. d,r Lo,auBsolöflon PII in d!r Prö'o.ring
cpi breq brsh
6s5 696 69't
t27 ,7 SosItSglP SosItSg2P
P : l? Verzweise bei P = r bei P > I Verzweige
Der Prozessring is! lcc.i P = 0
6e8 SosItSSoP: inc sts 699 sts 700 sts 701 rjnp 702
t27 npitsosRng,r2T ppitso6Run,!30 ppitsosRur+1 , r31 oc2start
Dcr ProzGsrn€ eülldt
genaü eincn Prozcss P = r
7r, SosItSSlP: clr out tutr Die Beftil,iguls
705 'to6 '/07 708 1as 7ta 't11 ,t12
134
dd abDlm.
iD ori out in ori oüt now std
116 TCNT2,r16
P * P +I
Zun Prozesswechsel Timer2zurücketzeD
Maicü jnteüul)t vor Tnner2
I16,TIFR r16,0b10000000 TIFR,I16 r16,TIUSK r16,0b10000000 TIMSK,i16 r 2 9 : r 2 8 ,r 1 1 : r 1 0 Y+opptsosNxr, r30
Warienden IntelruPtlöschen
Befähisen
Y*r" Er - r
6.2. Das Prcgnmm 713 71,1 715 716 717 718 719 72a
std std std std std std std rjnp
Y+opptsosNxt+1, r31 Y+oppltsosPrv,r3o Y+oppitsosPrv+1, r31 Z+oppitsosNxt, !28 Z+oppitsosNxt+1, r29 Z+oppitsosPrv,fS Z+oppttSosPlv+1, r29 SosItSgoP
2 2 2 2 2 2 2 2
ri - T rE +ta t'
+ n"
Weiter{ie bei P = 0
Der Pro'elsiirc enlhÄli nindedens zrei Proze$e: P > 2
721 SosItSg2Pr inc 't22 sts '123 no!'w 724 l.dd 725 ldd Etd 726 727 Btd std 728 std 799 73a std 731 std 732 st 733 st 73.1 3t3 796 ata rjrdp 736
r27 npitsosRne,r2T r29:r28,r11rr10 r26,Y+oppitsosPtv r27,Y+oppitsosPrv+1 Z+oppitsosPrv,r26 Z+oppltgosPrv+1, r27 z4oppltso sNxt, r28 Z+oppitsosNxt+1, r29 Y+oppitsosPrv,r3o Y+oppi.tsosPrv+ 1, r31 X+,r30 X,r31 PPitso6Run,r30 pPltso6Run+1,f31 oc2stä.rt
7 2 1 2 2 2 2 2 2 z 2 2 2 2 2 2
PtsP+I Y+ra X+n: n< * rt rD trd rf * r nf> -r ^> + t ZumPro,esswechsel
Dc. oxtc.no Inre.rüpr INTT sisn&li|icd da Eroisni$ to
't9't
.ds€8 738 bSosIDtT iss:.byt€ '139 .c8eg pueh2 INTThdlrr Z, in 41 push3 1.tP
1 !31,130 I3o,SREC !30,!29,128
1 1 1 4 1 6
Das Fehlerbyte Der Si,andardbesinn
Inieuupi INTT wird enilshist (2.8. Nescn Tsicnprcllcn)
7.13 '/44 'U5 U6 't1't 718 Ue 75a 7rr
Sossuspend:
in andi out ldi ldi ldi ldi jnp
!3o,EIMSK 1 r30,0b01111111 1 EIMSK,I3o 7 r30,L0l,l(vsv€Sos+3*9) 1 r31 , HIGF(vev€Sos+3*g ) 1 r28,L01,1(bsosTntTuiss) 1 r 2 9 , H T G H ( b S o s T D t T M i s s1) SosTDtSig 3
rjürp
0c2sspnd
2
Z + A(Es) Y e AdresseFehlerblte Signalisierere
6. SLIMOS Ein Stellvedreter für €in.n noch nid,t nnpbnentierten Befchl
759 SosCDClNix: 753 754 755 756
pop2 out
r29,r3O SREG,I3o
PoP2 reti
r30,r31
1 1 t*rr 2\2 4
unCültiCerBefehl
Die Sprungtnbclle der S$iembef€hlo, d.h. die Tnbelle ihr€r adr$sen
.d1' Sossusp€nd .d!} Soslllait .dw Sossignal .di' Soslock ,dit Sosunlock sosAPPendPro dv SosSl€eP .dw .dn Sosl,lels€S .do SoscmdNix,So8clddNlx .dr SoscmdNix,SoaciodNix .d!t SosChdNix,SoscmdNix ,dir So€CtdNix,SoscmdNix 4 im ürieronBttquo$ct!vonr1o1 Übergdb.dorBolchlsnunmor Du En,bitsnderBclchlsousfithruns.
%7 vpJsosc0d: 't58 759 760 761 762 763 764 765 766 761 768
Üborgdbo clncs cvcntuollon Paranetor6 lD rrr odct nn obgrsn Bilqua$elt rcn .ro
769 Soscmdr 770 7'/1 172 773 77.1 77t 776 777 778 '/'/9 780 781 782 783 Ietr 785
ij.P Ein Untarprogrsnü
?sd SoslnilP: 't87 788 '/89 790
136
cli pusb2 clz in push2 ldi Ldi rnov aüdi lsl add ctr adc 1pn lpn
1 2x2 1 1 '3o,SREC 2x2 !30,!29 1 r30,L0w(vpfsoscmd*2) r31 , HICH(vPfsoscrd*2 ) 1 1 129,116 1 r29,0b00001111 I t29 1 r30 , r29 1 r29 1 !31,129 3 r29,Z+ r3t,Z 3 1 r30,r29 2 r31,r30
Kritischer Codel rsr,rso in lokalenStapel ProPhylaktisch. ts o Statwregbter, rrs in Stapel Z für 1PEvorbereiljen rro - Betehlsbytc r,o F c rrs + 2c Befehlsindex addieren
Z F Befehhel.esse
Zum Befehl
zun Aulhau des Prozcssrinsst . P = I
ld 1d sts sts ret
r30,X+ r31,X+ PpitsosRub,!3o PPitSosBuD+1 , r31
2 2 2 2 4
2+0101 n> + el\)
6.2. Das Prcsantm
Der Aulbau das Prozcssr gs m
79r SosIni2P: 1se 793 7s4 7e5 'tso /e't 7s8 1ss 800 801 802 8AA
1d Id ld 1d std std 6td std std std std std r€t
r28,X+ r29,x+ r30,X+ r31,X+ Z+oPPitSosNxt, r28 Z+oPPltsosNxt+1,r29 Z+oPPitSosPrv,r28 Z+oPPitSoePrv+1 ' r29 Y+oPpitsosNxt,!30 1 ' r31 Y+oPPitSosNxt+ Y+oPPitsosPrv'r30 Y+oPPitsosPrv+1,r31
2 2 2
Y_tr"=r[0]
2 2 2 2 2 2 2 2 4
ni -n"
z*^b=al\l
r:
* nt,
Dic lriiislisi6run8 der vom Sysle'n verMndoten Det6nslrukNur€n und der Aülbdu dcd Enflingllchon Prozesrings, Dic Anzshl P der bein Systcmsiait dktivcn Prozalso wi'd n: üo tlberadban' RlsiNLsr X Dßs dic Adresso ciner TebeUo mit den Adrcsccn ihrer PITd ontl'3llen Dlo Initihlhi€rung dar Er€ignißso
8rl soslnll 805 847 8rr8 SosIni0l 809 810
1di ldi ldi clr
r24,n€v6so8Max*3 r28,Lol,l(v€v€Sos) r29,HICH(vovesoB) t2E
dec brne
t24 Soslnlo
1 I t 1 2 I
Die Iniliolision,ng d$ Sonraphorc
811 812 813 811 8.r.' SosInil:
818 819 Die IniiidisieNng
820 821 822 823 8% 825
ldi ldi Ldi ldi st Et st d€c bIne
!24,ns€nsosMax r28,L01,{(vs€msos) r29 ,ltICH(vs€msoe ) r30, -1 Y+,r30 y+,r25 Y+,r25 t24 Soslnil
1 1 I I 2 2 2 I
dor Schläfer
sr ldi st 1di st ldi
Y+,r25 !2s , Lo\'l(PslPSos+2) Y+,r25 r25,HIGH(PslPSos+2) Y+,r25 r25,0xFF
2 I 2 l 2
\ ,t25
2
Der AuJbau d* anlsnslichen Prozessring3
sts
nPltsosnlg,rl6
2
1 1 6-
P
737
6, SLIMOS
828 829 asq 891 332 833 SosInl2: 834 8J5 836 837 8t8 839 840 8.11 8,12 8,13 8,1,1 8tt5 816 817 818 8.19SosIDi3: 854 851
cpi br10 rcall subi breq movw Ld 1d Btd 6td ldd ldd std std srd srd 8td std dsc brne sts ats r6t
116,2 SoslnilP SosIni2P t16,2 SosIni3 r29: r28,r31: r30
1 1/2 3 1 7/2 1
r30,x+ 2 r31,X+ 2 Z+oppitso6Nxt, r28 2 z+oPpftsosNxr+1 , r29 2 r24 , Y+oppitSosPrv 2 r25,Y+oppitSosPrv+1 2 Y+oppitsosPrv,r30 2 Y+oppitSosPrv+1, r31 2 Z+oppitsosPrv,r24 2 Z+oppitSosPrv+1,r25 2 ,29,r24,r25tr24 I Y+oPPitsosN*t,r30 2 Y+oppttSosN*t+1,131 2 116 1 Soslni2 !/2 ppitsosRun,r3o 2 ppitsosRun+1, r31 2 4
P :2? P = 1: Baue Einprozess.inC, zurück P = 2r Baue ZweiprozssrinC P = 2r tr> + n, zurück
z * tu:0b1 ri *v
Ein Assemblerprograrrm über 850Progra.mmzeilen ist zweifelsohne schwerverdaulich. Es ist aber nicht so schlimm.wie es auf den erstenBlick den Anscheinhabenkönnte. Dennzum einenkönnendie einzelnenTeileweitgehendisoliertbetra.htetwerdcn,zum dic sich nur durch anderengibt es viele Wiederholungenund vi€le Befehl$equ€nzen, in ihnen vorkommendeSymboleunierscheiden. Auch die Tfltsa.che, dassviclc 16-BitWorte bewegtoder inspiziert wordcn miissen,ftirdcrt bci cincm 8-Bit-Proze$ordas Entstehen lä$gerer Befehlssequenzen.Und natiirlich wirkt sich auch nachtcilig aus, dass nür drei Adressregisterzur Vcrfiigrmg stchen, dic noch nicht cinmal gl€ichwertige Fähigkeitcnbcsitzcn. Mit ctwas Erfahrung ulld etwas Eiüfühle in di€ Proble[r€ der Programmierung eincs von Int€rrupts gesteuerten Syst€ms lässt sich das Programm ganz gut verfolgen. Eigcntlich kanll mar hier ga"rnicht von ,,verfolgen" sprechen,da man in das Programm nicht obcn eintritt uxd es ünten wieder verlässt. Es ist eire $oße Hilfe, sich die ablaufeüdeü Vorgänge sozusaeenphysisch, real vorzllsiellen. Die Stnktur des Prcgramms unteßtützt solcheVoßtellungen.Z.B. werden blockierteProgra"'nnenicht im Ring beläss€nund dort entsprechendmaxkie{, sondern tats:hhllch aus der Ringverkettung hemusgelöst und in die zust:hdige Kette blockierter Prozesseeingeftgt. Mar kaDr dieseKetten sehr schön im Simulator volfolsen und sich Skizzendazu macher. Und so wurde das Pro$amn auch enti{ickelt, mit simulierte lntellupts im Simulator. Dabei eNetzt, um alle wurdcn Intcrrupts durch strategischverieilt€ Unterpmgrammaufrufe
138
6.3. Prczesswechselüntl Leexlauf bci cchten Intenupts möglichen Sitüationen herbeizuführen- Beim Stapellauf des Pro gramms in Echtzeit gab es so fluch nur Probleme n:ßigen Sc.hwiedgkeitsgrades. Ein jedenfalls nicht Ma8siv€, dia Programmablauflogik betr€l debuggerwurde eingesetzt. fende Fehler in Echtzeit mit einem debugger bescitigcn zü vollen, ist ein nenenaufrei bendes Unterfansen, das nan durch den Einsatz dcr Simulation unter kontrollierten Bedingungensehrgut vermeidenkann.
und Leerlauf 6.3. Prozesswechsel Ist mehr als ein Proz$s äktiv, d.h. enthält der Prozcssring mehr als elnen Prozess,so vird der laufende Prozess im lGms-Takt ausgewedßelt und zwar in der Reihenfolge, die der Prozessring vorgibt. Der wcchselndcAgcnt ist eine JSR von Timer2. Timer2 wird für den Prozcsswcchselim Modus CrC betrieben. das isi Clear ?imer on Compüe Match. Das Zö.hlregisier des TimeH wird dabei so langehochgezähll,bis 6ei{ Wert mit dem Wert des Vergleichsreghi€ßRocRoübereiNtilnmt. Der Zähle! erz€ugtdann eincn Intcrrupi und lödt sein ZÄhlerregisiermii 00, damit eilEn neuen Zykl$ beginnond.Dic EinsteLlungdes ZÄhlersffndet jm Untelplogrämm So6stüt in don Zcilcn 75-83 sratt. Da.e Zählregisre!RcrNn von Tim€r2 wird mit d€m Siartwcrl00 und RcgisierRocR,mit 156geLe den. Der Wefl 156 crsrbr bei cincr Tskrfraquenzvon ldMHz und en.erVorre'luugdurch 2r0 €in Zoitintervallvon etwa 9,98 Millicekunden.In de\ Zeiler 8r-83 wit.l de! CTclnt€rrupt dann befä.higr. Die ISn de$ Interruptu nimmi in Progranm die Zeile 9d-73 enr. Ihrc erste Aufgabe ist, den Inhalt der Resjsl,erro bis rs1 uDd des Stoiusrcgisicrsin dic PIT des auszuwechsclnden kopiert werden, Prozesses zu kopieren.Dasszuersi dic Inholtc vo und RSREG besonnenwird, ljegt düou, dassan viele andcrcnSicllcn im Prosromm ciD Prozesswechsel gar nichi durchgefühftwird. In einemsolchenFall wär6 es natürlich der aber möglichcrwcise cin unniiizcr thftivcrbrsuch, erst den Inhali a.ller32 Regicterzu kopiereü,elle der Abb rch des Prozesswechsels festsestelltwi!d. Itr viele Fällen 8enügenzur Analyseder Situaiion dic drei Rrsjste! r,o,rso urd rs1, u d salbsiversländlich darl bei die6$ Analyscdas Siaiusresinach dcmsclber Schena ablaufen ste! nicht beeinflusstwerden.Da aber olle Prozcsswcchsel lllüssen,danii, alle PITS ihrc Informationenan dcnselbcnSicLlenenihalier, beginntäu(h de! Prczesswechsel bci Ableuf d6 Zeitintervallsmit der Befehk€quenzde! Zeilen 3d-38. In den ZeiLcnld-17 wird R€sisterY mit der Adlesser> der PIT des auszüwechselnden Prcz$ses geladen,w€lchedie lc-Bit-vdiabl€ ppitsos&u entltä.]t.In den folSendenZeilcn lr-51 wi.d dann via Y der Weft de! Siqpelzeiselsiü die PIT kopielt, die jet,t allc privaten Welte des Prozessesenthlilli. In den niüchsienbciden Zeilcn wird Regisier Z mii de! Adresse sich in den Zeilen 5-l ,5 die n - r'3 der nächstenPIT im Proz$srins scladeD.Es BchLießi Operationr> * tr m, damit wird der DächsteProze$ im RiDs zun laufendenProzess. Der StäpelzeigerRsp wird Ab Zeile ,d gechieht d6 zu den Zeilen 36 ,l Spiegelbildliche. mit dem lokalcn We.i d$ Siapelzeisels aus der neuen PIT sebden ud der R€gisiern ro bis rs1 und dem SiatusresiBter werden ebenfalls die lokalen We e aus dei neuen PIT zugewie een. Hinzu kommt aber, das in der Zeilen 70 7] dN Zaihlregister RcrNI von Timcr2 auf den Anlängswert 00 geseizt wird, um dem Deu laulenden Prczcss ein möglicht vollständises dann dori Zeitintervallzu E€ben.Mit dem Befehl leti wird der Lauf des neuen Prozesses foftgeseizi,wo er beim Prozesswecnsel unterbm.hen wurde. Eire vollständige Prczessumschaliung von der Unterbrec.hung eines Prozcsscs bis zum Weiterlaufen des nächsten daüert 171 Takte. Bei einer Takthcnucnz von 16NIHz
139
6. SLIMOS ergebensich ungeeihr 10,7Nlikrosekunden,das sind0,11% des Zeitinienalls, das ei €m Prozesszur V€rfüsuns sieht (9,8 Millisekunden). Ist der laufende Piozess der letzte aktive ProzesBund sibt er seine Existenz auf oder wird er in eine Waiteschlange eingefügt, so springt das System jn die ens€ Schleife in Zeile l0r. Zuvor aber schaltet €s aüf einen eigenen Stapel un (Zeile 14L10'/) trtd laisst IDterruDtB d€ssenlolaler Stapel zuletzt zu. Ersijeresist nötis, dcnn über d6 Schickrsldes Prozess€s, verwendet wtrrdcj ist nichts bekanni, er köntie sehr wohl aus dem Systcm entfernt worden sein,scin Stapel eingeschlossenl Und Letzi€!€sjsNunbedingt notwendig,da es neben elren Intcrrupt keine andere Möglichkeii gibt, die Schleife in Z€iL€Jrg zu verl€Fsen. Ds Verhafen des Systemsim L@rlauf kann sutartig seiD,nählich dann, wem mind$tens ein Prozess schlüJt oder auf einen Interrupi vartet, der unsbhängig aon einem Prozcss des System irgendwann einmal erzeugt wi!d) et{a rcn eiren Ge.äl außarhaLbdes Controuers D8 eaxmtiert, dass das Systen den Leellauf wieder v€llssen kann. Das scbließt allerdiiss nicht aus, dass sich Prozessegegeßeil,ig blockielen könnon. Das UmschaLten h den Leerlauf kün aber auch daher ri.thren. dass sich alle Proze$e de, Systehs sesenseiiigblockielen. Dcr Controljer verbleibt dsnn duf ewis im Leerlauf. Das Svstem könnie, bevo! es sich in dcn Leerlauf besibr, den watcldoa t'iner aki,ivicrcn. Damit wi!d) n$B dazudie lüUste8ülti8c Zeitspanne der CoDl,roller abcr nichi zu früh zurlickgerJetzt elmittelt werden,die der Controller im Lerlauf velbliryctr kann. Da Systembefchlc oft in einen Prozesswechs€lmünden, i6t deran Änlang durch die ersten Zeilen der ISR von Timer2 festgelegt.Es sind, in dieser Rcihcnlolge, die Inhelte der Registcr rs1, r3o und RSREGin den gerade gültigon Stflpcl zu kopieren. Da€ genilgt mo.nchma.t schon, um die nötigen Berechnungen durchführcn zu könncn, sndernfalls ist mit dcn Register r2s, r2s usw. fortzufahren.
ins Nichts 6.4. Rückkehr Ein Prozess,der in cine Warteschlaqeeingereihti6t, kann ohneweitcrcsaus ihr entfernt worden,ohnc danachin den Prozessringeingefügtzu wcrdcn. SeinePIT kann zum Aufbau cincs rcuen Prozessesdienen, 6ie kann, folls der Prozcss dynamisch €rzcugt wordcn war, a.n die Halde zurückgegebenwerden oder sic kä$n irgendwelchen andercn Zwec,kendienen. Ebenso kann ein Prozessaus dcm Prozessringherausgelbt werden, ohne darach in eine warteschlo,ngeeineerciht zu werderl Es ht aber gute jeden Prozessselbstentschcidcnzu lä€sen,ob und wann er sich Programmielpra,xis, au{öst. Beim Aüfbau wird deshalbder StapcleinesProze6s$so initialisieft, dassdcr Befehl r€t direkt in die ZeiIe Ul fiihrt,r sofernder Prozesskeine eigenenUntarprogramme aufgerufen hat. Dic Aufgäbe der dort beginnenden Codeseqüenzist, den (läufenden) Prozessäus dem Ring hoauszunehmen und die Kontrolle an den im Rhg foleendenProzesszü übergeben.Fallsdor Prozessder einzigePrczessim Ring ist, goht das Svstemin den Leerlauf. einekritjscheCodesequenz ist, besinntdasUnteF DaiedeManipulation desProzessdngs programmdamit, Interrupts zu verbieten.Als Naich3i6wird 116mit der ProzessmzaltlP geladen,ihJ Weri wird um 1 emiedrigt und wiederzuückgeschrieber Isi dß Ergebnisder Ediedrigung0, soenihälider Pro?e$ringüberh!,rptnur einenProze$und dasProsramm
140
6.S Belehle
sprinst züi Sonderbehddlungin die Zeile 165,die nur darin besteht,den Progrmmteil zum Übergangin den Lecrlauf anzuspringen,der zu weii cntfent isi, um von Zejle llE auBmit einembedingtenSprurg ereicht werdenzu können. FaIs der Ring nehr als eiDcn Prozessenthält, wird in denzeile\ 149 150 Re8ister Y mit der P Seladen Um ds Piogrmm leichter Adresser' = te der PIT des laufendenProzesses lesbar zu nachen, wird beim Eidüsen in den und beim Hcrauslösen aus dem Ring z*ßchen h Zeile 151 nimmt dcn Fällen P:2 und P > 2 uni€rschiedenDer Dekremcntierürgsbcfehl = uM P > 2 2, Mdernfal]ß so uar P Resultat 0, Hat er das vor' diese Unterscheidung In ersten.cjnfacher;nFall wird in di€ Zeile 166 sesprunsen.Dort wird Rcgisier Z nii der AdlesBerF der ndchsienund bald eiMigeDPIT im Proze$ring geladeD,dann {ird auch die erfüllt' um h die Damit sind schonalle Voraussetzungen Vaiable 4 mit -F überBchrieb€n. Da aber bei kö'nen zu sprilgen ProzessunsclEltung zür zweite Hälftc des Ünterprogramns nur etn€m in Ring verbleibenden Prozesscs keine aon Timer2 ausgelöster ProzessumBchaliunsen scben so1l,m\ss vorhar noch der C?C-Irtelrupi von Timer2 in den Zeile 170-172 Iln zweitenetwaskohplizierterenFall in den Zeilan 1J3 161 mttsseneinigeloitfer angepa8t Proze$es werdcn.Zunöchst{ird R!8irte! Z mit de! Adr€sscrF d€r PIT des nächfolsenden Adre$en existiercn' Di$e seladenund dann ResistcrY nil, dor Adresset'; übdschrieben äo der Prozcssringvor der Herausnahnßnindesiens zwei Prozesseenthieli ln dea Zciien = t58 15, whd dan-ndie Relation tr;> = 7r'p,in den zeiter 160-161die Rclation trF< 'F von NehfoLseß helgestellt. De! VorwdriszeiSer des Vorgänsers und der Rückwä szeiger de8 Unierprosramm in da! vo! dem Sprung P;rden elsoan P ,,'otbeisefiihrt" Schließliclitnusc noch die Vüiable mii de! Adrcss€dcr PIT des lauferden Prozesss mii zum Proze*rwechsel welden, symbolischtr> * tF. nF übersclüieben Das Herauslösen dcs ]aüfendcn Prozesscs aus dern Prozessring ist ein htiufiger Vorga.ng,der im Prinzip als Unterprogremm formuliert wcrden könnte Dr ist aber mcist mit ancleren Vorgängen ery verwob€ni ein Efeki der Tatsache, dass nur drei Adressreim Svstcm proktisch keinc U$eister zur VerfügunÄ steh;n. Der Häuptgrurd, dtlss aufgcrufen wcrden, ist äber, dass nicht bekä"'lnt ist, wicviel Plotz der iu.progr-r,*u mom€ntsn verwtndete Stopel noch bictet.
6.5. Befehle mit dem Ma.krosos in den Zeiieül-l auf Es hat einen rufen Systcmbefehlc Prozesse Paramcter,nämlichdie Nummer des gewünschtc Befehls.Die Nummernder ilnpledie Svmboiefür die BefehlsmentiertenBefehlesind in den Zeilcn 5-ll angegeben, nummern definieren Das Makro lädi die Befehlsnummerin Registcr t1s und ruft das Unterprogrammsoscüd aüf. Tatsächlichist eineBefehlsnumnerab€r eine4-Bit-Zahl' die ir tlas untere Bitquarteit von rro zu ladon ist Ds gibt ä']somaximal 16 Befeh]e. dä.vonbisher die erstet neun implementiertsind. Der erste mit der Nummer 0 wird älledines als l,ecrbefehl gcnützt Das obere Bitquartett vor rrc wird bei der Befchtsübeqabe bisher richt genutzt, es köünte bei den noch nicht implcneniiertcn Befehlen zui Übergabe einesBefehtsparaneters verwendet werde Falls ciner der ints plementierten Befehleeinen Pärameter verlangt, z.B einen Ereignisind€x' muss dieser Senaphoreüusw' in Registerrrt übergebenwerden Wird die Anzahlvon Ereisnissen, da der Pararneter $'erden, r17 verzichtct aüf auI maximal 16 beschränkt,könnteaüch
141
6. SLIMOS darn in das ob€re Bitquaxtett von 116 passt. Weitere Parameter werden h r1s usv. übergeben. Als Fehlerindikätor wird däs Statusbit i verwendet: Ist nach der Rückkehr von der Befehlsausfü]rrungJ : rj so ist ein Fehler aufgetreten. Das kann man sich mit der Eselsbrückeleicht merken, dassnach einem aufsctrctcnen Fehler die Befehlsausführung ,,null und nichtis" ist. Um einfacheV€rhailhftsezu schafien,rird eine Befehlssusführung in ihrer ganzenDauerals einekritischeCodeequenzdg$ehen, auchw€nnsiein Teilendurchausunterbroohenwerden könnte.Es wcrd€ndeshalbgleic.ham Anfang in Zeile 783 ldeirupls unterbunden. E$fol8t die vonder Prozessümschaltuns diktiertc Codcsegrcnzin auss€führt, ondernfalls, also bei llE"l < eclcort,d.h. es wird der Befehl sossisbal es wird der Befchl von E. einscfügt, d.h 'r, wird der Prozessin dic Waxteschlärse Sosllait aüsgeführt. Wie bei allen anderer Befehlen auch wird dia F€hlerbedingung e > e nicht überprüft. In den Fällan, ir denen e nicht zur Laufzcit berechnet Nird, känn da.snämlich mit einemNlakrogoschchen. zur Assemblierungszeit Befehl beginni in Zeile?71.Da keinFehleraufifctenkan!, ist esbeqrem,Sleich Der Sosttait Prozesses P, = P"> , An Arfangdie Inhalica.llerRrgisterin denStap€tdesnochiaufenden d.h-in dessen PlT, zu kopiercnlzei,Iet\17.1180).Somusseinnal ni.lit mii demGebrauch in denZei Anschließend wird auchderWerl desStapelzeisele vonResisterD segeiztwerdeD. Zeilet 181 162 PIT kopiertDazu wid vorher i! den 133 18d dn seinen Platz in die len gclade!,Boiet auchderdirekieZusrilT r> der PIT desProz€sses ResjsierY mii der Adresse auf die PIT möslich.Duit cind dlle VorberejlungcngetrolTenwordetr,un den Prozes Pr
6.0. Er'-ärte, uDd SisxalisnYm von Er'islissen aus dcm Prozessrins ausklink.D zu könDcn Dic n,n:]Nie ^ufsabe jst, die Adrcssc., \ur E. zu berechDcn Es beginDt in den Z'jlcn 1t7
Abbjldune 6..1.:D.r Erejgnisvcktormit .irer [hrtcscliang€ fiir -El
PIT"
Pl |b
lE\ =2
l,tE d^nrit, (lnssZ nrit def ldr.sse €0 von tr gdadcl wird h dcDnngexdcndr'i Zcilcn winl li.gi*or 126n,it.,8elülcn tn(l lril 3 nnnliplizicrl, h der Zcilcn l9l l9l wiü inrzunr ltrlüLl vor Z Addic,t. lh cirLLnl,ienisdrci lllt$ urrlasst,(lnlhlih Zjdzl dic Adflrsset,, ZMi-4rdcän E" vorBulxtr!ü1 1ve(lcn lts nuss cNtcns (lnr ÄDzrhl -8,ll dcr I'ro'zcsre nDrsdi Driiss(nr nr (lef \!ori($( lügc trtt 1crhöIii $t(lcD. rvrrsirr (Lor Zcilor /,, / l/'/ eoschichl Zwc'k$s llolloi ru wclcho Shllccirnr $cd(ir Es sPicllik rnussPr ir di(i $]llcsclil,urgc cjngofiiS! gcliiß wirl, (lt bci .n(r! SiSnal dllc l\'oz.stso{us do Wrtri,$chhDgccrtlbrni wc(tcn,'l)ts [{xn (l.shall) (lic b.qtrorsic Sidk] ao,onrnnr wcllcn, rrinrlich do Antüts dcr lvtltcschl^'! rc. llikl 6.5 aibi dn. Konstclhli(tr vor un(l rtrdr dcN ilhliiAcn ir (lic Wär'i$(ilnangcwi*l(' iiomrl k','i air, cu'hctrc oDor{rion rls ft! ' Dl ' Eil ' r> bezeichnoilvcnl'n' däl)ci isl (lcr dni Rcihcnblsc wichtigl Alki nreskar! hi.r loi(ltl,iibos.ho wcr.lcr, düs d'r csr(' Lil inr lh)zcssri'rg Orefrli.tr, rlrc rg ,- ,Ei , noch8rr rri(ilnansscfiihrlivcekxi l znr sPü|.rcDVer$tnduns mit.s:2 DachX koPi'rt" Xs isi nxr .lcr P()zessscchsellortzuscizer' Da dic Arl dcs W'{lNels davo! dbhüDst,wieviel Pr.zesscsich in, Bjis bcfin(lex (Pr no.L cirecs.hlossen)'wird rls Nöchstesin d'n ZeilcD 2/rn 20.t .lic vod SvFrcn,verwalhn: Zdl P d{rraklivcn firozesseum I lerxind'ri Abliänsi8 Werl von P ergebcnsi.h drei XonstelldtioncD,die iD lJikl 6 6 eczcist lon ulon,ndoic! P rt = I Bild 6.6 ober Der Prozcssrirgenthült rür eiDcnPtuzess.tis sibi k.iDc Verkei'lunsim Rüg und der Pfoz€slvc..lNelist lDteftirücli tl h Tnro2 ist äbg.schaltet) Das SvsterLgchi in 'Len
r'rn die Proz'rsscaus d'ir scnonmen lomrl es je{lo(h sehr rcbl äüI die Stell' ur, d€nn w'Tden bä'Bt' di' Stehrng nn Prozessring.ingefügi ünd in d{r h.rnuseeDomm{r, $Jark,s.l,lmCe Proz.ssrins;ahirlich 1on d.i. St€lhns ni d€r Wnrt.schlans€ ü Dieses'OS" k€n't rbd l€ine .1,h. lc Stell€nnn Prozesernrgterden als glci'hwertig nnges€hen' Prozessprnrilä1,€n,
':G€nau
6. STTMOS Abbilduns 6.5.:Einfiisenvon & am Anfane dar wäxtcschlanscvon E"
E,fr_l
^
Prr"
Prr, ":
-[-[
r-----ffi-T
E"fl_-l ",
. ^ Pr'r
Prr"
a?
. Pr'r.
L]t]L
P"i, = 2 Bild 6.6 Mill€ Dje beiden Plozesscim Rnlg sind a,rt sDczicllcArt vcrkcttctr Beidepotuter jeder PIT zoiscnouf dic jcwcils andcrc PIT. P! isi bcsonderseirfa.h zu eDtfernen,da lach der DDitcrnungkcinc Vcrkcttung mchr nötig ist. Timer2 ist abzNchalien, da kcin P!o2csswcchsel mchr statiffndet. Der verbleibendeProz$s tut zun laufeudenProzcsszü P"k > 2 Bild 6.6 unten Da de. Prozessringürch. ab zwei Prozcssecnthlul, mussPr unijo voll$ Bcdicksichrigung der Vcrketiung aus dcm Ring cntfcmi weldcn. Der Proz$s, der auf Pz jln Fjug folste, isi zum laxfcndenPro,esszu nachen. Im lall Par! = I cnthült nach Zeile 2rl Registerrra den Wert 00. Däs wird in Zeile 9r, ecpriili und bei Zutfefien i\.li,e Zei,le223 le%wei3t, rib welcler de! FÄll behandelivird. Dic Behändlunsistextrem eiüf€ch,eswird lediglichdi€ üocLaussteheüde Teilopc|al,ionr: * .E: aNgeführt uüd darm den Prog$mmtcil vüzwcigl, der das Sysicmin dcn Lccrlaufiiberfühft (Zeile lrl). Nach deü Zeilcn 198 199 i6i r3,r = "85 uDd nach Zcilc 2r2 isi a = r:, in den Ze\len223 22.1wird also wirklich dic noch ousstchcndc'tbilopcfationdurchsefühlt. GiLt in Zcilc 2rd nicbt !r, = 00, Bowird.ra noch eiDnElvexDindelt,un in Zeile 2r, P.r - 2 zu prüfcn. Ist nachZeile2r7 alsotra : 00, so jst Ptrr,= 2 urld es wird in Zeile908 iD die Zeilc 226 veMweist,ab der die Rnigkonsielhiionvon Bild 6.6 Miti,e behandeltvird. Dcn Bild kaDn ertnomrnenwerden,dasslediglichdie einfacheOperaiiona> - ri aNCcführi wodeD m!$. Diesewird in detr Zeiler 226 92? drdurch vorbefeiiet,dss ReejsierZ mit rB ecLailcnwird. der Opelatidt RegisierY enihäli r> noch von dcn Zcilcn 161 189 hcr. Vor dem AbschLuss wird aber noch in den Zcilcn 998 93, d6 tsit 0cIE2 : 0 iD ReciBierRr MsKcelöscht.Danii ist Timo2 nicht nehr in der Lase, einen Compde Mat.ji-Interrüpt zu erzeu8en,d.h. der tuehr staitlinden. lntcrrupi wird enifdhist. folslich können keine Prozessorunschaliungetr l)arauf folgt Näch dem Sprun8in die Zeile 218 wird dje OperatioD-> - ri abgcschlossc!. aucL hier noch die Durchführunsdcf Tcilopcratio! r; - €:, bevor zrm abschließenden in die Zeile 56 gesprunsenwird. Teil des PrczcsswechEels Isi in Zeile2118nicht ta :00, so liest die dllslm€ineKohtellation von Bild 6.6 lnieD vor. Da
146
6.6. Erwarten und Sisnalisiercn von Ercignßsen Abbildung 6.6.:Die drei Konstellationenbeim Lösch€nim ProzesriDg PITI
Pi l'r
Y noch von den Zeilen J81-182 her 7> enihält, wird in dcn Zcilen 2A9 210 Regi'stcfz m\t tr9 selÄd-n.üs(l :eßcrdin den Zrilru 2ll-e13 Rcsihto Y mir t: dab(i Rcs'sr.r r2s iihtr .lar'Ux,weg rr.. folgli.h wir,l iu dex ZciLc, 2?l-2,'i diF OpLrdLio0trl- - tr! und in Jc! folsendenbeiden Zeilen dle Operaiion 'l3< + r: durclis€führi Danit ist Pr lollstä.ndis in dcn aus dcm Prozcsslingertferni,.Wic in do mittlercn Ko sijellaiionvird anschlietlend Zeilcr 218-219 der P, im Rins nachfolsendeProzesszuln l&ufcndenProzessSema.hi) e6 Tcilopefethn dulchgetirhrtuDdznm AbschlussdesProzessrvcchsels whd die nochausstehende Prozessewcrden zwar einzeln in dic Warteschlangeeines Ercignisseseirgefügt, dicsc wird jcdoch vollst:indig seleort, wcnn das Ereisnis sisnalisiort wird, delrn jeder Prozcss in dcr Warteschlarge wartct auf däs n:ichste Dleigni$. Der Befehl Sossisnal beeinni in Zeile 232 Er hat zue$i ztr prüfen, ob die Wütechlanse lcer iBt. Ist das der Fa.ll,so ist seiDeAufgsbe schonbecDdet.Die Püfung kün mii Hilfe der llesister r31, r3o ünd r2e geschehe!,die bei Eintdii in den Befehlohte weiijereAkiionen zur Verfügutrg steheD. Die Ze\len 232-239, in denenRaister Z mit der Adre$e von ,8. geladet wird, enisprechengenauden Zeilen 187 191.\n Zeile 2tr0 w'trd lolelich rre njt -S"l gel+ den ünd in der foleenden zeile auf den Wert Null geprüfi. Ist "&,1 = 0, so wird d€r Befehl soscbdNixans€prungen,der in dcn rufendenProze$ mit , = 1 zurückl<ehrtitm anzuzei seD, dss kein Prozessgeweckt verden konnte. Daß sossl8lar auf eire leere Wartes.nhnge tif, ist zwar keine Fehlerbedingung per se, doch kann die Kenntnis diescr thtsa.Ie fü den signdisierendcn Prozesssehr trützlich sein. jn Isi lE. | > 0, Bowerdendie Inhaltc der Registerr2s bis ro und dcr Inhalt desStapelzeigerB
147
6. SLIMOS die PIT des laufenden PmzessesPr = P'> kopigtt. Dje Zeien 2.14 957 entsprcchcn nahezu vollständisdcn ZeiLenlZ l8d, es konmt nur hlnzu, dms E.ll vor rro nrch ra umgespeiDie Hauptauf&be bestehtnün da.ii, die PITS aus der Warielisie herauszulös€n ünd in d€n ProzeesringehzufüBer. Dieser Vorgarg lfrn wle folgi besclrieben weiden. Es sei p dje Adres se der ersten PIT in Prozssringj also p: n>) es s€i.l di€ Adressed€r ersicn PIT in dcr warielist€ des Ereisnjsses,also ): -85, und 6 sei J: p im FalLP:1, abcr r: p' falls P > 2. Dann Binddic folscndcnOpcfationcn E" 'mal auszuführcn: (6.ra) (6.1b) (6.1c) (6.1d) (6.1.) Zur VcrvoLlrtändigungder Ringverketiungmüssensich noch die Operationen,rF + d uüd Bild 6.7 sibi die Siiustioner vor und neh eiren Durcliaufer der Schriil,e(6.1a) bb (6.1e) wi€der. Lirks jsl, der P!oze$!ing, reclrtsdie Warteltutezu sehcn.ObeDisl dic Situaiion vor und uDicn dic Siluoiion nach cincn Durchloufcr dcr Schriitc dareesicllt. In (ti.la) wird in Abbildung 6.7.: Umspciclrerr ciner WalieschbDge in den Prozessring PITT
=r-T-*t--l
PIT.]
\
PITI
^
PITv
==
tttl PITA
PITB
-L
_r- PITV
tr
n Damit ist o die Adrerseder auf PITU in der Wdieliste folgendenPIT zwischengespeicherl. PITr ftei ünd PITU kmn n t den sclriiten (6.1b) und (6.1c)an den Anfans desProzcssrinss gesetztwerden.Anschließendwird im Schriti (6.1b) p wicder auf die AdrGsc der erstenPIT im Rins seseizi und im Schdit (6.1c) wifd .\ auf dic Adresseder nun erBienPIT i! der Warieschlalse sesetzt. Der Rins bleibt links von PiTü allerdings ofen. Diese Lücke wird ersi seschlossen,wenn alle PITS aus der Wtuteliste sukzessivear den Anlang d6 Rnrges gesielli Die Umsetzungin Code beginnt damit, dss in dcn Zcilcn 9r8 959 Resisterr1:o mit der
148
6 6. Eri'axterr und Sr?naüsierd
rcn ErcisnisseD
Adresse der e$ten PIT in der Wartelisie gcla.denwird, aDschließendwird '9" in der Zeiien - 0 dtrrchceführl D6m sird-in zeile 26a-261 aelösc}rt'd.h- es wird die operation l'' : i, also für den Fall' dass dcr Rins nur 262 FLes\Jer z m\t ^- E eeladen Fü! der Fall P F6ll wird jn Zeile 963 Registerr2o nöiig Aufjeden einenP;ozessenthä1i,3sjnd Vorarbeiten 2 verglichen Gilt P < 2' so wird P mit rird dann Zeile nehfolgenden In der nit P seladen. 'llmer2 zurüc.kges€tzt und der ComPare Mai"llnterrupt betähigt' in den Zeilen 266 272 isi Befähigung Die von P. Selaiten' anschlielendwifd rs:2 nit der ^dresse p: r> d€r PI'll wiedd zuselassn wird, also unterdrückt I dic Prozssumschhliune deshalbnötig,@il bci P we.aen muss,aa nach aer Umspeich€NnsP > l gili Isi aber P > 2 so vird r3:, in den Z.\ler 2'15 2'/6 mit p = ß: Ce]Anet\' wird, mu$ vorber RegiBterra enthält ,.11. Da €sin clo ktnDenden Schl€ifcherüniergezäh1t mit d€m ä1tcnWert in Zcile 263 r2o wd widen von P berechnet in Zeib z77 det neu€ Wert wolden. P von seLarlen aife,welchedie Schrilic (6 ls) bis (o 1e)obiscr Operationrealbieri' ümrsst Die P;ralnnscl |
FFI
- t=l= -H
niiidcst zü dokunentiefer. wjfd h dcD Zcilcn td3 atr;t das Fehlerb$e trrn 1 crhdht, d.sscn Adresse in F€gisier Y übeqcbcD wurlc. Ans.ihlielend werden dle Sercttctcn llcgister anl die übli.he Weise rcstaurict, be()f nL das urlerbrochene Prosranrm (cin Prozess oder.tef Leerlaul) zurücksclch,r wird. Es Nnd lichi nr die IsR zurückscsDrrnsenl
160
6-8. I'lie
upfs
Bci nicht leerer Wdteljste wird in Zeile 67, der neue Wert von .E in d6 Eleignis kopiert. Anschließend wird r2? mit der An?ahl P der Prozesse id Pro?esrins eelai1en.Ist P - 0, so vurde der Leerlauf unt€rbrochen, und es stehen alle Reglster zur Ve üsuns. Bei P > 0 wüde jedoch ein Prcze$ unierblochen, es muss aLsoein gdzer Proze$wchrel durchgcführr werdenund nicht nur ein halber wie bei P - 0. D6 bedeutel die übliche P.ozedur.wie sie ]n den Zejler 67.1-686 dltrchgeführt wj!d) also das Reiten der Register in den lokalen SiapeL, für die d6 nicht bereitsgeschehen ist, uDd dN Kopiqeq des Stapelzeigesselbsiin die PIT des unterbrochenen Prozesses-Zusätzlich wird hier aber die Adrcssc dieser PIT ii Zeile 676 im Doppel-8hlpr lür .pälar zqischp'cespeichpn Ab Nüchsteswird die erstePIT in der Wartelistevon E aus der Lisie heraNgenommen.Dazu wird h den Zeilen d88-689 Regtute!Y mit der Adressede! erstenPIT aus der Lisie eelsden: Y * ,E>. In der nächstenvier Zeilen wird dann die Operation -A' + E'6 aüsseftihrt. Anschlioßend wird Resist€r z mit der Adlesse der herausselösi€n PIT e€laden. Die aus dcr Wuieschlege hersusgenommanePIT nuss in den Prozessring €ingefügt werden. Ad und Weise des EinfüseN richte! sich nach de. Anzall P der Prozesseim Ring. Es @rden die Fitlle P:0, P = l und P > 2 gesondcrtbetlehiei. Abbildung 6.10 zeiet die drei Konsiellaiionenloben für P = 0, in der Miite für P = l und unten für P > 2. G6nz links ist die neuePIT nii der Adrass€r zu sehen.in der Mitte wird der hier wesentlicheTeil das Proze$rings vor und rechis na.h den Einfügen der PIT in den Ring gezeist. Das Velzweisen nach dem Weri von P geschi€hi in den Zeilen 695-692 Es wird P nit 1 verslichen, bei P = I in die Zeile 709 und bei P > l in die Z€ile Tlr sosprungen.Zwaf sibi es keinenB€fahl,der dileki bei P > 1!€rz*aigt, abe! die Velzweisunsbei P > t hat hie! ebendieen Eflekt, da der Fall P = I in der vorisen ZoileschoDabsefaneenwurde. Bei P < 1, &lsoefiektiv P = 0, gehi es dileki mii Zeile 698 wait€r. An BiLd 6.10 kann abserescnwerden!wa zu tun ktr P F 1 und .> F r. Erster$ wird in don Zeilen 698-699. Letztercsjn den beid€nfolsendenZejlenausgeführt.Da aLleVomusserzungon fü! den zreften Tbil einesProzesswechsels sesebensind, ka.nndiese!in Zeile 7rz anscsprung€nund durch" Im Fati P = r, der ab zeile 7ri abgehandeltwird, wird vor dem Einfüsen der PIT Timer2 wieder befähigt, da b€i zwei Prozessender Prozesswechselunter akiiven Prozessenwieder einseschalietwerd€nmus. Anschließendwird in Zeile 7ll nesisier Y mit d€! Adr$se ^ der au6 der Warteliste a$gelöst€n PIT gelader, die iD Zeil€ 687 in Doppelr€eiste!h1r1o zwbchensespeichert wold€n wd. Wird mii ra die Adresseder PIT bezeiclmet.die sich im Proze$r:ns beffnder(und welch€die PIT de6unierbroclrerenProzesses ist), 60 strd die folSendenOperationendurchzuführe.l
tr *r
Zeller 712 "%3 Zeile\ 711 715 Zetlc\ 16-717 Zeilen 718 719
Kur2 gesagi mü$en alle pojnis einer PIT auf die andcrc PIT 2eigen. Ist daB ausgeführi, so mNS noch wie im Fbll P = 0 der iD den Ring übernomnene Prouss ,un laufenden Prozess semacht werden, bevor der in Zeile 67l begomene PmzesswechBelabgeschlo$enwerden kann. Außerdemist noch P anzrpassen.Der Sprungin Zeile 79, führt deshalbin den Fall P - 0 lm verbleibenden Fall P > 2 wird in den Zeiletr 7rl 729 zuerst P angep4st, dau wie obcn Resistef Y mit der Adresse - seladcn. Anschließed werden nach Bild 6.10 die folsenden
161
d. SLIMOS durchgetührt: fünf Zuweisunseoperationen X - '; t< * r:
Zetlcn 724 -'t25 zeilen 726 '/2"/ Z.llen '128 729
r:"
*a
Zeilen ßA 731 Zc en '/32 733
lm Bild isl n; mii d bezeichlet. Die lelztc OperatioDwjrd mit RegisterX dürchgefübtt' das ia in dcn Z€ilen 72.1 '/25 mit ßX scladen wuide. Zum Schluss wird no.Ä der €ingciiigte Ptozesssemachi(Zeiler rul 735),helor auchhier der Prozcaswe'l߀l Proiesszuü lauf€n.1en vervoLlsiändig|werdonkann Eine ISR, dic cin Ereignis sisnalisierer will, muss nrltiirlich beiü llnprins€n dts Unterprogamms sossiglDt die von ihm gcforderten ParrnleLer übcrecben, elso dic Aclresie 0 jn zeile 322 mßa Pt blockiert w€rde . Dozu wird wie gewohntin den ZeileD durchscfüh Dab€i wild Y nii der Adresse 92l-,997 d$ crste Teil einesProzesswechseis n'> der PIf von Pr geladen(Zeilen 332-339). Atrßcrdemwird S! in !a umgeladen(Zeilc 391), da r,o als Tejl voD Y seb.äuchtwjrd Als Nächstes wird die PIT von P, in die Warteiiste des Senlaphors eins€fügi, UIn die Komplexitrit d€s Prcgrarnms nicht noch wciter zu erliöhen, gcschiehi das aln Anfong de! List€. Die$ebekomni so €ine L]Fo-Charakte|istik3,d.h der Prozess,der zuleizt in die Wdteliste eingefügtwird, verldlst sie zue$i Es liegt hier eine Situation vor, wie sie in Bild 6 5 Sezeici Da sich wird. Dic drci auszufiilirendcnopemtioneDsind ?! ts s? , sf *'>undsI:sI P! noch im Prczessrinsbeffndet,kaü tür dic clsie Ope.aiion tr = rf nicht überschdcben wcrdenuud wirddeshalbin deDZeilen338 339 j! Doppelregjsier12612.zwischeng6Deichert Enthült der Prozessringmehr als ehen Prozess,so ist tr dic Ad.eBseder PIT des im RiDgäuf P? folsendenProzessee. Die Operaiion r! + 53 müssallefdingsnur dmn durchseführii werden, wenn Si > 0 gilt, wenn also die Wärtelisre nicht leer ist. Diese Bedingung wird nI Zeile 31, abgefrast, ist sie erfülLt, so wird die Operation i! den Zeilen 312 45 ausgeführi. s5 * Si wird darr in den Zetle\ 316 317 und S! e n> in den nächste! beiden zeilen Die !ächste Aufgabe isi, Pr aüs dem ProzcssriDs zu etrifern€n DieBerVor8dg {urde in Abschnitt 6.6 eingehend erläuieri, man veryleiche dort bcsonders Bild 6 6 TAll€rdingskoinensaM b€stinn,tc!, sondernnür irsend.imr der wdtenden P.ozese.
165
6. SLIMOS Noch eine Bemerküng zu den Zeilen 363-t6l: Die beiden Befehle steh€n statt der nicht vor handenen Befehlestd x+oplitsodN*t,!30 und stdl oppitso6N*t+1,!31, der Kommcntar Di€ Implementierung von Sosunlock bringt außer der B€ha.ndlun€j von ,s; nur be reits Bekanntes, die Er1ä terungen sind deshalb kurz gefasst Der Befehl sosu!1ock beBinni in ZeiLe377 mit der Berechnunsvo! "4(St in Z (für eine genaueBeschrcibungdesVorgügs sichez.B. die Zeilen 187 191) Ia Zeile 385wit l.la@ 126 dii der ZählErjable S| des Semaphorsgeladen. Es köDnen drei FÄlle unteßchi€den rerden:
si>1
Die Warielisie des Semaphorsist nichi 1eer.Dje erste PIT wird hcrausgelöst uDd in den Ring eingefügt. Der ldüf€nde Pfozess Pr verläist die kdtbche R€gion
-128<Si 0 soerfolstnochin dcn Zeilen1.19-193dic OperetionSf € tD beginnt\n Zeile42.1 PIT in denProzessring DasEinfüsend€! ausder Listeherauseclösien dämii, dassRcsisterZ ntit ihrer Adressetr g€lädenwird. DasweiteleVorsehenhit st davon enihäli.Dslässtsichuitiels ab, ob der Pro,essling senaucincnode!!rchr alaeinenProzess besonde$ Bild 6 10Mitte undunien,lcicht Hiif€ von Abschniit 6.8, Kommentsre und nii der wird auf Abschnitt 5 3.3 zudckg€gdfien Dort vcrwenFü ein Beispiclprogramm den zwei Prozessed€n ADC. Dicser besitzt zwar acht (anäle zur Analog-DigitalUmwondlune, die äber gemultiplext sind, so dassnicht üehrere Uml,'andlungen gleichzeitig vorgcnommen werden köulre4 Der Zupill auf den ADC ist a.isourit kritischen Ferncrwird das Ergebnisdcl UnNändlungennicht wie in AbRegioncnabzusichern. ermittelt, sonderndurch den ADc-Interrupt schnitt 5.3.3durch eine Ab{raseschleife alsdasEirtreten einesErcigrissessignalisiefi.Dds Progrärnmist alsoauchein Beispiel für Abschnitt 6.8. Wio in Abschnitt 6.6 wzirees auch hier mö8lich, fiir alle Prczesso,die eine Unwand1üg vornehmen, ctn€ Prozessfunktion zu verwenden Es vird aber die andereMcttiode demonstdert,nämlichjedem Prozessseire eigeneFunktion zu geben Das Programm wird daduch einfacher. aber es ist viel Code mehrfäch vorhänden Z B müss einem Prozessniclit die Kanalnummcr nitgeteilt werden, die er verwendensoli, er kennt sie
166
6.9. Semaphorc schonoder bessergesagt, seine Prozesstunktion kennt sie. Die Umwandlungsergebnisseweden wieder über die sei€lle Schnittstelle an ein LoD-Display aüsg€gebenünd zwax in hexadezimalerForm. Jeder Prczess schreibt in seine eigene Zeile. Der Zugdtr auf die serielle Schnittstelle muss ebenfalls durch eine kritische R€gion gegenMehdachzugdtr abgesichertverden. Die Prozessesind aber zu schnell für das LoD-Display, sie v€rbringen deshalb einiga Zeit in einer Warteschleife. Die Aufenthaltsdauer in der Schleife ist von einer Zu{ailsza.hlabhitngig, um etiras Variabilität in daß Progrämm zu bringen; so können sich keine periodischan Vory:inge Ebenfalls der Variabilität wegenwird noch ein \'€iterer Prozesseingeführt, der alIedings seinemeiste Zeit in einer Warteschleifezubringt. Auch deren D6uer hängt von einerZufallsza.lab, dic der Prozcs$über die serielleSchnittstellean dasLCD-Display übergibt, um den beiden Umwandlungsprozessenetwas Konkurrenz zu verschafien. Jeder Prozess6etzt vor dem Versuch,eine kritßche Regionzu betreten, ein ihm zugeordnetes Bit von PORTC, und er löschtdi€s6 Bit wieder,sobalder die R€gion betreten hat. Werden Leuchtdioden an PORTC a.ng$chlossen,kenn das Verha.ltender Prozessebei den kritischen Regionen bcobachtat werden. Falls die kritische R€gion ohneBlockierungbetretenweldenkann,ist dasAufblitzenzu kurz, um deutlichwahrganommenzu werden,Blockierun8ensind eber gut zu erkennen(sieheäuch dic ouf die Programmerläuterungen folgendenBemerkungen). I 2 , 4
5 7 8 I 11
. includ€ n128d€f,inc" . ir|clud€ nakroa.avrrl .d6vlc€ ATn€9a128 .dgeg D3. Arb€ii8spoiohor d6 ATm.B.128bosinntbci 1001
. org .equ .irclud€ .iDclud€ .includ€ . incLude .ilclude Dio vor*c.dctcn l.diz$
12 13 15
0x100 AddRndRiB = 0x100 v€cü128,avl" addzg.avr" sos.av!" filo.avr" s € r 1 2 8 .a v r "
rcn Semopioren und Et€isnhss!
.€qu
€aDc= 8
.6qu .squ .dseg
gADC= 0 SSER= 1
Die in SLIMOS eingebundeneISR dG ^DC (Intorüpt
16 bAdcMiss r .byt€ 17 ,c6eg 18 ADCbdl!: pu6b2 19 in pusb3 2, 21 Idi
bei Umwandtunsmnde)
1 r31,r30 r30, SREG r30,r29,r28 r30 , LoV (vevesos+3*eADc)
Fehlerbyte(nicht ben.) 4 I 6 1
767
6. SLIMOS r31 , flIcH (vev€Sos+3*eADc)1 1 r28,L0w(bAdcMiss) 1 r29,HIcfi(bAdcMiss) 3 SosIntsig v€cm128 avr" nbpit - 60
].di Ld.i. ld.i jmp .include .6qu .cseg
e.2 23 ,t ei 26 97 28
GemeinsaneGrößeder PITS
D6 Datsßognent des PrograbddFeicheß und daraue abgeleitate Größen
29 v\,rDat: 80 t1 32
.dw .equ .equ ,dseg
Tab dei Proze$prozeduradr' P ByiegrößeDatenbercich
Po,P1,P2 npit = PC - vwDat nbDat = 2't(PC - v\rDat)
Dic D6len8truktulcn in arbsiissp6ichf
33 vplPt 3l vpplt: e5 vptt | 36
Eino wart.ßohloir€ (&?ottal) fiif 0a 13r072tr laktc
t7 Asp€tta: 38 AsP€üo: 39 AsPettl: l, A6p6tt2: tl 12 l3 44 l, .16
ori ldi ldi d€c brne d.c brne aec brn€ tet'
Pro.ess Po fij! KaMl0
17 POt
T.b der Prozssprozeduradr' Tab der PIT'Ad.esen Voktor der PITS
nPitl2 npit*2 nPi.tr,lbPit
.byt€ .byt6 ,byt€ .Caeg
Vbe.sab6 von i it hd
!16,1 117,255 118,255 r18 asp€tt2 rl7 AsP€tt1 116 ABp6tt0
I | | 1 r/2 1 r/2 1 !/2
n 255xh 2 5 5x 2 5 5x n 2x256> die eincr Liste. Die A$emblersymbole, einen dieserListe. er ist selbstkein Bestä.ndteil Schläferbeschrciben.sindin den ZeiIen22-23 zu finden:ontäusos ist dss ofse, von ,i (o stcht für ofsei und ntau für,,Anzahl der Zeiteinhcitcn7") und opslPsos ist da6ofsct von ,> (p31p sieht für pointer üosleePeloder ,,AdresseeinesSchläfars") Dcr Listonkopfder Schläferlistcist in den Zeilen29-90 dcklariert.Er isi formal1vic ein Schlüfcraufgebaut,und dos zu'eiteund driite Bytc cntholtenauch eine Schlüforadrcssc,nürnlichdie Adrcssc.\> deserstenSchlälersdcr Listc, fa.lbdiesenicht ]ccr ist, abcr d8s crste Byle enthält dic Gesarntzahli dcr Schlüferder Liste Dic lccro Liste wird durch , = 0 erkannt.Bikl 6.14zeigbzwei Schläfcrlister,die obereListc ist lcer. vorkett€tenListenbcsitzt die zu allenbisho im Buch vorgekommcncn Im Gcgcrrsätz Dor Adrcssenteil,F deslctztcn Schläfers Schläferliste einensent'in.l,eineSchildwache. dcr List€ ist nicht mchr u bestimml. sondcrncntllält die AdressediescrSchildwa.he ist cin ouf sein elsiesByte gcschNllrpfterSchläfbr,do oüf scinenAdree Der sentr'Del sent€il,falls er cxisticrt€,doch niemalsBczuggeilommenwürde. Allordillgsdient der sentr'nelhier nicht dazu, das Dnde dor Schläferlislezu erkenncn.Sei e Aufgabe ist Di"se i.' vielmehr.dü* EintügeneinFsr.hlätcr. in 'lie Sc\lährli.F 7u bctschl(un;gen nämlich.wit du, BjLdauchvFrmur,nIÄ"t, ',achdFr Crößcdcr Ei,l'e'ten/bhlcr-L! sortiert. Hnt dcr sextjrel, was dic Soriierungangeht,den Wcrt oo, so ]?isstsich cin Schläfcran passenderStellc in die l,isie einfügen,ohnc da$ auf das Dnde dcr Liste gcachtct werden muss. Dassdia Liste überhauptsorticrt voryehaltenwjrd, ist zunzichstnicht zu verstohon Denn die ISR desTimers, der ftir dia Eüeugung der pe odischonInterrupts ausgew:il t It je durchlaufen,dä der Einheitenzähler wurdc, mussstetsdie gesamtcSchläferliste dcs Listenelementes zu dekronentierenist. Dassdie Ei eitenzählerder Größcxäch deren Einheitonzähler sortiert sird. bletet da koincn Vort€il. SolcheListcnclemente, nach der Dekrementicrune den Wert 00 hat, müssen aber äus der Schlä{crlhie herausgenommen und die zugeordnetenProzessein den Prozessdngentge{ügtwerden Dieseschonredlt komplexenVorgiin8e,a deneneineVielzahlvon Adressenbeteiliet X, Yund Z durchgeführtwerden-Hinzu sind, musse mit den drei Adrcssregistern
6. SITMOS kommt, dassRegistcrX noch nichi einnal die in di€semKontext besondersgeeigne einsetzbarist. beheuscht,also nur beschränkials Adressregister ie Adressicrungsart Da erweist es sich als eine große Erleichtemng, dass bei der geordn€ten Schläfcrliste das Durchlaufen und das Herausnehmenchcs Schläfersgetrennt ausgeführt verden könnan.Dcnn die herauszunehmenden Schläfcrbildenmit -t{ = 0 den Anfans dcr Lidurchlaufenwerden.die aufzuwcckenden stc. Die Liste kann alsozum Dekrementicren und ihr Prozcssin d€n Schlä{erkönnendann am Anfans dcl Liste herausg€nommen Prozessringeingefügtwerden. Mit dem Befehl Sossleep kann sich ein Prozessin die Liste dcr Schl:i{ereinfüsen lassen.Die Schlafenszcitist tr. Die Zeiieinheitr wird boim Systemstaxt€ingestellt (7 = 10rns),die Zahl, wird in Regßterri übcrBcbcn. besjnniin Zeil€l8l mit der Prüfrns,ob der Sonderf.lli:0 vorliest. Dcr Befehlsoss166p fest allerdi4smjt t = r, damitder Prozess Ibll, ja, wird h denProzess zurückgesprungen, nichi. ksDn. ob e! blockicft wurde oder stellen eingeleitet Isi i > 0, so wird ab Zeile 48'/ bis Ze\le499 der ers|eToil cin$ Prozesswechsels Proz$sesA. Bild 615 '> = tr der PIT desnochlaufenden D&Da.henthöLtY d'e Adr€sse mit dorAdresse wieder.LinkstutdiePIT vonP{ gezeigt, obengibt die Ausgang$konstellation trr der im Rins vorengehonden PIT Rechis rr der in Rins nehfolsendenund dcr Adresse ist die Lbte de! Schlälcrzu sehen. rlro mii, 504-501Doppehesisie! Der ProzessE wird bei Pr seöfinet,indemin denZ€i,len Abbildung 6.15.rEin Prozcsswird SchläJer(, = 7)
ffiffi8-tr E|^'l-*Eu-x*Et--l-l-.l Y 17
I
L _^!_r--\-
ffir4r-ffi8---l
776
6.10. Schläfet
tr" und in den nü.hsi€n bcide! Zeilenrs:. mit tri geladenwird. Die erstenvier Bvles der PIT von P? sind jetzt frei, die ersien drci können als Schläfcrbenutzt werden Bild 6-15 Nlitie zeigt liDks den geöfileten Rlng, rcchts unter der Schiäfcrliste die PIT mii dcm echonteilweise dabei jsi i = 7 äneenommcnJn den Zellen 5A4 505 wind Z mit .Lt aüfgebautenSchl6.fer, A.lress€desListenkopfesder Schläferliste8€laden.in den nä.hstendrei Zeilenwird die Anzahl d€r SchLäfe!im Lisi€nkopf um Eins erhöhi Als Nälhsies wird die Dinfüg€sielle gesucht Die isi so aufecbaut,dßs RegisierX die Adresse) des laufendenund Z dic Adresse Suchschleife €nthäLt.ln Bild 6 15 Mitte sind X und Z in der Stellungzü voräng€hendcn Sc.hläfers I" des schen,die sie nach dcn Entdeck€ndcr Einfügestelleeinnehmen. In der Zeilen 5r, 5lil vird F€sjster X mii der Adrcssedes eist€n Scliläfcrsder Lisi€ gela' d€n, damit hst X b€i Eintritt in die Schl€ifein ZcjLe511 den richligcn Wert, es zeigl,aul den SchLäferz€i8en)d€n $ 8ar nicht laufcndenSchlÄf€!.Nun müsste Z auf dcn vorangehendeD Listenkopf Der Listenkopl hal abcr die gleiche ouf den .lessen zeigt dLs R€gisler stati sibt, StNkiur wie ein Schläferund seh zNeitesünd driit€s Bytc onihaltenauch die Adrerseeines Schlüfers,d.h. dcl Lisienkopf kann ak,,vorürgehendcrSchläfei' DienBttun In der Schleifcwird ä16€lstes(Zcile 511) die Einhcitcnzahl^r des laufendcnSchlüIersin R€sßter !a geladenund dann mit, v€rslichen.Gilt )r > t, so ist dje Einfüscstelleoffenbarschon jn d€r Liste sefundenund die Schl€ifekAnn in Zeile 513 varlosscnverden Andcrnfallsnu$ : e mit ) )> in den zeilen in ZeiLe 5ll ünd miL )! ) vorsütic.kt welden Dos Seschieht wird Die Schleifekärn uichl Jl5-516, bevor an dcn AnfMg der Schleifezurückg€sprunsen weden, do dic Bedirsung )r > , mindesienseinmal erlülli isi, näimlich zur Endlosschlcife dann, w€nn am Ende der Listc de! $e't'trel zum laufcnden Schläf€r gcworden ist NachdernVerlässende! Schlcifewild de. noucSchläferin die Liste einsefüsi WeDnhieÜr als irncrp_crinrrsird. qit das dN OfErationen7> - ) rZrilcu Jld-5lJj) cira Scl"löfnradrFhde tr! * , (ZeiLe59, ) und .\i + n @eilcn521-522). Blld 6.15 \ntcn rcchtszeisi dic vüsrttßerte SchLöferliste. aN dem Prozessrinszu v€F Prozcsses Ds bleibi noch, dic }lerausns]nledes cinseschlöferi,en vollständi8€n.Bild 6.15unten links zciet dasErg€bnislijr den F&I Ar! > 3 Da dieserVorgans schonarcfirhrlicherläut€ri wtrrde,wird hier auf wciide Erkläru gen verzichtet. Zur periodischen E vcckung von Schlüforn, deren Schlofzcit abgelaulen ist, wird die ISn des Compare MätcI jnferrupt von Tim€ro verwendct. Di$e durchläuft die Ljsie dcr Schläfereinmal, um alle Zeiteinhcitcüzähl€r zu dekremcdieren. Die Schlüfer,deren Zäl €r dabei dcn Wcrt 0 annimmt, sind am Anfang dcl Li6te zu linden, da die List€ nach der Größe dicscr Zähler sorticrt vorliegt Wie schon in Abschnitt 6.8 bomcrkt, erwarten Interruptg, die in das System intogriert sind, drlsssie einen Pmzcss oder den Leerlarf urierbrechen. Unabhä gig laufcnde, nichi ill das System cingebundene ISIis diirfeü sich deshalb nicht selbst untcrbreDie ISR des Conparc Matcl irreDüpt vo! Tjner0 zur ENcckung von Schläfern begnüi in Zcile 516.dä svsiemkonformmit der in Abschnitt 6 8 erläutcftenStandüdfolgevon Befelilen (Ze;ler 516-5161.Da e. ziemlichoft vo.koüüetr dürfic, dds gär keine Schläfervorhanden in R.giBterr2e geladenund anf den Werr NuLl sind. wird als Ersiesdie Anzahl, der S.-]Lläfer geprüft. Bci ,:0 kann die ISR direki wieder über die Zeilei 552 ö5, verlassenwerdcn. dutuhlaufen Bjld 6:16oben z.iet eine ist , > 0. Bowird als Nächsiesdje Lisie der SchLäfer zu sein braucht, wird ddrauf abgelaufen die Zeit kcines Schlüfers typjscheSchläferliste.Da ln den Zeilen 557 558 wird zu vcNenden Minirnum an Registern nur d6 absolDte sea.htei, Rlgister Z mit der Ad.esse .\ des ersren SchläfcN sela.den, da beim llufchlduf durch die Schleife Z die Adresse ^ des laufenden Schläferselthält: Z * ,\ = ,\> Ans-l ießend wird r's
t77
6. SLIMOS Abbilduns6.16.:Die E1 n8hmFvonScLlahrn
FT__l_=rT__l-rT__l-FT__l-tr FT--l- tiT--r- FT__l- FT__l- tr
FT-r-FT--r-tr hit der Anzaht lo der ve.bleibendenZciteinh€itendiesesSchlätersseladenrr,s * fo = )1. In der erstenZeileder Schleife(zeile 56r) wird dio Anzohl da! ZeiteinheiteD)r d€ßlaufenden Schlüferssele6er,aßchließenddekreneniiert und zurtickseschriebcn, donn wnd zur nöchst€n Schlüferad!€sse übergegsngelrZ * )E. Es folgt das Herunterzöhlendes Schlejfenzöhl$srre und d€! RückspNne ar d€n Schleifenütüs, f&l1sder Zähler noch nichi den Weri 00 eüeichi hat. Zü Erinnerungrr,s wurde in Z€i1e519 ni( I, der AnzahLder SchlÄferjseladen.Bild 6.16 Miite zeist die Liste der Schläfernach dem Verlass€nd€r Schl€ife. Die ISn hai ihre Arbeji bereitssetan)falh üo> 1 8ilt, dcnn wenn die Anzahl dcr vcrbloiboüden ZeiteinheitendB e$ien Scliläfersder Lisie bein Durchsansdurch die Liste nicht den Wert Null ansonommenhai, denn auch für keinenanderengchläfer.Nun ist ta \n Ze\le 559 in Rcsisterrrs geladenwordon,rrs e.häli durch den Befehl in Zeile 668 abo den Wert 00 lür to = 1. Das bedcutct, dassbei io > 1 in Zeile 569 nichi velzw€ist und die ISR verldsen In Zeile572 6iehtalsofe6r,dassmindcstenscin Schlöfcrgewccktweden muss.Scl äf€r nitss€n ausder Schldferlisteheraussenomnen und in den Prozc$rins einsefi.istw€rden.Dank der Sortierung ist ds8 Hereusrchmen!.us der Liste einfachrEs wird solargedas erctc Dlehcnt der Listc cnifcrnt. bis da6 erste ElemeDieil)e vo Null v€rschiedene Zeiteinheitenanzshl enthält. Dic Aü dcs Einfüscnsin den Prozessrinshängl wiedervon P abr ob d€r Riüg leer j!* (P = 0), ob er senauein€nProzess(P = 1) odcLob cr nindestcnszwei Proze$eenijhäli (P > 2). Mon versleichehieMu Bild 6.10.JedeDfalls wird in Zcilo ,79 Resisierrri mii P seladen.Nun ]ässij sich ü P auch ablesen,ob ein Ploz€ssunterbrochenwurdc (P > 1) odcr ob dos Sysicm bei der Unierbrcchunsim Leerlaufverlüüte (P = 0), d.h. ob die ersfeHälfte einesProzesswechselsdurchgeführtwerdeDmuss.Das wird iü Zeile 573 gete$iei,ünd bei P > 0 wird in de! ZciLD 575-587 di,esetteilsweisePrczesswechsel auf die übliche Weise auBgeführt.Im Zuge d$ Wechselswird R.gister Y mit do Ädresse der PIT des bufende Prozessesgeladen. Ab Zeile ,88 siehenwieder älle Registerznr Vertugung,wc6lialbdo P in dN Regisierr2s umgespejcheriwird, däs ljcht Teil ejoesAdr$Bregbtersi6t. Ab Zcile 589 wird d6 Heraus nehmenaüs der SchlitferlistevorbereiieirRl8i8ter .a wird mii ,, Z nit de. Adresse) des ersi,en Schläfers der Liste und h:o mit der Adresse )F des eventuelLennzi,chsienSchLüfcrs geladen.in Zeile 591 wird dün der Weri von P geprüfti Bei P : I erfolct ein Spruns in die Zeile 611 und bei P > 1 in die Zeile 639Die ResiBie. werden jetzt wie folgi gcnutztr ra enlhail| ,".", r2s enihÄlt P"-,, Y enth:ilt die Adrese r der zuletzt in den Pro?essrinseingcfügtenPIT (oder diangs r>) und Z enihäli die Adresse .l ds zuletzt aus der Schläferliste heraüssenommenenSchläfers. Jcder owecktc Prozess bekommt seinen Platz vor dem zuletzt eingefügter Prozess, d.h. der zuletzt heraussenomFele Schläferwird zuerstlaufcnderProzess. Der FEll PBri : 0 bt natürlich am einfachsicn zu behandeln. In Zeile 597 wid die Operation
178
6 10. Schläfcr
Preu-Pdr+1:0+1acg€führt,indernüc.liBtenZeile*irdderausderListeherausgeDonnene Schläfer, der ja in einer PIT dgesiedett ist, durch UminterPieiaiion BeinerAdr6se zur zuletzt in den ProzessringeingefügtenPIT (r - l), und in Zeile 599 wird die Operation 1 durchCeführt. Anschließend wird in dd Schläferliste fortseschritienr ) - )" ,"." * rdi (Zeilc 600) ünd rrio - ,\D (ze\tet 602 603) DMn wird sePrüft, ob das HeraNnehmen von ;chHfe'" schon absebroche; werden kann, das ist der Eall bei .\r > 0 Gilt ^l = 0' so muss wciier eingefügt werden und zwar ab Zeile tl?, da der Prozessring jetzi geDaueinen Prozess Im Fell Pdt : 1 ab Zeile 6/l wird zunitchst die periodische Prozessunschalbungdurch Befähijnterüpt' von Timer2 wieder ermöglicht. Dann wird ab Zeile 622 Bung des Compde Matci iD d€n Prozessriog eingefü8t. Bezeichnet tr.\ die als PlT-Adresse umgcdeütete SchläJeradresse ), so werden dio folSenden Opcrationen a$gefühti: rf *,.
zeite\ 622-623
tri -r
zeilea 62.1-625 Ze\lc 626-627 zeilet 6%-ö29 Zeile 630
Es folgcn die OPerAiionen 4-" + P"* + 1 und '*, F LaN - t l\b zcile 633 wird dann in de! S;Hferlßi; vorgerticktund zwar ersi rLir ) 6 )D r dann mit rlro F )> schli€ßlichvird geprüft, ob )r > 0 8ili, ob also berciis alle fälligen Schleferentf€rnt 6ind. Falls nic'ht)gehi es in Zeile 639 w€irer,da jetzt PnN > 2 8ilt. Der Fsll P'u > 1 untelsch€idct sich von Fall P.rr = I nur durch das etwas komPliziertore Einfügenin dcn Prozersrins Es bestehtaus den folseDdenOperationenl zc\let 639-610 ii
-a
ni*tr
zeiten 641-612 zeiten 643-641 Ze\len 615 6.16 zeiten 617-618
Dje zur ZwischenspeicheNns von tr< veMcndete AdlesseN'adable o wird im Prosralnm mii X lealisiert. Na.hdem alle fälli8en Schläfer aus der Liste entferni und in den Proz$sdns eniSetü8i sind' wdden ab Zeile ,rd noch einigelose Endetrverknüpft, bevor in Zcile d13 die Umschaltung zum zuletzt eingcfügtenProzesseingeleitelwjrd Zunächsiwird ab Zeile ,0d dcr Kopf der Schldferlisie auf den DeuestenSiand Sebrachir tr,'"" wlrd als tr abgespeichert und ) äls die neueAdressedeBelsten Schläfers(,\> * )) Dmo wird in den Zeilen d09 610 der Zejseraur die PIT .les iaufenden Prorcss sqeüdi (r> - r), sefolsi von P + Pn*. Schließli.h wird, verlangt,noch Z mit r> sela.ler' wie vom Unterprogrammzu. Prozessumschaltung Die Anwendunssmöglichkeiten {ü Schläfer sind vielfältig AIs Beispiel sei das Erzeügen periodischer Vorgänge geüannt Mar kalln jedoch kcnie große Genauigkeit erwarten. Wenn z.B. zwei Schlä{er zur selben Zeit äufgeweckt werden, so vergeht für einen von ihnen sehr wa]ßcheinlich dä€ Zeitinter"!'all t', bis er zum laufenden Proz$s s'ird. Für Aufgaben, die mit präziscn Zeiten zu lösen sind, siehcn äIl€rdings noch die beiden 16-Bit-Timer ganz zur Ve ngung.
179
6. SLIMOS Das Simulationsprogrämm in Abschnitt 6.12l€nn alsBeispielfür den Gebrauchvon Schläferndienen.
6.11. Der Aulbau der Datenstrukturen und der Systemstart Ercisnisse, Senaphor€, Schläfer und auch der adänsliche Prozessdns werden mit dem Unterpro$amm soslni aufgebaut. Die Riiüä]e und Beftihigungen der vom System verwendeten Interrupts (Timer0 und Tnner2) werden jedoch beim Start des Systems mit Sosstart rusgafiihrt. Durch diese zrveiphasigeInitia.lisierung i6t vor dem eigentiichen Anlauf€n d€s Systems schon dcasen (an{änelichcr) Spcichc crbräuch bckannt. Ds Urterprogramn soElni begimt ir Zeile rrl. Ihn isi in Regi3rer116 die AMshl P der bejm Sysiem8tariaktiv€n Proze$e Po bjs Pp r ,u übergeben,P > 1 RegisterX mNS die Ad!6Bc , anrerTabellemit deD^dxesen ro bis n. 1 der PIT dieserPrc,Bse enllElNen.Die 'IabelLeneiütrikewerdenmit dlpl bezeichnct,0 p P. S < Jedesder e Ereisnissewird mit lE | * 0 und .EF - 0000 hitiolisicrt. In Datcnsirukturcn unge6etzt bedeuiei das) &ss jedes Byie des EreignisvekioNv€v€Sogin Zeilc 27 nit 00 inifiaLisiel|wird.]1 Ds sescliehr i de\ Zei|en804 810. Jedcr Semaphorwird mit S' * -1 und SP - 0000 iniiidiisi€rt, ist na.h dem Auliut von sosht also ein binärcr Semaphor,dcsscnkritische ltosion nur von €inen Proz€$ betrcicn werdenkann. In Detensirukturenumgesctzthcißt das, dassdas ersic Bytc eiucsScnaDhors rrii FF und die nAchsienbeiden mit 00 beleet v€rden müssen.Das geschiehtin den Zeilen 811 819. Bei deü Schläfernist nu. der Listeükopf'ufzubauen.Dtu bedeutet, + 0 und .\> * "4(r-), do es beim Systemstartnoch kenr€Schläfergibt uid die l€r€ Schläferlistemit den ,entnreJ abgcschlosscwerdenmu$. Wieder tu Doieüsilukturan unga8ei,zttut das Byte h Ze:lc 29, ds, cnthlilt, mit 00 zu initialisiercn.Die folecndcnbcidcn Byl,cs,dic Ä> cüthaLtcü,sind mii der Adressede6 nächstenByte6 in Zcilc ,1 ,u bclcscn. DicscsByic ist ,L trnd muss dahd den Wert FF bekommen.,L wird nicht benötigt xnd existicft dahcr auch nicht. Dicsc Zuweisungeü werdeniD detr Zeilen 82, 89d volsenonmen. Es schließr sich der Aufbau des Plozessrinss an." Zuntü:hst wild in Zeile 82'/ die ZahI P der akiiveD Prozesseinitialisieri. Anschließendwird P miij 2 versliclrcn.Fslls P < 2, also P = 1, whd Zcilc 766 ang.sprunllcn.In dieserZeile beginni das UnierprogralnmSosltrtlP zum Aufbau dcs Proz6srins8 mii cincm Prozcs6.h Zeile 830 isi also P > 2, und der Unielprosrammaufrufin diese!ZeileerzeusteinenProze$rins mit den c$tcD bcidcn PITS do Tabelle.Edhäli die Tabellelur zwei Eintrdse, was durch die Subiraktion in Zeile 8rl heF Ausgelundenwird, so isi die Iniiialislerung sclrc! fast beeldet, es wird ln de! Zeilen 8tr9 854 nur noch tr> dje Adresseder tuetreD PIT der Trbelle zugewiesen. Gili jedoch P-2 > 0, so werdeDin der Scllleifeder Zeilen 8,r,t-818 die übriger PITS der Ta. belle in den Prozessrinegebrehi und zwar in umgekelrier Reiherfolge:Die PIT der leizien PIT AdrGse do Tabellc wird zulctzt am Anfang der Lisie eingefügi und damit zur PIT des zuerst laufende! Prozessee. ID Zejle EJ3 wird Y mit der Adre$e tr dcr PIT am Rinsanfans geladen,das ist, außerbeim Betretender SchlejfejdaB11 des vorieenDurchlaufs. AnBchlie ßend wird die nächsie PlT-Adresse 11 as der Tdbelle gelesenund in Register Z geschrieben. rrDje Initialisierurs von -EE ist nicht unbedingi nötig. Ds gilt aüch aür dic St. r2v€rslei.he dazu wied€r Bild 6,10
180
612 Beispiel: Die Simulation einer Tankßtelle Ddn findendie folgendenOperationenBtatt: "i
*"
ni * d
Zeiten836 E37 zeiler 838 639 Ze\ten844-841 zei,tcn842 8tr3 Ze\ten8.15-846
vontr< lm Co{iespielir2!;2r die Rollevon o bei der Z{ischenspeicherung n> die ersteAdresse isi ladislich Es ist simPel; Zeile 786 ab Der AuIba; einesEinproze$lings X zeist Register suf die zuzuw€isen, mit PlT-Adresren der Trbelle autgcbautZunä'hs'wird Y mir.d4?ri" a." Z"ir," lgt 8aq Nnd c:n Zwciprüzessrins Tabelle 8"l8dch D'c sten Adrese r. der Thb'lle d"rrt Z hit d' c zwpilen AJreqser'' dct Op€ratio{ensind dannr rf -^"
zeiten 795 '/06
- ^. """ nE *n
Zeilelt 797-798
^: *rh
Zeilea801 842
Zeilert790-800
db' ob r> die Welche!dar beiden Proz€rsezuersi zum laufendenPlozesswird, hänst davon Adresse tr. oder r! zug€wiesenwird. aktiven Es gibt viele Va &nten des Systemstarts Das System kann z B mit einem System in das und initialisiert Prozesse ProzÄ P. snlaufen, der alann alle weiteren etc l Scmaphole konn nurzcn rErnignisse arU"i scbon clas Svsrcm tJä* Jcder auliubaue! soslnl mir "i"utl"gt gesomten Plozessring Eine andcre Möglichkcit ist. dcx
prozess*uss tiir vo, aem Aufrul von Sosstart 60 weit präinitialisieriwerden'dass wircl cr sich sclbst initialisieren konn, wenn er zum eNten Mal zum laufenden Prozess beginnen Prozesse dass a'tlc ,,gleichzeitig" Zo U*"fltut ist bei dieserStartmethode, ln vielen und Synchronisierungsvorgängemöglicherwciseschwierig zu handhaben sind Wtthl sein bc6te die Methodcn bciden !'älle; wird eine Ko;bination äus
6.12. Beispiel:Di€ SimulationeinerTankstelle Tä$kAls Beispiel ünd Test dicüt ein Pro$amm zur Simulatioü einer Tb'nkstelle Diese €ine Zapfsäul€ und ßt vor stelle-".hat s Zapfsaulen Fithrt zuln Zeitpunkt tÄ ein Kunde *r'a äas Fahrzcug für einen Zeitraum AÄ br:tankt, worauf der Kunde dai'"i, gemacht vonfähri. Ist keine Zapfsäutefrei, so waxtet dcl Kunde darauf, dass cine fioi in '\ Minuten einmal seschehen' wird. Däs Eintretren;ines Kunden soll im Mittel d zwischen dell Eintrefien zweier Kunden ift und 'k+r wird desha]b JJ ,"n"p""* soll also die Verteilungtr,o b€sitzen Der Betanals expo;itialverteilt ängenommen, kungszeitraum Atr wird a]s normalverteilt angenommenmit eirem Mittelwerl.von d Minuten, d h er hat die Vcrteilun8 I rän*e" ,rna einer standardabweichuns von
181
6. SLIMOS Technischwird diescs Szenarium nicht mit Hilfe cines ereignisgest€üertenAnsatzes umgesetztjsondemehera1lJeineprozessorientierte W€ise.Dazukönnendie Strukturen, dic SLIMOS zur Verfügung stellt, direkt genutzt werden. Kunden I(a werden von Prozessen Pl dargestellt,die ein Generatorprozess ,q einmälin.\ Minuten erzeugt.Die Tankstellewid von der kritischenRegioneinesSemaphorsS mit Sx = -i sebildet. Es können also s Prozessedie kritische R€gion betreten,d.h. zapfcn,weiter dazukommendaverden in die Warieschlansc von S einsereiht. Pe Der Generatorprozcss.ü erzeugt am Anfang eincsSimulationslauf€sdie Prcz€sse Pd und Pr,, daDndie Kund€nprozesse Pa. Der zeitlichoAbstard d zwisch€ndem Erscheinender Kundenist exponentialverteilt mit deln Mittciwort ). P, versieht auuhdir k,rnd"nprozes"F mir ihrerA rfenrhalt.oauFr Ak, diF nornrt\;frpih i"l mit Mittelvert p und Standaxdabwcichung o. Pk Ein Kundenproz€ss. EI veßucht, dcn kritischenBereichdes SemaphorsS zu betretcn. Ist da.sgelüngen,begibt er sich fiir ungefährAÄ Schlefeinhcitcnzur Ruhe. Nach dor Ruhezeit verlitsst er die kritische Region und löst sich sclbst auf. Pd Der Anzcigcprozess. Er bringbseinemcistc Zcit als SchläIbrzu, untersuchtebcr in den Pha.een dcs Wac-h3eim den SemaphorS und zeigt dessenZustand übcr PORIIA und PORTC rn. Dabeidient PORTC ols Balkcnenzcise 1ür die Anzahl der besetztenZapfsijellerr und PORIA als Balkenenz€igo dcr wortcndenKunden. Pi, Der Haldenprozess. SeincAufgabc ist es, die PIT eircs Kundcnprozesses, der. sich aufgelösthat, sn die Hsldc zuriickzugeben, Der Kundenprozcg$ kann das nicht sclbst tun, weil der Prozessringdabei b$chädigt würdc. Auch Pr bringr dcn größtenTeil seinerZeit als Schlüfcrzu. Es wird deutlich gcwordcnsein, dassdie Simulationin Echtzeit abläulb,wenngleich mit gestauchterZeitachse:Was in d€I Wirklichkeit Minuten dauert, spielt sich in der Simulationim Sekundenbereich ob. Do Pr der einzigeProz$3 ßt, dc! die Zufallszahlengenerätoren bonutzt,müssendiese nicht mit einemSemaphorabgesichertwcrden.Das gilt aber Dichtfür die Holde, ihr Gebrauchmrrssin einekriiische Regiorroingcbettetwerden. 7 . i n c l u d 6 rrn128def. incI 2 s .4 5 6 7 8 Linclude 10 ll 12 19 1-l
.includ€ . d e v i c € A'tuega128 ,oseg .org 0x100 . equ AddRndRiB= 0x100 . include . include ,lnclude . include . includ€ . include . include
D r D , h n . , o nd q l . o e , a n , p q , - , . , , r , .
182
rdMHz
D,Ltf .'o, t", Daaa, i rr,,
6.12 Beispie\: Die Simrtlation einer Tankstele
l, 16 77 r, 14 eo el 22 ,J 91 vbltalale: 95 pplt: 96 ppitFr€: 21
.equ . equ .equ .equ equ .equ .equ .equ ,dseg .byte .byte .byte .caeg
= 2000 = 0 = 1 = 9 60 nlMbda = 254 nuue 20 Dsigma = = I Dzapf
Die Größeder Halde Der Index ( des Zaplßemaphors Der lndex X des HaldensemaPhors D - r l n d " x d e . f r e i S n ; 8 s . /s' r ' , Proz \
nbHalde 2 2
fiir die llalde Der SPeicherblock Zlr lnil,ialisierunBaon SLIMOS d Ldr€sscder erster frcien PIT
nbHalde szpt sHld pNeu
P d Dic Anzähl s der Zapfrieller (s < 8)
Ein UhtcrprosrEnn zuh Autueu eines Prozosles tJbergdbcpurdnElsr 3n1ddic Airelse I oilcr Prorcsdrrozedür ln r21i:o und dic Crö&r der PIT ii rls Di€ Adresso n dcr PIT rird in Z 'urtlrilseasbdn
,8 ProzNeu: push2 lrov 29 ca!! t0 brn€ ,1 ldi te jmp ,,e now 9l PrzN€ul: call 95 36 PoP2 ret 37
116,117 116,118 HldAlloc PlzNeul t24,'H' Febl€r rt7 r76,r2ttt20 SosMak€Pit r17, 116
Dio Prozosrprozcdut dos Erleugdprcnsxt
98 P8: ,9 4a l1 12 ,3 ll .1, ^n$^tr
ldi ldl ldi rcalt novs ldi S0S S0S nld
Sidi
PIT-Größe 116 e Sewitnschte Z ts Adresse€inosSpeicherblocks Fehlercode',Haldeleerselaufcn"
Msche Spejcherblockzur PIT
Pa AulbAu und SldLt voD Pd
118,80 r2o,LoH(Pd) !21,HICH(Pd) ProzNsu r29rr28,r31rr30 r17,eN€u S0S-APPPRo SoS-SIGNAL
1 I I 3 1 1 5+ s+
r1s * Größed€r PIT von P'r 1 2 1 : 1-0 A d r ' L l e "P r o z c F r l l 1 do SchlaJcinheiien
Ein Kundcnprozcss Ph whd erzeugt ünd h rl$ Wdriozu$t8nd gcbruchr
74 Pg.t 75 76 77 18 79 a, 81
1di S0S ldi rdi ldt tcall üovlr ldi
r17,sH1d S0S-L0Cj( 118,80 r2o,Loll(Pk) r21,1{IGH(Pk) ProzN€u r29: r28,r31: !30 r17,sH1d
1 Kritjsche Rcgjon bci,rctcn 5+ 1 Ph aufbauen 1 1 3 I I Kritische Regionvellaqsen
82
sos
sos_uNLOcK
5+
89 8,1
1di S0S
r17,sNeu S0S_APPPRo
1 Pr in \Variestand brjnseu 5+
PN wird mii einef slaldardroualvertcilton
VcNoilzoii ü vcrsohcn und scstartet
It Peet a6 87 88 89 90 9l 99 e3
call tst brni std std std ldi S0S rjnp
AddRndNrn f4 Pge Z+ososPrlv,r4 Z+ososPriv+1,r3 Z+ososP!iv+2,x2 r17,eNeü S0S-SIGNAL Pg"
a L 1/2 2 2 2 1 5+ 2
9.1 Pd, 95
ldi SOS
t77,2 SOSJLEEP
I 5+
184
r.:s2 e ä ,\6 rverieilt ä
2 1 1
@' = 0000?
rs1rr30,r27r126 r31rr30,ososPriv
1/2 Jar keineBlockrückgäbe L Ze@> 2 Z+ a=@> +d
l - R, a,on dci H rld
ldi SOS call
r17, sHld
1
s0s_L0cx
5+ a+ Blocknit Adr. @F fieiseben
HldFree
Die kdrischc R.sion des Hald€nsenaph.c wnd verlöscn
176
186
GlobaleEntfüirigung aljl + @>
Pa
breq t7t 172
I 2 2 2 2
Z€np, Zr a=E:.h+d
S0S
SOSUNLOCK
6.12.Ber'spieljDie Sirnulation einer Tankstelle ]d
118 179 184
116, Z{
PPitFre,rl6 ppltFre+1,r16 1di SOS rjnp
182 183
tt7,2 SOS-SLEEP Ph
2 2 2 1
Zwei S.,l afeinheiten
5+ 2
Der EinstieelDunkt des Simülationsprosramns Einriclrten de Stapels und der Pofrs
rq sta.rr: 185 186 187 188 189 190 191 102 193
1 1 1 1 1 1 PoRTA,r16 1 PoRTC,r16 116,0b11111111 1 t !16 DDRA,
1di out ldi out clr out our ldi
I16,LOW(BAMEND) SPL,i16 116 , HTCH(RA}IEND) SPH,r16 116
01rt
r16 DDRC,
Anz. {dl,ender Kunden ADz. bes€iztorZapfsAule!
I
lnitioli$ienn,s d€! Zuüllßzol,lcrgen€r.!orcni der $qriellen Schnlltstcllc und der tldldo
195 196 197 198 199 9AA 241 242
call ldi call
AddRndIni t76,25
4+ 1
call
S0Ini SosndEin
ldt 1d1 ldl
116,L0W(nbHa1d6) 1 r17,HIGH(nbHald€) 1 1 r30 , Loll (vbHald€ )
ldi call
r31,HlcH(vbHalde) 1 4r Hldlnlt
38,4kbpsbei 16MIlz
4+
^utbou dos ConeratorprozcaEcsPr und hritiolhiotrn,s v.r SIIMOS
203 201 205
208 209 2ta 212
ldi
r18 i 80
1
tdi ldi rcall
r20,L0\'l(Pg) r21,HlCH(Pg) ProzNeu
1 1 2 2
ldi ldi ldi call
ppit,!30 ppit+1,r31 !16,1 r26,L0 (ppit) r27,Ii]CH(ppit) Soslni
3+ SLIMOS nrii Po iniiialbieren
I
1 1 4+
IniiialisicNns von S und dd Liste freizlgebender PITS, St.*
213 2U
Pe crzcugen
tdi
1 r16, -nzapf vsensos+3*szpf , 116 2
ch
116 ppitEre,rl6
1 2
von SLIMOS
si*-s @+0000
187
6. SüMOS StS jtp
217 218
ppitFxe+1,116 Sosstart
2 3
SLIIIOS starien
Dic Fchlerbehlndhmg (leere Häldc, zu viclc va.tende Kunden)
2r,
Fehlor:
1
c]1
Dic Eotähisnns der InterNpis yon'Iinc
221 292 P23 224 225 227 228 E'ri,gt
andl out ldi call call rjnP
Global€Dntlähigxns
und Tnn.r2, Fe
1 1 6 ,' # '
1 1 I I 1
sowrit€
4+
tt6,t24 Sol,lrite Ewig
1 Fehlercod€ a$geben 4+ 2
|17,T1MSK r17,0b01111101 T I M S K r, 1 7
Clobal" B, fahislnr
Zü Besjü des Plogramms, nach deh Einzus de! Dai,eien mit dcn diversen Modulea, w€rdan die Proglammparomciüfestgelegt.Daruxter isl,auchdie Größcder Halde,die !€cht großzü8i8 vo.gegebcnwird. Bei naximal 20 Prozeson und ciner PIT-Größevon 80 Byt€s wärcn eiwas mchr ols 1600Byies für die lläldo seDr8,ab€r im Hi nick duf zukünfi,igeModiffkatione! is( zu haben.Die Vorsabenfii! ), p und d sind nicht als physikalbchsiDnes sut, etwasR-eserve volle Grtjßengewöhlt worden,$oidern so, drlssonr bbholicr und scfälliser Sinulal,ionslauf An Datcnstrukfircn gibt es dcn Speiche.blockfür dic Halde, die Adre$e de! c|stcn PIT in Pl'ls (Zeile 26) und ain Speichcrwort,da zur der Lisic der an die Hslde zurückzugcbcndcn Initialisierunsvon SLIMOS benötisi wird (zciLc25). Dls Prosrsmm startet in Zeile r82. D0.vor dem Eintlitt iri SLIMOS noch cinige Unterp.ogumme aufzurufe sindl wird rls Erst$ ejn Stdpel eingerichtei.Es folgt die luitinlisierung von PORT^ und PORTC. Das Prcsramm nimmt an, dass an die Po.tpiüs Leuchidjodcn angeschLosscn sind, die aufleucht€n,wenn hohcs Poicniial em Pnr arli€gt. Folglichwoden prograülmic$ wc|den PORIA uDd PORTC n t 00 geLaden, bcvor sie als Autssänge die I itialisierunsdcr eßten seriell€n Es foleendie Iritialisierüns desZufollszahlensene.dtors, Schniitstelle,die zur Fehlerbc\andlunseiDsesetztwid und der Aulbau der Halde. SLIMOS soll trlii dem Generatorprozess starten, al$o wird dieser in dcD Zei'let 2A1 203 ,,rfgebst)r und da n SLIMOS mit ihm in den Z€ileu 205 21, iniiialkicrt. Da die kdtische Resion dcs S vou s Prozessen beheien wodcn darf, wild der ZÄhlerdesSemaphors Zäplsüulensemrphors in den Zcilcn z.lJ 212 mit i inifialisiert. Endlich wird vor deu Siart von SLIMOS in Zeile 216 noch der Zei8erouf die eßtc PIT in der Litstede! aü die HDldezurückzugebende!PITg mit 0000 vorbelegi,ein€ lecrc Lisie sislalhjerend. am EndedesP.ogrtnns ä.bZeile217 ist cinfeb sehalter. SieeNartei Die Fehlerbehandlung jn F€gisterr2a ein Zeichen,d6 neh eiDem{ iiber die serielleSchniibtelle ausgegeben wildi bevor das Pmgrmm in eine Eldlo$scl eife 8ehi,. Zuvor wcrden aber Doch von den bcid.n | , n r " r n x 6 s " h , n d - I n r . ü | r , s I l a r ö ' J F n .u m . h P r o z c s qdp/ r l - n ' ' ". Ab Zcile 98 ist ei! Unierprogralnm zuni Aufbau eines Prozesseszu 6Dden. Ihm sind als in r21r2ound die Größedo PIT in rra zu Parameterdie Adre$e I einer Prczcssprozedur Es ldssi sich von überseben.Die Ädresscn der initialisiertenPIT wird in Z zurückgeseben. der Halde einen Speicherblockder gewüßchien Größe überseben.Ken die Halde keinen solchen Block zur Verfügung siellen, wird mit dcm leh]erzeichetr II zur Fehlerbehandluns sespnnsen. Anschließendwlrd aus dem Spcicherblockdie PIT einesProzesscs scmeht
188
6.12. Bcispiel: Die Simvlätion enret Tankstele P'1 Der Erzeuserpioz6s P, besinnt seine Lebenszeit in Zeile 3' damit, den Anzeigcprozess die dann begiDnt Ab Zeile 5l ünd zu starien Pn aufzübauen äen Halaenproes u"a dan" droße Schleife. in welcher die KundenprozesseeMeust ünd getarNet rerden verse Zur Berechnune des Zeitrauns d, dd bis züm Stait deB näctßten Künde'pmz$ses nit '\ 55 dl den Zcilen die in ! erzcusi, Zurallszahl :r,o-verteilic .i.a 'ir"*t l"r "i""Zahl ! hai dd Format Ks,16und -\ ist eine gmze Zahl im-Bdeich ""I, rird. Die multipl;id Ve'wenI < ; < 255, ds Pro,tüki d - ^, hat deshalb 16 vor- und 16 NachkommabitstelleD r?:6 bereiisctellt im DopP€lresister die Binärkorma, iü. O nu" ai" Sits vor dem aJ.Ä"" &Bii-schlafperioder verarbeilenkann, muss6 in solcheaufgeteili w".a".." l. Sl,luOS "ur und r""a"r. o* g"t"lti"ft :" a"n Zcilen 56 73' dllefdings njcht gsnz korrekii da modulo 255 nicht modulo 256 gcreclnet wird. Dab€i Nacl aen Verscna'ten aer Zeitspanne d wjld ab Z€ile Z ein Kund€nprozes Pr evenBt zugreift' die Halde auf Prozess jmpljzit ejn weiterer Da noch zus;erjfien Halde suf die ;ird ist dies;durch den Semaphormit dem Index ssld abse6ichcri'Vo! dem Aufruf von P'ozN€u weF nuss aiso die kritischa Resion des Semaphors bctreien und nach den Auftüf rerl5€sen oNeu Index mit den Ercjgnisses de'3 Wartcschlsüs€ in die den.Damch wird der neu;Prozess reilLc Zlfallszahl u I 0 emcefü'it.Vor,lem Slarr von P' rvird noclt c;n" htandardnormalve: sprinst 'lAnn zum lrozes crzfLrrr und rl" pri'ar" Voriohh in d"r PIT \on P" abscl"s- Dcr Zpile 5/t rtr.lrsicn Drrchlauf der e-oßpnSchlrifein dir zu b€Ein Kundenprozeßboginü jn Zeile 123.Sein€crsie Aufgabe isl', die Zapfdaue!Ar geladen'dic u Zulallszahl nit der ^6,rverieilen r.:3r2 {hd Dreifschresiste! Dazu rechnen. '.' Pr i; desscnPIT hilralest hoac Sic h€r das fomulca'ri F. u.ia* l-.'"'^e ,\!rn ist. mir dcn Ln*sshifrr in dcn Zeile^ t27 12' in 'lä€ Formar Ks o aüc", a" sic .i.]'inci*i' mii d multiplizicri Wic oben bci der ecbralht werden.Sie wiLd dam h den Zeilcn 19,-139 Anieil desProdukis li l"'i"'d:l' wird nur der zufallszahl süizzahlis€ ;xponeniialveftejLten zehl iln Bereich de; sich jm Doppelregisrerr?:6 crsibt Ebensowic ) soll auch d €inc 86üze 7'etle^1tr0 142 in der wird donn Prcdukiis des z; 1 r Bilt. Ist däs de! Fall, gibt es also meh| äls s wariende Kunden, so wird die Fehlcrbchardlunsansesprunsen. AndernfallswerdenS" Einerbits voD rcchis her in llceistcr !o hineinseschoben und auf PORTA ausseseben. Der Zngdfi auf den S€naphor in Zeile 96 isi ein Bytczugrif, der nicht obgesichcrNwefden Die nicht mehr benötisten PITS durch einen eisenen ProzessPÄ an die Hä]de zürückscben zu lassen ist keine opti$ale Lösuns. Besser wäre es, den Erzeuserprczessdie (undcnprozcsse mit schon scbrauchten PITS ous der l,iste aulbäuen zü lassen, sofem sokne vorhand€n sind. Auf diese Weise würde nicht nur die Ilolde entlastet, auch der Haldensemaphor würdc nicht mohr gebraucht.
190
7. Eine Halde (heaP) Eine Speicherverwaltüng für die kleinen Arbciisspeicher der AvR-Prozessoren sollte * 1 (-3 NächstcrSchleifendumhLauf 116-r=9triod255 R e s i b l o c kö r Z * 3 - t r > 3? Neinr R€sLbiocküberseher b^ * r b" * 3
(-l (
Ubergsbe eincs Speicherbl..ks. Dic sewüns.hie crößc n *ird il r1o übcrgcben aalls I = o! wnd di€ a alesadrGse in rsr.so zurücksegeben,ondernfals isi kein Block ejncr cröße > n Iiei odcr es ist n = 255.
H].LAl]oc: 98 39
12 13 H l d A I c l l 44 45
push4
1ds lds clr clr
HIdAlc4 td cP
.18 49 60 51 52 53
176,!L7,r2A,t29 r16 I f1o e m, 116e 0 bei n: 255 H1dA1c4 r/2 Zntitkbein=255 r30,pbHldFree 2 , + Adr. ersier Listenblock 13l,pbHldFree+1 2 r28 1 '?+ 0000 t29 1 r17, r30 r d = 0000?
brlo
t77 ,176 H1dA1c2 !29 ; r28,r31: r30 tI7 ,Z+7 t37,Z+2 r30,r17 HldA1c1 !77,176 H1dA1c5 rl7,nbHldMin HldAtcs
add clr
r30,r17 r28
ldd ldd rjnP HldAlc2l
55 56 58 60
I 1/2 Jar erfolslos^uück (r = r) t b^2ml 1/2 Ja: pa$enden Block eefunden
I
n*o
2 2 1 2 I 1/2 I 1/2 2 I 1
A+b>
Zum n,tchstenSchleifendurchl. rLrFd=b^-m Falls .i = 0r Block ausl&en d,3 el Jar Block auslösen b^+d Z+ud=e+d
I
a2 6' H l d A l c 3 : 65 H l d A l c 4 r 66 67 68 69 70 71
2,176 r 3 1 :r 3 0 , 1 clz pop4
1dd 1dd
74 75 H l d A 1 c 6 : 't6
rjnP
71
rJmp
2
Z+u"+l
1
r29 ,r2A ,t77 ,tt6 rr7 ,r2A 1 ? = oooo? !17 ,t29 I t16,z+7 rt7 ,z+2 2 HldAIc6 1/2 FaLk ? : 0000r LjstcDkopf Y+1,r16 Y+2,tL7 2 HIdAlc3 2 pbHldF!ee,r16 2 pbgldFlee + öF pbHldFree+1,r17 2 HldAlc3 2
iüderD
193
7. Eine Hatde (heap) Rti.knanme oinca Speicl,erblocks6. X cnthält 6" + 1 Achiuns, Es nLss 6r > I saltenl
78 HldFree: 79 8, 8r 89 ae 81 85 sd s'/ s,
püsb3 Prrsh4 sblnl ]ds ]ds mov or breq cp cPc brlo
t16, r17,r18 r28,!29,r30,r31 r27:t26,1 !3o,PbHldFree !31,PbH1dFree+1 116,130 116,131 H1dFr07 126,130 r27,f3L l11dFr08
2x4 2 2 2 r 1 1/2 I I 1/2
X*ö" Z+p'oderz+O000 3:0000? Ja: ln lere Lbtc einfügen b"
195
7. Eine Hakte (heap) 162 16t ldl H1dFr09r 165 166 167
st rjnp adi\,t st st rjldP
X,rr7 H1.IF{s r27 tt26,t X+,r30 X,r31 HldFroS
2 2 2 2 2
Zurück
Zurück
J" < b' lür jcdcn Block t der List€
168 HldFrlor 16s 1to 1't1 t72 t/3 1',l,l 175 176 HIdFrll: 177 1'tA 170 180 181 182 r8, H1dFr12: 184 185 186 187
ld c1r add adc cp cpc breq std std clr adiu st st rjmP Id add brcs 3t rjmp
1 1 6 ,Y 118,116 tt7 r!6,t28 r77,t29 !16,126 r17,r27 H1dFr12 \+t,t26 \+2,t27 116 t27 tr26,7 X+,r16 x, 116 H1dFr06 1 1 6 ,X 116,118 H]dFr11 Y,116 H1dFr05
I 1
r 1 ? i 1 6-
q" + q^
1 1/2 Ja: zur VereiniBung 2 1 2
bD ts 0000 (Lisl,cnende)
2 2 2
Zurück
t
11€F3:ö"+q"
bei s > 255 1/2 K€nieVereinisuns 2 qt*s 2 Zurück
Dic Länse oalerGrö߀cinesSpeiclielblocksb wird mit ö), senrcAdr€ssemii b" bczeichnei Beeinntein Block ä alsobei Adresse60 und end€i bei Adresse6F, so ist ö' : 16 und b'" = 60 Bild ?.1 zeigi dic vcNendete Blocksiruktur. Das erste Byic cin€sbele8tenBlocks ö €nthä]t
Abbildung 7.1.;B€l€gteund freie Blöcke fr€i
die Gesamtlädgeör des Bloc-ks,der Rai siehi den Nutzer zur Verftisung Die efiektive Liü8e iBi für den Nuizer also ö) 1 ünd di€ efiektive Adrsse ö" + 1. Ein fteier Block besinnt ebenfalls üit dem Länsenbyie, auf dd hier aber ein 16 BifAdressfeld folgi, mit bD bezeichnet, das zur Verkettung der ftei€n Blöcke verwendet wird Zu beachten isi, dasBein freier Blocl
255 gilt, so wird in Vorbereitungder Hauptschleifein Zeile l, Regisier r1s mit 255 gela.denund mscliließend Z durch Addition von 9 auf da ersi€ Bvie hinier den Gesamtblock geseizi. Die Hauptschleife, il der die Blöcke abeespall,enud Fehler verkeitet w€rdc!, ken jeizi besinnen.lüaD dür alleidinssnicht den (nahelieseDden) b€gehenund r17 als Schleilenzähloherunierzählen,d€nn das wäre R€chnungmoduio 256 Ds muss Recnnüng modulo 255 sei!, uDd so bleibt niclits anderes iibrig al6 in dcr Schleife so lange255 von 9 zu subtrahieren,bis €in ResNr < 255 übrig bleibt. Di$$ t ist dann auch die Länge des Restblocl<s. Die Bildürg von t : I - 255 und di€ Prüfung, ob r < 255 eltordoD aber zwei Vorsänge.Setzt nM jedoch die Subirakiion I - 255 6t den Anfarg der Schlejfe und verlässtdie Schleifebei 9 - 255 < 0r 3o wuft1edie SchLoifclmgl-dal durcliaufcn. Der Rest r lässi sich hnrier def Schlcifcdurch Additjo! von 255 zuriickgewinleD Und so wird cs im Progrdnnnauch ausgcführt.In der Zeilen Js_.U e|folgi die Subi.aktion I - 255i ir fa.llsI - 255 < 0 gili, falLsako d$ nü,ch$terZejLewird aüs dei S.hleifeherausecsprungen, da.süberirassbil, bci dcr Subtrdkiion sesetztwurdc. Bei 9 255 > 0 stcht no.h PLaizfür eiien Block ö dcr Länge 255 zu! V€rfügung.Zunächstwird seinc Anfaneselresseö' durch dje Subiraktion 3 - 255 jn den Zcilcn 16-t7 belechn€i,,dcr Gcsamtblockwjrd ja von hinter nach vorne zerlest. Anschlicßcndwird de! Block in dcn Zette\ 18 20 sclbsi anselest,und zwar {hd in Zeil€ 18 ö^ crzeust urd öF in d€ folscndenbej 0, so wird der Biock aus der Liste heraussenonmen und gdz aussegeben.Andernfails wird am Ende von b ein Block der Län8€ , a h e --, F n ' , ' n d . r L i s , Fb h b t s , 'l , p i a rA l o . k d ' ' L d l A - b ' _ n z u r ü " k DieseMeihode, den erstenpassendenBtock jn de! Liste zu veNcnden, wnd nii first ft bezei.hnei.3Man kau Eu.h in der Hofnuns, einebessereSpeicheraunutzuq zü erldgen dic Liste sanz durchlaufcDund den Blo& ver$€nden,dessenGrößem bestcn pdst, däs ist öeef-ft. Die g.ößere ADst.ensus scireint .ber dcr NIühe nicht werl zu scin, es gibt SzeMrien, :rsiehez.B. lKnull
198
in denen f.stfit basere und solche, in denen besfft b$ser€ Ergebnisse bdnsl. Da ds Größenbytemii einge.€chneiweden mussjwird innerhalbder Prozedurmit @ : n+1 siati n ge&beitet. m rvird in Zeile J7 eMeugt.Gleichzeit'swird getestei,ob der Pdmeter n den einzigenungültigenWert 255 hat, ftir n : 255 hat ja 116 nach der Addition von I den Wert 00, der durch il :1 dgezei8t wird. Bei n:255 wird iD Zeile ,8 demneh mit der Fehlermeldung I - r in dN rufende Programm zurückg$prungen. Die nächste Aufgabe ist, RegisterZ nit der Ädre6sed€s eßten Blocks dcr Liste zu Laden.DiesesRegisterenihält iümei die AdresseP d€s geradebBuchtcn Block6.DoppelregieterY eoll di€ Adre$e ! des seben bsuchten Blocks enthalten.Einen solchengibt es alle.dingsbeifl Besuchd$ ersten Blocks der Liste nicht, weshalbY in den Zeilen-ll l2 mit 0000 iliiialisieri sird. I! Zejle l3 wird die Schleifezur Dürchwürderungder Liste betr€i€n. Diese Zcile wird erreicht, wenn Z geredehit der Adress€des nächstenzu b6uch€ndenBLock3geladcnwurde, (7,eiten5a 52). €ntwd€i tui Betreten der schleifeoder u Ende €jnesSchlcifcndurchlaufs nicht sibr - sei es,dss die Lisle Da eseinennächstenzu b$uchcndcn Block mögliche.weise ni$s ds übcrhauDtlcu ist, Beies, dds das Ende d€r Liste eigebnisloserreicltt {urd€ überprüft werden- Da.eist aber leichi möglich, dd h eiren 6olchen Fall die Endnükicrung 0000 in d€s R€sisterselddenaurde, dlnlich bei leererListe aus dem Listcnkopf (Zcile^ 39lr) oder m Ende der Lbte a$ dem Adrs8ent€jl das Illock (Zcilcn Jr-52). Die Priif'tis bestehtdlsodarin festzuBl,ellen, ob 3 = 0000 8ill. Stündc cin Itcgistc.),.B. ro) mit deh Wert 00 zur Verfügung.so kdnnlc dic Bclchlsfogc cp !30,!o cpc r31.ro hcnnrz, werJeri 4 isl abe! nicht nö[ig, extro oin Regislcrdofttr abzustellenrda z$@iByres, die mit dem bjlweisen ODER vcrkntlpfi werden,senau dann ds Re$ iai 00 ersebeD,wean Bieb€ideden Wcft 00 haben.Nach den Zeilenl3 ll silt also trr = 00 e€naudann, wenn r3o= rsr = 00 silt. Tritt dieseBedinsunsejn, so ergibt sich, = r und dic Prozcdurspringi iu Zeilel, mit dieserFeh" Lermeldung in drß rufendeProgrammzu rck. Andcrnfallsenthält Z die Adressed$ nächsl,eü Spaicherblocks in dcr Liste, dessenGdßenbyte in der Zeile 16 in Resi8ie!11? geladonund a schlicßandmit m verslichenwid. Enthä]t der Block nicht weniserals rn Bytes!so wird dic Schlcifein der nächstenZeile elfolslejch zur Zeile 5l verlass€n.Enthält der Block allcrdinss wcniscr als m Byie6)so wird in Zeilel9 die Adr$se des läufendenBLocksin das RcsistcrY seladen,ds stets die Adressedes so€be besuchienBlocksenthäli, uDd z wird in de! Zeiler gcledcn)d$ danii) falls cr iiberl{upt 50 52 mit de! Adressedes lolgende Speichcrblocks exisiiert, zun laulendenBlock semachtwird. Nach dem erfolereichen Verla$€n der Schleife wird unie$uchi, welclie d€r beid€n oben bcschricbenenSituaiionenö^=m+€ode!ö^>n+€vorliesi,,dabeiistöderinderSchlcifc in Zeite 1 sefundeneBlock pssender Grö߀.Di€ C$ße € wild durch die AssembLervariäble vors€seben!d.h. es isr € : 4.In Zeile 54 wird zunächstrl = öl - 'n ecbildet. Tst d = 0, so passtder Block exakt und wird ab Zeile d7 &usdef Ljstc hoaussenonmen.In Zejle 55 wird daün eeprüft, ob d < € silf, in welchem Fell do Block €benfalls herauselöst wi!d. Gilt dagegend > ., so wird der Block g6pe1ien,und zwa. wild der unielo Teil ausgegeben, so k nn dcr oberc (vordere) Teil in der Liste verbleiben. Zunächst wird ds-s Größenbyte dcs in de! Lisie verbleibeldenTejls ängepälst,es bekonmi natürlich den We|t d. Anschließend e.hält ReÄisterZ durch Addiiion von d die Adrsse d$ neuen,aus,uscbendenBlocks e (Zei len 59 dt), und &s Größenbviedes neueDBlocks erhäLtin Zeilc 62 m als Wert. Dem rufendenProgfamm nNs als Block^dreseü'+ 1 zurücksesebeD werden,dafür wird in Zeile 63 Besorgi,und in der nächien Zeilc wird vor dem RücksDrunsdas Nullbit als Fehle! Es blcibi noch,ab Zeile d7 einenpassenden oder nahezupaseder Block ö aus der Lisic dd ^ Unt.r Vcrvendung von z€ro prrpagation.
199
7. Eine Ha.tde(heap) Abbilduns7.3. Enrf"rn"nein"sL-r"nFlcm"n."b ab
A
tr T b
Bild 7 3 zeistdie Situationrcr den A$löson (oben)und na.h freienBlöckeherauszulöscn. (unt€n). dcm Auslösen h$en Problem€, beidenei6 wie hi4 derumseht,zeiser(poinrer,AdEsvriable)z! mänipuliefen Obj.kteim l&en [4anfedigt eiie Skizzeder beteil]gten sichgut mit d.r VorherNachh€tsMethode Opetationan (hier. so vof demH*auslö*n, Bid 7 3 oben) mit zu*iid vor d€r durchzlführcnd.n p.ss.ndg€kennzeich.eten Zeigern. DannwirdeineSkizz€def Objekteim zusEndnachderOPer.tion Zeiserin derzweiten (im Bild unten)Anschlie߀nd @td.n die (nochunsekennz€i.hneten) sezeichnet skizzedur.hihr ZielidentiriziedDeikt mensichz.B lm untereiT.il d€sBilds dieKennzeichnunsen der Z.ig€rhinreg so irt für d.n Zejgdvon o nächc in d.r unter€nSkizzein d.r obercnskiz.eeln ist schn.llgefunden, daesnur.iien einzigen Zeig zu tinden,doräufczeiSt.Einsolcher Slbt ninli.h denmit derKennzeichnung 1. Zeigergeflecht€n, dochkomnt es manchmal Die Method.funktioniert auchnochbei komplizierteren derObj.ktein d* skizze3n. *hr 3uf dieAnordnuns Zwei trülle sind zu unterscheiden.näslich ob der Block ö den elsien Block der List€ biLdet odcr ob er inmiiten der Liste sieckt, ob er aisokeinenoder nind$tens einenVorgängeru hat. Wie schonobenerwähnt,wäre dieseUnterccheidungniclrt nötjg, wennechteListenköpfevor' Welche! auszukommen. hmde wä,rcn,aber ds Ziel isi ja, mii nöslichst wenigSpeicherplatz der bejden Fölle vorljegi, kann mii den Inhalt r/ vo Doppelreskie! Y €nischieden w€lden Es wird ja in den Zeilen Jl-1, mii 0000 g€ladenund behält di$en WerNnur) wenn jI' der Schleifc die Zejle l9 nie errcicht wi!d. w€nn also schon der elste Block dcr Liste sroß Se us i6i wie weiter oben schoneinmal wird die Bedinsung! = 0000 mit dcm bitweisenoDER getestet.Näch der Ausführulg des ODER in den Zeilen 67-68 wird aber noch niCni dhekt velzweigt, soDdcrneswild vorher Register rr?56 mit öE eeloden, also nit dem Zeiger, der den Block , der Liste (älsonit oa = ?) od€r den Zeiserim LßieDkopf Zeiserin voransehend€o erseizensoll. Diese, Laden verändeft die Statusbifsnicht. In Zeile 77 wird demnachin die Zeile 75 vcrzweigt, wenn B]ock ö der erste Blo.,k der Liste isi, dort erhtili der Listenkopf den wert öt. AnderDfallswird in den Zeilen 72-73 üv mit b> überschrieben.ln beider FüIen seht $ ddn zum Rücksprunein die Zeile 63 Ein Bloc-k ö, der an die Speicherverwaltung zurückgegeben wird, darf njcht eintd.li in die Liste der freien BLöckeeins€fü8t werden, sondern es muss veNuchi werden, ihn mii benehbdten und djrekt anstoßendenfreien Biöcken zu kombinieren Ohne Rekombinationen gäbe es nur eircn Absiiee zu immer kleineren Blöcken hin, ejn der Erosion vergle'chbder Vorgmg. Die benächbari€n Blöcke rerden dadurch scfunden, das die Li6tc der freien Blöcke e weit durchlaufen wird, bis kejner def schoDpdsjerien Blöcke eine gfößere und keiner dcr noch zr
200
pssierender Blöcke eine kleinere Anfargsadresse hat a1s ö Zu diesem Z*ck ist die Liste ,Ech aufsteigenden Anfangla.lrcssen softieri Dr€i Fälle könne! unterschieden s€rden: p .öö Block b" ist kleiner als die Adressedes dsien ListeneLementes g List€nelementes dcs letzt€n oo. Block ö" ist größerals dle Adresse mit d" < b" < c" 4 und c Listenelemente folsende gibt aufeinander oro Es zrvei den Preis eines etwas auch um Die drei Fälle werden im Prcgramm gesondert behandelt' noch hingehcrr C mag es rvie ProsradmiersPrache länger€n Programms. In einer ,,.ichtisen" Assembl€rsprache il eiDe' zu behandelD, svnchron if-elsePaaren von dle'Füllenit;incr Serie ist das iedochAtathema
Abbildung 7.4.:Vor der Rekonbinaijionbci Blockrückgabe (ii) .--l .\l
(iii) -J a"l n^ |
(i")
dcr drei Blöcke Bjl.l 7.4 zeigi im Fallc @" < b" < .", welclß NachbarschaftsverhäLtnisse (i) Keine! der drei Blöckestößi an enrenandeEn, d h zwischend und ö urd zwischenb und c belinclet sich mildestcns noch ein (nichi-fieier) Block (ii) Blo& a und b Crcnzetrdirckt aneindder' ö und ' dagceennichi' (iii) Block b und c grenzen direkt aneindder' o und ö dageser nicht (iv) Block o ,tößt an ö, und b stößt an c Das nächsteBild, Bild 7 5, stclli dar, weLcheErgebnissesich mii den möglichetrRekombi-
201
7. Eina Halclc (hap)
naiionen ereeben. Es gibt AuswirkuDgen sowohl auf die Blocklänsen ak auch anf die Bloc-kvcrl 1) dic Prairisi,an,ü.1 €a, . . . { , sind p Zifiernzur Bäsis/j,1ürdie also0 < { < /tsilt. Auchhicrist( =1 lJ 1+...+e-pp p " OlTenbarist 0 < 1 < 1. die lvlaniissej nd e ist der Exponeni. Bei B : 10 s'ird sclbstve$tändlichdic gervohnteDezimalschcibi'eisev€rwendetjes irird also z.B. nicht -(1/10 + 2/100)103gelrhrieben,sondern 0, 12 x 103.Entsprechendessiit für dic BaöeD0 = 2, B: 8 usw. Nun kann eine FlicßkomDazahlmehrercDaNtellunsender anscgcbenenc€stati haben.So isi für B: 10 und r, = 4 z.B. 0,1200x 101:0,0120 x 102= 0,0012x 10r. Soren also s€eisnctcNull€n vorhandensind, lassensich die Zificn hin- oder herschicbcD und der Expo cnt cnisprechenderhöhcnoder emi€drisen.Vcrlänst maD jedoch,dassdic cNte ZifTerhintcr dcn Komnla von Null vcNchiedenisl,,€,r 10, so wird dieseDarstcllung€ind€utig. Darsteliurscn(8.1) rnit {-1 > 0 hcißcnnormalisi€d.Wcscn
>e ß-'>Br e= D €aaa gili für dic ivlrntissc$olchernormnlisicrterD{üstellunger I
ßs€I f.ls
{ o
0 angcnonmcn. llkher ist dic Unrwickhrng circr rrtionalcnZlLLrl t zur Bdb 13,um dengdrzzahliseü uüddeüsd)rochenen Anteilheraßzusiellen, so lgesEbeu
' - 2 -+., J.-
I.-"'-
DiesebeidenSunner weden jetzi zusamüelsefd,st,uü! uDaoselehmeDFallunteNcheiduugen aus den Weg zu geleül t1
'=L'"P
"
Falls, einer gMzzdligen Anleil besiizl.,isl n < 0. Weger z l0 Liissisich nuD wjc lblgt zcrlcgcn:
2 D i cI n z a r i d . r E l c n . l t c i s r 2 { p - 1 ) p " ) ( c i D - - . ü ü + 1 ) . JAll.dnrgs wird lntd Ründcn ofx di. spczicllc Apprdiüation
274
isi, r ß > 0. DieseSrtnne
: p ro v..stmdcn.
8.2. .RundeD nd Rrrndünssfellcr - / < 0 und danit Die Exponentenin den sümmen sin.l alle negativi es ist ja t < /, dh l p D i € W e r t eb e i d e r /-1 k + P f o l g t e b e n s of t + eßtrechii-v &nftr S u m m e ns i n d6 l s o< l S e t z t m a n n u n e = I
e: L'
"P^' "
ö= L
r-'Pk+r'-r
so hat m@ die gsuchteDarstellung. r-r 0 Fallso < 0' berechne -€B'dP' e ndCunddfür ol, daM i,t ': die restlichen € be!*cht also irn Wesentlichen är.J den erstan p Zifern l'on u ' und Zifiern sehenin 1,ein Z B. gilt für Ir = 4 .rorororror = o, rof,o x 26 + o,lolor x 2? präsantiertwerden Bild 8 2 NachdjescnVorbercitungenkönnendi€ Rundung$axten wieder' In ollen Fällcn sei o einc rationalcZahl, dic durch ainc gibt ctiesean$chaülich zrr .FB,p,c,,,,,,, ,-* gehiirigeZahl J apDronimiertwerdcDsoll' Abbildung 8.2.rDie Rundu gsarl€n V^
T-
LI
J-U
r'0
8,2.1. Rundendurch Abschneiden gewonncüeApproximation cY aus fp,!,",""',.-"' Die mit diesG Rundungsmethode an r ist unter allen I aus .FB,,,.-,",.-," mit der Eisenschajtl/ 3 rl aas zu r Etwasandersausgedrückt,ist jt! dasjcxigeuntor äIen Ela rentenäüs nliclistgelegenc. ai" Ui""n größcrenAbsolutbetragals ' habcn,däs den kleinstenAbfp, o, "-,",.,,,"*, Um icYzu berechnen,vird r näch Gleichung(8 4) zerlest Gilt fü dicseZerlesung €,"- < e < e-*, so gchört€B'jedenfallszu.Fp.e,",",,,,"-*. Andernfallsist bei e < e-i" ' zu klein oderb€i c,"* < e zu groß,im erstenFall splicht näir von -a4onentcnzn'erldtd, im zweiten Fall von Eqonentenüberlaul Zur Veranschäulichunsbetrac'hte man
2f5
8. F ließko'j-maal'thmetik Bild 8.1, ln welchem der Unierlauf- und der Uberlaufb€reich von f, 3 1 zü erkennen sind:Der Unterlaufbercic.h bestehtausder Lückezwischen-1l4 und 1/4. und der h"rrehr0ub0llen".. oiF linkövor -4 uod rp.n,svon4lieccn. Üb, rlau"b.rF:ch Wenn aber {8" zu frr,r, e,",,,, e,,,..gehört, wenn also e-i" < e < e-- gilt, so isi schonrr : {B'. Die eßte Bedingung,dassnämlich(8" k€inensrößerenAbsolutbetDs als o haben daxf, isi erftillt. Dem da s, { und d dasselbeVorzeichen besitzen, ist lo = l€8" + WA. , > leB" . Die zweite Bedinsuns,dass {1. unter allen / aus FB,p,.^,",.-^, mit / < lo l nächsigelegen zu r seinmu6s,Iäi6stsichauchsoformulieren, dassz,r,'ischen und r kein weiieres Elemcnt a1t3fB,r,e-,^,e-." mehr liegendarf. €Be Genaü das ist aber oben bei der Diskussion des Restsliedes dBf , schon festsestellt Da in ( die ersten p Ziffern von c zusa.rnmengefasst sind, in d die übrigen, und dieseübrigen bei der Konstruktion von o! einfachweggelsssen oder abgeschnitten worden,wird die Bez€ichnüng durch Abschneiden" verständlich. Die weitere ,,Runden a macht ein Blick auf Bild 8.2 plausibel. g€gen.Null" Bezeichnung ,,Runden A1sBaispielsoll -12,345: bezüglich.Fro,3,,r.2berechnetwerden,Die Zerlegung ergibt sich zu -12,945 -0,123
=
\....v-\-?-
> 1/2 erhält man mit Gleichün8(8.8)
) , - ( € t i+" 9 \ l = r - o B * ' . ! B * ' d.h. cs sili in jedem Fall
I" - "'13r=B*n 2', Die Zerlegung(8.4) lielert auchhier die Abschätzu g lrü 2 B"-1, därniirergiht sichols Abschätzung des relativen Fehlers für jc I 0 I l.x- s'l < ä8"-? = ; B -P tt a"-T
(812)
DieseSchrankeist halb so groß wie die cntsprcchende Schronkebeim Rundendurch Abschneider.Sießt aüchopinnal in dcm Sinne,dasseskeinefür allep sültise kleinere obere Schrankesibi. Um da einzNehen, beirachiemar die ZaN r : r + 2 'r' !. DieBe kannwic folgt zcrLeet r x P \ + 2 r 1 t ! , a l s o n i t € : p r : 0 , 1 0 . . 0 u n dd : 1 / 2 .W e r d een- h w e r d e ,n: rB und e,,,a"sosewihLt,d6B 1 und 1+ Pr ! zu .Fp,e,.-," .-.. geLören, dannist, da die Letzte Ziffefvon€, nätulich0, gerddeist, c" = 1 Der relatir Fehlerisi deshalb
l a- ! ' l
,
218
lr+iß|n
1l
r+;p',1
+P1n
r+48',
8.3. Aufrunden und Abrunde,
Nun gibt es für tl < 1 die Reihenentwicklüng
- t " + r n+ . . .
l-:t-t+t"
dabei eDtstehende Briclrt man einc alt€rnierende Reihe nach dem Dten Glied ab' so ist der arso Glied' Fehler höchstensso sroß wie das (z + 1)-te
,
l, ,l- ,,1-, ,l: ,,
Speziellfür t = 2-LPr ' ergibt das
j a , , _ , ,. ; s - " \ 3 J . a , " " ltt+1t-'
2
-4
Der cchie laLaiive Fehler kt"r1nder oberen Schrsnko also bcliebis nahekolnlne{ Wird dcr relaiive Fehter mit p(r) bezeichnct' aL$o
erhält man durch Umformen
o"= c(i + s(o)) lp@)1< f,|u'
(8.13)
handhabonals Dicse Darstellungder gcrundctcnZahl läs$t sich gcwöhnlichl€ichter Unsleichuns(8.121. "'ö; u rer dcm Namen u'p ber€n t wa.".fplc/l det tetzter stell'1 äi"l':;;' be = unordered(not conparable)
T.equLT=0 8.€quCT=1 e.€quEQ=2 l, .€qu U0 = 3 1l l2 13 ?l 15 16
.€qu .equ .aq\\ ,€qu .equ .6qu
TM = 0 DM = 1 ZM = 2 0M = 3 Ul'l :4 XM - 5
inl€lid oP€rationnläsk denormalizedoperandmsk zerGdividcmsk overflowmask undernowmask inexaßtresulLmask
l7 18 19 90
.equ .squ .6qu .€qu
0 RI{ = = 9 RD = 65 RU RZ = 129
rounding to near$t roundinCdown roundirg uP roundng towad zero
Pr 22 ee ,l 2,
.equ ,€qu .equ .6qu .equ
NoR = NUL = DEN = INF NAN =
normalized null denormaL infinity not a number
0 1 2 3 4
cxccütion idcntin€r
ed 2? 28 29 ,, 31 39 JJ
.squ XABS = .equ XINT = .€qu XMUL1.€qu XMUL2.oqu XMUL3.€qu XMI,L4= .equ XMULSKonirollhridble
31 3, 36 37 3s
I3estat: I3eCoCo: I3eRndS: I3ectrl: l3eTrpl:
2 3 4 5 6 7 a .dseg
ünd Vekioren für A'snahm€n
.bYte byte .byt€ .byte byta
1 1 1 1 2
status bits condition.odes rounditg mode conhol frrts ina€lid operationirap
237
9. Det Standaid IEEE 754 für Fließkommaaithmetik 3e .10 ll le -le 11
I3eTrpD: l3e'tryZl 13eTrp0: I3€TrpU: I3eTrpP:
denornalized operad
. cseg irap ,Mdler
It
ah Slandard
TüNixT+Hdl:
1
Die lnitialisie'uns dG Moduls
l7 I3€Init: ,t8 ,1e 50 51 52 53 t4 6ö ö6 t7 68 I3€Initl 59
l
61 62
Idi ldi
r28,Lol,l(I3eStat) r29,IiICH(I3estat)
cl!
116
st st st ldi st ldt ldt tdi Et st dsc brne
Y+,r16 Y+,r16 Y+,r16 r16,0b00111111 Mark ail exceptior6 Y+,r16 2 r16,Loll(TuNlxTrpHdl) 1 }ap.üandje.i$talli€ren 117,HICH(TuNlxTrpHdl) 1 118,6 1 Y+,116 2 Y+,r17 2 r18 1 l3€Init1 L/2
1 I I 2 2 2 1
Siei$bilß
el,c. löschon
Es wird nur ein lunktionsloscr iI?W handlcl gczeigt, da solc"he,die €c,htel\nktionen ausüben,z.B. Reporaturen vornehmen,in der Rechenpraxisnur selten benötigt werden und auch nichi leicht zu programmieren sind. Die bevorzugteR€aktion auf einen Fehler ist dasErzeugeneinesNaN! Als Beispielseienhier nur InteryreterdesJAVA-B)4ecodc Die sehreinfachgehalten€nKortrollstruktwen machenauch eineeintocheInitiali sierungdcs Moduls möglich. 9.4.2. NichtnumerischeOperationen Die Implementierung d€s Standords känn durch ctlictc nichtnumedsche Helferprozeduren erleichteft werden. Damit sind nicht nur Prozadufen zur Madpülation der Bitrnuster von Fließkommazahlengcmoirt, sondcrn auch Operationen ü'ie das Vezweigen äuf eine Zahlenkntegodehin. 9.4.2,1. Zerlegung Die erstedieserProzeduren,,6eziert"einc Fließkommazäli,d.h. sie bestimmt die Ka. tegorie ihrer Bitfolge und zerlegt diesedarn eütsprechend.
238
9.4. Diveße Im?lementie
rlg"ll
l3eDiss€ct Eine zweidritiel gelaüe Fließkommazahl t wird in ibrc Besiedteile Vorzeichen, Expon€nL Bit 'let und Mdtisse zc;e$. Der bids des Exponenten wird nicht entfemt' ds wrst%kte jedoch eingefügt. wird MantisrenormalisierierZahlen Prozedur
Input rrorrs
r,e:ra t
Adresseeincr zweidrittel SenaucnFließkomm&ahlI Der Eaponeni c(I) Die Mantisse,bei noilraljsicrien Zahlen1.3(l)' sonst3(l) D6 Voueichen6(I) Dic KäteSorie:NoR,NUL,DEN,IIF oder NAI
Die ProzedurcEeugt kcinenFel c!. r l3€Diss€ct: 2 3
ld ldd ldd
r18,Y r19, Y+1 r77,\+2
lsl ro1 breq
r19 t77 I3€Diss2
breq ro! ldi
l3eDiss6 r19 116,NoR
lsr brn6 rst
r19 l3eDiss4 r18
1di
2 2 I
1-6(r)
r
tr*eG)
1 1/2 1 1/2 r 1
und r null oder nichtnolmalisieft? sDrinsefalls null odcr niclri,norn. nonnalisierioder NaN? spriDgefaus NaN crzeuger .3(r) Kstegoricinolmalisielt
116,NUL
1 1/2 I 1/2 1
€lzeusc3(I), und nichtnormalisieri? verzweis€,fälls !r0 101 elso nichinonn. null ode! ichtnolmalisielt? verzweige,falls trs 10, also dchtnonn Kt|iegolie;Null
ldi
r16,DEN
1
Kategorie:nichtüormalbiert
25
lsr brne tsr brne ldi
!19 l3eDis68 r18 l3€Diss8 I16,INF
t 1/2 1 1/2 1
erzeuce3G), und NaN? fälls t1o 10, also NaN vexzweise, UnendLichkeit oder NaN? verzweige,fs.tlshs 10, ako NaN Kätegorie:urendlich
27 I3eDissS:
ldi
r16,NAN
1
Katcgorie:NaN
4 5 6 7 I
11 12 l9 ISeDiss2: 15
19 I3eDiss4: 20 2l l3eDis36l 23
u
und In den ersten.lrei Ze'lenwerdends untere Bvie von ! iD r1s. ds mittlere Bvte in r1o nr das in Zeilc vird von es I L das obere Byte in hz geladen hT.T ist also dae Vorzcichen Bit Bjeben die unieren nehmen t.arsfer bit t kopiert. Die oberen sieben Bit des Exponenten
23S
9. Der Staadaxd IEEE 754 fijl Fließkom aaxithmetik von 11? ein, ds uDter€Bii des ExponenteDist r1e-7. Ein in den Zeilen 5 6 ausgeführter l 0, so 8ö1re2' > 2, also2 < A2' we3en1 < 0, bt Folslichmus€r:0, alson = m, dazu,dassc normalisierl al6o2 < a, im Wid€rspruch : = gelten, ' = y. zu€anmensenommen und danii such 2' 1, al6oa B Die unsekehrteRichtuns,da36alsoo - y = 0 aus c = y folgt, ist naltirlichin jeder richtig. vernünftig€n Fließkommaariihmetik Beispielskam durch Auslöschungführenderzil Der Unterlaufdesebengegebenen fern bei einer Subtraktion zustarde. Gra.duellerUnterlauf kann aber auch bei Multipli kation und Division vorteilhaft sein. Ein schönesBeispiel bietet dic Division komplexer Zahlen, also die Berechnungvon
(9.6) für rotionaleZahleno, y, u und u. Erweiternmit t1- ?i führt auf die bekannteFormcl z=
r +at ru+ uu qtr- r:1), r u+1)'\: u\ u'z 1i4:l1
(e.7)
Dic Quadrate in d€n Nennerü der rcchten Seite von (9.7) können aber bei der Berechnung mit Fließkommäzahlenzu einem Uberlaüf führen, obwohl das Gesamteqebnis durch Fließkommaza.len daxstellbäxist. Die foleende,auf R L. Smith zurückgehende Umformung umgeht di€ Berechnungvon z'? und ,2. Sie besteht einfach därin, dassim Falle 1,l< tr.|Zähler und Nennermit 1/2, andernfäIls,also bei l! > tl, Zähler und Nennernit th muliipliziefi werdon.Das ergibt eine$eiis
" = 111+ + ! 1rs* s - -1,! :+' r's
244
nits:1rtir
r < ul
(s.8)
9.4. Diveße Imp lementjel1lngen
)c ,- _ x t r!:i ut+u !t+r
mir/-utü,
1,, lü
(e.e)
iF"i+i'ü$i4*äitr ;:!"'"äHtti:tä:'ffi sich leicht zu
1 (9.10) 4+^ 2 " rnu5.in '9 8' nurdern'äl"ilder rcchr'n JrzJ \on ? vcr'chwinder' D0 dcr Imap,inöflFil SeitcL€trachLcrwprd.n Dhspr isr rngen u/, = | 2
+a = ;i + , 1i :
2+i
r , o x 2 - 1 2 5+ , j a x 2 r,o.2_r2a+r.o>2
127 r20
(9.1i)
eingetreten ' L'o .x 2--127 Hier ist bcim z1{eitenSummandcndesZählcrsein Unterlauf gleitendem Unnlit Wird iJ ui"ht rrr"l,, of. oot-"lisierte Fließkommuzahldarstellber' trrlauf gearbcitei,crhä]i ]nan 21 ! 2
4+1
= tI
verwend€t'dh wird das &lsoalasftorrE*teErgebnis Wird jedoch harter Unterlauf sich untcrgelaufenc Zwischencrg€bnisdurc'ir Null er6ctzt, €rgibt
2+0 -2 4+1 5 und dicsesErgebnishat den grolicnrelätivenF€hlcr 0.5_0.4_n4
0,s &ngeht,der bei glcitendcmUnterlaufeintreien Wasdon möglichc Genauigkeitsvcrlust verwicben I kann.sei äuf den Abschniit C 3 *wi.-";;;; dPr zu klein' Ex;ü;; , isr FinerFal'lürtunkrio" rür un'crlaul ni'ht D0nrir'Üll d'r oon.,,,,t ül"r*"ft*, JiFs(rirr viFlm'Ir vorher I'n I29 zu crlröhcn -ri' dies'r BF"eichrranJormi'fl wrrden LPid(r L: I
re.l3l
I.it d€n vcrbleibendcn Fall d = 1/2 sibt cs die spcziclle Rundungsvo$drift
fäll.r€2Ll l.lo,]2= 0 r;"12 ' " - Irt ' t falt 62r-r',,od2= \'-r," lt2 +2" d€I crzeugteWert hängt äIsodävo ab, ob t2r5 einescradeZahl ßt oder licht So ist z.B. x 20 x 20)' = r,oooooooooooooor orooooooooooooooo (r,oooooooooooooof, da 19= 1/a < 1/2, und es ist x 20 looooooooooooooox 20)o= r, oooooooooooooro (r, ooooooooooooool wcil hier d = 3/4 > 1/2. Der Grcnzfalld = 1/2 iritt cin bei x 20 (9 15) x 20)" : 1, oooooooooooooro roooooooooooooooo (r, oooooooooooooor
249
9. Der Sta,nda IEEE 754 fiit Fließkommaarithmetik
(r, oooooooooooooro roooooooooooooooo x 20)o: r. oooooooooooooro x 20 (9.16) In (9.15)isi €2rb : roooooooooooooor eine unseradeZähl, lveshalbnicht ( 1)D12", sondernder ard€rc nächstsolcgene Giit€rpunkt (-1)!(€2"+2" 15)als Rundunssveri genommenwerdenmuss.ln (9.16)ioi {215 = rooooooooooooolo dageg€neine gerade Zahl, es muss(-1)!€2e als Ründurssgittcrpunktgevählt werden. In der nachfolsendenHilfsprozcdürsind die besprochenen RundunssartenimpleProzedur l3eRnd trin norma.lisiertes, nt.lt erd*r* Zrischenergebnis wird gerundet. Input r,1:ro,ro,lsDic Mantissede8Zwbchenelsebnlsses DerechteExDoncnidc8Zwischenelsebn se6 L DasVorzeichcn dcsl]rgcbnisses Output Die geNndeteEreebn muriisse Dcr cchtcExpoüantdesErgebui$es b Gcseiztbci ungültigcnRu duAgsürcd$. Es wird dE Regisie!116benutzi.Dje Prozcdurlcsi,ci, nichtaut UnteFoderUberläxf. I l3eRnd: 1ds I lst 3 breq .1 brhs , brmi 0 brcs 7 6ev I 10 11 r2 ?3 1lt l5 16 11 18 19 20 21 ez
250
I3€RndDI brtc rjmp I3€RndU: brts I3€FndUo rcl! aoc adc brcc adc btcc rot to! iac ad. T3eRrdo I c1v
r16,I36Rodg 116 I3€RndN I3€RndD I3€RndU T3€Rndo
2 1 1/2 1/2 1/2 1/2 1
Rundungsmodus laden enisprechend$ Stahrbitdetzen Ruadeüzumuüchstgel. Gjtterpunki nundcnnachunl,en Rundcnnachobcn RundendurchAbschnciden ! - r da ungültiecrRuDduDgsmodüs
l3eR[do I3eRndUo l3enndo ''16
1/2 2 1/2 1 1 1 1/2 1 1/2 I 1 1 1 1
lalls z > 0 abschncidcn äldernfälls Auftunden fälls z < 0 abschleiden Bercile Ädd. von ooo .Fr jnkremenliereunteresByle kein Uberiro€: ok addicreUberlrag zu oberer Byte kejDUbcrtng: ok Rechtsshift dcr Manti$e
120,116 I3€Rndo 121,116 T3etudo r27 !2O r22 123,116
Inkrenentierüns des ExpoDenten kein Eehler: b + o
9.4. D i\eße Imple mentiel'jn gel
4
& I3eRnalN: cpi btLo 2,5 Etne 26 2a 29 30 3r
brne sbrs rjnp rjnP
r Prüfe d r19,0b10000000 < 1/2: Abschneiden r/2 trs < g0+d T3eRrdo 1/2: Aufrunden r/2 1 1 ,1 8 0 + d > T3eRndUo 1 ti: |/21 r18 > 1 / 2 rA u f r u n d e n L/2 r , s 1 0 0 + d I3eRndUo L/2 €21' serade,al-sor2o.0:0? 120,0 2 ra]ls jar Ahchneid€n I3eRndo 2 fdlls nein: Aufturden I36RndU0
zu ermitieln Utu di$€n Es jst die ersteAufeäbed€r Prozedur,den gitltigenRundungsmodus zu be$tinne!, w'rd das B}4e, das die Bitmuster zur Runduneswahlenthöli, in !1€ seladen' Diese Bjtmustei sind so gewd.hlt, da€s nach ein€m Link$shifi wie in Zeile I die Siaiusbits cr n, tl und , zur Verzweiguns semÄß des sewÄhltcn Rundungsmodus berutzt w€rden können Falls obcr keines di€scr Statusbits den Weri I hati fa.llsa.lsoZejle 7 erleicht {urde, so ist kein in' süliiger Rundungsmoduseingestellt{orden Die Prozedurset,l d$halb do'sUberlaufbit zurirck' Programnsiück in das rufende Shrusregisterund kehri mii die&r Fehlemeldung jst, Das Runden durch Abschneiden besinnt in Zei\e 22. Da i^ di€scm Fol1 nichts zu tun i$t, und in die wird das Überlsulbit 8clö$cht,um anzuzeigen,dasskeh Fohler a.ufsel,reien rufendc Prczedur zurücksesprunsen. Die Zeilen 22 93 dien€n de! Prozedur als Scnereller Ab ZeileI t wid nachobenSerundet Doft wird dasVorzeichengetestet'Ist I = 1, a'lsoz < 0, so enispricht das AufwörLsrunden dem Abschneid€n, also wird in diesem Fall ia die Zeile 22 Giiierpunkt zu runden,das wird durch Addiii verzwUgt.lst ,: > O,so ist zum nächsthöheren wird in ZejLc19 däs R€Sirierh6 gelöscht'un damit on von i zu rzr::oerreicht.Zudem Zwcck geseiziwird' wjrd in der nÄ'hien r., das Überirassbit De in Zeib zu können. Null ar-ldicrcn Zeileeinc 1 zum lnhait von R€Sisterr,o addieri Gibt di€seAddition zum uniercn Bvic von r,1:ro keinen Übcrlauf in dae obere Bite. isr dad Elscbnis {hon konPlert bercchnFr.utrd es krnn zu!üclgcsprungenwcrden Anderrfalld wild in Zeile J6 dicscr Ubeltrog zum Inlßli desobercnBytes von rr1:ro addieri lblls dieseAddition keinenUberieuf€rzeust,stehi.aüch werden lst ober doch eiü Ubcrhier das Ersobnisschonfest uDd es kann zurückgesprung€n lauf einsetreien,so mussdas Ergebnisnoch normelisie werdcD Das Seschichtdurch einen R,echisshifivon !r1:,0 in den Zeilen /8-19, an den aber von links her das Ubertm€sbit c beieilist werdenmuss Anschliciendist aoch in den näcl$tenbeid€nZeilcnde! Exponentum Das Runden nach unteü, bceinnendin Z.ile 9, ist nun schnellerledigt lst nämlich z > 0' also !: 0, 60 entBplichtds Ruüden nach unten dem Abschneiden,känn folglich durch eine Verzweigung in die ZeiLe 22 erledigt werden. Und der andere Fall' z < 0) ken' da VoF zeichen iglorierend, vom Prc?edurabschniit erledist werden' inden das Runden nach oben durchseführtwird (Zeile lr). Es verbleibt no.,h d6 Ruüden zum DädNiselegene! GiihrPunkt ab zeile 21. Hier mus zwischend0unterschiedcnwerderDieBitfolgevondwurdeimDoppelr+ gister ue:1s überseben.Insbesondereentspli.ht I = 1/2 den Schweifrooooooooooooooo' ber Vergleich in ze\\e 21 kant dlso eine Pdtiellc Aussage über !9 mehen lst nämlich rr, < looooooo,so ist mit Sicherheiit < 1/2, und ec kdn durch Abschneide!gerundetwrden. ln Zeile26 sili also mii Sicherheiid > 1/2, folslich ist d > 1/2 im Fallerr3 I rooooooo, und es kBm nach oben geruDdet werden Hät die P!-ozedur demnach die Zeile 97 erreicht, so silt tro = rooooooo.Ist deshalbtß + 0, so ist d > I/2, ünd es ken nach oben geiundet
251
g. Det Standar.l IEEE 751 fft
Fließkommaalithmat;k
weden. Andentfallsist d : 1/2, und es mussds unreßk Bit von {215,alsodas unterstcBit : von r2r:2o getcstetwerdcn Ds g€schiehtin Zeile29 Ist ni'mlicli r21:2o0 = l oder r2o 0 l' ein Zeile so muss nach ober s€Nndei werden,wie cBsu.h durch da ÜbeNprinsenvon " Nichiübcrspingen daB was auch duth gcleitet wird, anderDfailsmussabgeschnitte!Nerdeni von Zeile 9(] erreicht wird. Überraschendcrweiseerf.'rclefi dic lmplementi€rung des Rundcns relaiiv serinsen Auf-
9.4.2.6. Verzweigung S€hr oft gebraucht wird däs Verzweigen auf eine Kitcgori€ hir' Diescs ltird iibcr Sprunelabellen ausgeführt Da die,,MechaDik" der Ausführung iiberall Slcich ist,lolmt aelr Großteil der Ausführu g in einc Prozedü auBzülagern' Diose Prozcdür "" "i.l wird ircr nicht aufseru{cn, da 6ic ja nicht a,Ir deD Punkt des Aufmfs zurückkdren soli, sondern cin zu bcrcchnenriosZiel anzuspringen hat 7 I3evzw: 2 4 5 7
1sl add clr adc lpn lpm nowr ijEp
116 130,116 r0 r31,r0 r0 'Z+ r7'Z r31: r30,11rr0
1 1 1 1 3 3 1 2
i*2i 3t3+2i
rr o- rlil 3 * rlil
in R,c8isi(*Z' und zNarso, erwaricidic Ädrcsscf def SPn:ngtabcllc DasProgrammsiilck wjrd dd in 11€ijbcr_ Folglich litkgeshiftei ei mal wic sic.üf BcfchlLPl,teNariet, nämlich cr in dcn Z€ilen2-l zur clrc Do..h links I cbcnlalls in Zeile i scshiftei' ecbcncTäbellcnin0 D'ru verblcihcrrden ur.l rÄ 0 tiirr tür r und = o" < urrd 0 fir r > r' udro=1fürr>1/2. Der FaU c = 0 ist, unl ein wcdges komplizierter' Zunächst ist xr ganzzahlig für Donnist I < r < 2, und = f-rr - o, esseidcshälb3(I) I ooooooooooooooo f r:.. 1 2 1 . : a v = = f ü r c < 0 , . t ! = 1 ,:re=lurtdaA=2 ü n dr a m a nu h ä l t r ! nruss Gitierpunkt' tür r > 0. Für das Rundenzunl nächstealegenen t
,=;+
f ."
+F
(9.1e)
betr&htet werdcr. Es ist ,l : I+r9 u d 0 < 1, < 1. Fü ' < 0liest man Folsendes ab: '" : -1 {ür r9 < 1/2, r' : -2 für 19> 1/2 ünd schlicß]ich,der Regelfolgand, dässbei zwci gleichwcit enifemtcn Gitieryunkten derjenigezrr wählcn ist, welchcr nach Dni'sPrechend entsprechcder Skalicrüngeinc geradeZahl ergibr' r" = 2tnr0-1l2 erhält m.r.nfür ' > 0: r" = | tlit ü < I / 2, r' : 2 fiir rt ) 1/2
255
L Det Standad IEEE 754 für FließkonDräadthmetil{ Nach diesem lluster kann auch für 0 < e < 15 vorgeganE€nwerden Sei dazu /.
t]
r/: ir+,1
"
+
f r"+r ' 2"+1
f
).\-c
'- lz
(s.20)
t'5 2rt
Es ist rJ = y + 02', s eat\zzahlisund 0 < lt < 1 Für n > 0 bedeutetda!i, dasss Cinerpunkt isi, d.h o liegt zwischcnden k\e\rf.xeganzzahllae dcr zu, nächstgelc8cnc licgt o für ä < 0 zvischenden gaMzahligenGitterpunkieng und y+ I Entsprech€Dd -3l g. Iud ganzzahligcn Gitterpunkten Da c ofiußichilich ganzzahligist für d = 0, sci l, > 0 angenommcr'Dann lblgt cY : y, rv = y und * = -y, xl = -g - 1 und,^ = -g/ für, < 0, cntsprechend hängt das = m nächstgelegenen Gittcrpunkt 1J+ | für o > 0. Bciln Runden z r^ -V -y j. = = I fiir d > l/2 urd liir lt 1/2, o' < Drgebnisvon d ab. Für < 0 ist r" -U -1/ = = ]lr > 0 = = 1. ADalos isl liir l,' fäIls i-. 0, andernfalls 112 ro bel 0 = = 112 !r' fall' ),12 und bei d ,)': r fär d < rl2, n'= a+11ür t) > l , =0, u (lailn = ja w€l1n = wehr, 0 ist rndcrnfallsr' Y cine 8el1l|1r 1/+ 1. Die Bedingungl-,, gcradeZahl ist. Prozedur ISeInt p wird ir eincSdrzcZ.ihl uhgewandell gcDouc ]rlicßknnüiazahl ljirc zweklrilNel Input r,o9s Adrcssccinc!zweidrittclsenaro Flicßkonnnazahl I
lttrndungsltodus hän€idd belechüctc Wcü votrrcirrgestell|cn Ist I nicht6chongdrzzalLlig, r l3slitKat: 2 3 , 5 6 7 s I l, rr r2 /9 11 15 ?, r7 rs
256
.dn ,ds . d\.r
llirr nornnli6ic|t Sprungziel o- odo o njc\| normalisier!
T3€IntNor l3elntNul I3€IntD€n
l3€Intlnf .dt .dw l3elntNan = L0l,i(2*l3elntxat) .eqü I3€IntKatL .equ I3€Int(atH = HICH(2*I3eIntxat) rcalt I3eDissect I3€Int I ldi r3o,I3elntxatl ldi r31,T3eInt(atH rjnp T3evzw t 17,75+L27 c p l I3eTntNo!: T3elntRet brsh r17 ,0+127 cpi breq l3elntEqo brlo I3slntlto I3eIntL1s rjt0p r18 tst l3eTntEqo:
d ..ter 6 NaN
3+ 1 1 2+ 1 1/2 1 1/2 1/2 2 1
zerlegedic Zahl lade Z mit Adf der Sprungiab. lür Bcfclil 1üPvorbereiiei vezweigc neh Kät mii, Heltcr . > 15? lalLsia: Zahl ist Ernzzahlis vcreleiche€ nii 0 verzweisefd,llse = 0 verzr€i8e fa.llse < 0 bea.beiieden Fall € < r5 uni,.Bytc der N{antisse= 0?
9.4. Diveße Implementierüngen l9 2A 2t 22 99 21 25 26 2'l % 99 io e] J, 9, 91 J' ,6 t't 38 39 lo ,t1 42 lJ ll 15 16 11 l8
orne cpi D]ieq I3eIntEqoR: lds 161 bteq brbs bt^i. btce tjnp T3elntEq0n:]s1 brpl rjnP I36IntEq0d: brtc I3eIntPn2: c1! ldi ldl bld tjn9 ]3eIntEqour brtc rjmp 1d3 I3€IntLro: kl O\6q brbs Drnl brca ]ds I3€IntIM: sbtc rjmp
4e
ldr
,.] 51 5e ,J il .r.r 56 57 58 59 6' 6r 62 63
rcall brhc 1ds sbr sts ldi ldi Ldi st std 6rd xet lds sbrc
I3eIntIMsr
I3eIrtSt:
I3elntRet: I3€IntXU:
I3eTatEq0R r19,0b1000000 I3eIntRet r16,I3eRndg r16 I3eIntEqon I3eIntEqod I3€IntEqoü I3eIntPDl I3eIDtIM r19 I3eIntPnl
r/2 fdls neinr nicht sanzzahlig 1 r"(r):1? 7 / 2 faLb ja: fertjs 2 116+ RundltCskontrolle I Linksshift setzt Siaiubits
r / 2 Rund- zuh Mchsten Gitterp. r/2
2
I3€IntPnl
!1€.6=1?dannd>1/2 r/2 j a : F s G r ): + 2 2 7/2 o > o + F 3 G q ) = 1
!24
I
r21,0b00000000 r22,0b01000000 r22,7 I3€Intxu
1 1 1 2
I3eIntMil r16,I3eRndg r16 I3eIntLt0n IS6IntLt0d I3€IntLt0u I3€IntPido r16,I3sctrl r16,IM I3erntrMs r16,XINT I3eTrapIE I3€IntRet r16,I3oStat 1 1 6 , 1< < I M I3eStat,r16 r20,0b00000000 r21,0b11000000 r22,0b11111111 \,r2O \+t,t2t \+2,t22
2 2
r16, T3ectrl r 1 6 ,X M
2 ungenauesR6ultat: lade Kotirollbytc 1/2 Falltüfunkiion zuselassen?
I
I
2
oooooooo) 2 = Ins(oroooooooooooooo fallsr 0+ [s(r!):2 o 1/2 + r! € {o+,0-} 1 1 = IFs(ooIrl.IIr roooo0oooooooooo I
1 2
Vorzeichenäü t eintügen si9nal inewt e.xcepLion
r lal = r/2? r/2 l'l=t/2+! e\o+,o-\ : +1 2 lsl > 1/2+ ['s(rq) 1/2,0+tri=o+ 1 1 2
o+ = ooooooooooooo sigaal inexa.t exceptiol
-1 = Fs(rorul1r roooooooooooooo 1 1 2 iignal iDexact exception L/2 x 1/2 ist j2 zu elzeugen,abhü.nsi8vom Vorzeichen von r. Nun wild d von den uniercn 15 Bit der Mantirise,also von den unterenBit voü r1e,1sdarsestellt,es 8enügt deshalb,!re:1s.14oder ho.6 zu betmchienrrre 6 = I bedeutet i9 > 1/2, 110.6: o bedeutetd < 1/2. Diece,Bit känn nach den Linkshift i! Zeile 99 über das Statusbit n gelestetwcrden.Isi es uicht Seseizi,isi al6od < 1/2, so wird zur Zeilc 79 gcsprunse!, ab der .t1 eMeDgtwird, andernfalls wjld ah Zeile 33 +2 etzerd8t Die Zahl I wird oooooooo. looooooooooooooodalgesiellt,2 von oroooooooooooooo von Bitüüster oolurl wird in Zeiie 9d ode! Biimusier geladen,anschließend r22r2r:2owird mit dem eDtsprechenden in Zeile 82 d6 in t aufbewahrie Vorzeichcnbit in ds Bitmuster koDieri, worauf Zeile 62 3tr23Die Einstellnnc d€s F,undnngsmodus sollte deshalb nicht direkt übe. die Mänilllatior der Eitmnster in I36R!ds erfolgcn, sondern indirekt nb€r veEchledcne Prczeduauftufe, Aucn ds bicret aber bei einem AvR-Prozessor keine abslut. Gevähr. 2sRundenznm nä.h6tgoLgcnenGitt€rpunkr.
262
9.L D i\eße Imqle me Dt ierun gen j'dact exception sigDaiisiert' gespNngen wird. Äb dieser Zeile wird der Aüsnahmezustand excePt'ionverläuft' der opemtion In'€Id Äusnahmezustand öa-das vollko-nen a"arog zuh wurde, wird hier auf beschlieben schon Ausführuns deBsen wi;d und ;; Zeile 6l sisnalisie.i die für Uryenauigkeiten zütändig eine ErHuierug verzichtet Falls eine Falltürfuktion, Falliürfunktion elb8t nicht tdtlg aufgerufene jst, nicht aufger;fen werden darf odei fal1sdie U!8enaüiskeit erzeust Di6e auf eirc 66 die Stddaidr€aktion we;den rcIt;, wird ab Zeile in den Zeilen 68 in die Ersebnis€riabl€ ErsebnisBes ungenauen ds in A;peichern b€stehi Zeile 70 uDd .lem Setzen des zstäindigen Statusbits in der folgenden d h_ Der Fall e:0 {ird in Zeile 32 forigesetztmit dem Rundungsmodus,,abwärisrunden"' -2 0 ist 1, für o < 0 iBt demnach hin Für c > Gitarpunkt kleineren zün nächsteelegenen ,rz *iid daher ds Vorzeichen von ' gotestet lst | = 0, also-'..> 0t Yild ," ".,".e;'ll"Z"t1" ab welche' das Bitmuster für 1 erzeugt wild Andernfalls wird in t" ü zii. % *-*"is", - wie den Zeilen 33-36 da€ Bitmuster für -2 erzeugt' In beiden Fällan wird amchließend gefolSt von einer schon beschrieben - die Ungenauigkeitsausnahme signa'lisierL,falk 'öti8 die,,UngenauiSkeil," auf Standardreaktion hin' n"" nrnaurgsmoau. ,,aurwä ; .unden" , d h zum nä.hsiselegenen größeren Giiteryukt tird Fhll Hier gcrade besprochene der wie behard€lt fiir e = 0 wi; in Zeile 38 8Mz eenauso 2 bei o > 0 und -1 bei t < 0 ab Ze;ie 92 erte.u8r' verzweigung Bej e < 0 wird anaioswie bci e = 0 vorcesanscnEs b€8rnnrin Zcile l' mir der Grr. rü'lßtgeleaeuen zum Fundcn hin Nur d"r Fundungsnodus oufden RundunSsmodus \ ob ird ' d$s damir in Z€ilc 6S beginnr seprütt Es nz ofiensichrlich terDunkthin is;icht s€ i s r o b c i r < 0 u n d o W e r ( u n d d c r l < l ' 2 l ' a l l s o b t , r l d e r S e r u n d d e d d e< silr.Ist werdcnab Zcile ll'J cr?eugt lst dsgegcne = -r' so wird-in-Z€ilc t"i" >"0, ai"r" ei.**.". /2 und ?7 8cl^*er. ob das unrereByre d.r Monribs€dcll Wert 0 har' Falls nein isf rl > l obere zeile 8l de wild in doch, wird FaLls eMeusi zeile 79 dasbrsebnis d&.nit t1, das ab wen = 7 de! sk'licrt€ l/2 so isr verglichen Grlr Gl€ichheit rooooooo mi. svr. ai' xao'.i're vonr 'ntw€der je Vorzeichcn jsr | . einc uneera.dcZahl. und dami! i* das Ers€bnjs na'ch .6 ode! o-lund;ichr -IJ Gilr dascsFnUnslcichheit so ist lrl > r/2 und das l:rsebnis daher +1, wie es auch ab Zeile 79 erzeustwird der irosrammtechnisch eiwas affpruchsvoiler ist der Fall I < e < 14 Hier isi zunächst und schließlich (biehc bFbrlmmen '9 ibt J zu 20 oben) dann o""i"Jiig" rnrr , "s^*"nnc; Werrl' = l 2 zu erzcusen Dic Abtrennuns von e]'!nn mit einem i* r*r' J"r,p"i'Ot" von e abhttnsüenBitmusier m!(e) vorsenonmenwerden,d wird mit dem Biimust€r mo(e) bestimni und mrn(e) ist der spezielleWert d = 1/2 Für e = 2 isl z B ] l r o o o o o o o o o o o o om v ( 2 ) nr(2) ooouuruuuu oooloooooooooooon1/r(2) Md erkenni, dass md(e) d8 Einerkom?tenent lot tne?) isr
(9.21)
"(")=mF
Nicht ganz so ofienslchtlichist dic Beziehuns
mv,G): (1+ln'k))/2
(9.22)
+ I = ooFoooooooooooo'aber dd enispricht skslieri r' Im Beispielist ooorurlurrl füi nicht 1/2, es mus noch ein Rechtsshifb folsen- JedenfäIk iBt klfi dss nür eine Tabelle daras Operationen einfarüe durch können Bitmuster beide! m,(e) arzuleeen ist, die übrigen Einsparung zweier Tabellen' sondern um e"*"u"n *".a"". Fo geltt hier ni.ht Bosehr um die
263
9. Dej- Standatd IEEE 754 ltu Fließkoürnaafithmctik die Einsparung von bei AVR Prozessoren relativ aüfweDdigen ?dÖellenagnifen l{it einem Zugrifi ruf die Tabelle in den Zdlea 112 123 beginnt denn aüch die Beaibeitung des Falles 1 < e S 14. In den Zeilen /16-127 wird B€glsterZ nit der Siüiadrcsse der Tabellegeladen' un.l zwar.wie der BefehltPMes verlangt,nachlinks geshifiei Es soll auldas zum Exponcnt e Zeile 198 noch CehörigeTabellenelcment zugegrifien werden. Regisi€r 116 enthält dber neh nicht de" .elnen Expo"erten, di6er ist vi€lmehrDochmii dem öis ae$ehenund mu$ durch Subtraktion von 127 heiausgerechnetwerden Da aber der Tabellenindex bei 0 beginneDmüss, der reiie Dxpoleni jedoch zwischen1 und 14 liegi) ist zur Konpensation 128 zu subtrahi€ren. Fernermussder indcx, wie die Adrcse aüch, nach links geshiftetwerden.ln den Zeilen s 'a d , e r r ' u n o s , I l i " ß r h k a n n r s : 2 m n d ' T / o / / J e \ : r o d a n n d c r I n , l e x / u ira b e l l - n e r p s d gcladen@rden ra,2 enthält j€tzi alsoda Bitmuster m, (e) zur gewünschtetr TabelleneleneDt Teil$ y, folglichgili ldpo = v nachdenZeilenlrd 198'indenen Extrakiiondes ganzzdhligen rrrlro kopicrt und dolt der gebrochencAnteil herausgeblerdel neh die Mantissevon he:1s von wird. In AnwendDs von (9.21)wird dann in rs:, ds Bithüste! mr(e) zun Herouslösen d berehnct (Zeilen 139-l.lr), im Anschlussdarsn findet die Auslösltrlsauch wirklich statt' isi slso de:rs = d Bcvor nun {i€der nach den Idunduns8nodüs nach dcn Zeiler ll1-ll2 noch schncllder F5l11t: 0 erLedislwerden.D&u wcrden in den Zeiler wird. kann vepweisi ds untclc und dN obüe Byie von d ,,rcrodert"' das E€ebnis ist serLeudann Ntrll, llJ-lll wenn beid€ Teile den Wori NuLlhaben l.lifit ds zu, ist I sanzza,hlisund in Zeilc tl5 wird zu einem Ritcksprungin ds rufendc Prosrmrn v$zweist h dcn zeiLen116-151 Nitd vor der Vcrzweisunenach RundungsmodusDoch n1/,(e) in r6ra berechn€i,.Dazn wird zucrsi nlr(c) na.h !6ra kopiert Anscl ic߀ndwird r6,a nsch rechtsseshiftet' dabei whd €illc r in die dann in dcD Zeile\ 119- 151'tt t 6:a hln addierl'wird Ds das Überfrogsbiic seschob€n, orlcdisi (9.22). In den Z€ilcn 152- 158 wird - wie schon,uvor - nach dem Rundunssnod$ verzweist ln jedeni von ihnen sibt es zwei möglichcErsebnissery oder v+ 1. v als Erseb is whd ab Zeile 1rP erzcugt.Da r2l2o schondio untcren 14 Bii dcr Mantissecnthült, nrussnur noch dcr Es besinut in zcile onit dcm tjs veßehcne)Exponcni aus 11' i r22:21r,oeingetüstwerden. wird r,r mit den Exponentetr 15, damit, dossr21 nach lirks seshifiei wird, anschließcnd Rechtsrotatio von !21 wjrd gclo.denund Sleichnach rechtsgeshiltet,mit der nächfolgcnden wird noch in Zeilc Zum Abschluss hineins€schobcn aenn das uuicNie Exponcntenbitin r2r (iriexacü exceP'jon)siAusnalmFzustand,,u bevor dcr er8örzt, senau" 16J das Vovciche! gnälisieriwird. Die Ausgabevon I + 1, die i Zeile 16, beginnt,ist etwaskomPlizierier'Die zu äddicrende,,1" Iiänst nälnlich vom Exponentene ab, sie ist sesebendurch 2mv'(c)' wie InD sich leiclit übcrlest. Sie kmn deshalbin dcD Zeileü JdJ 166 durch cinen Li ksshitt voü r6:a gcwoDnenwcrden.h den beidenüächstcnZeileüwird danD! + 1 bcrechnet Ergibt db kcinen Übertrds, so klD rur Aussabevon ? jn Zeile lr9 veMweleiwcrdeu'die siiuation isl ja vi)llig glcich. Falls rb.r doch ein Übertrag ei ritt) musszür.Kompensaliondie Maniissc nacL rcclits seshifi,eiwerden (17, l7.l), wobei natürllch das Ubeltmgsbil iD die Müiisse werdenmuss. Außeden isi der ExpoDcntun 1 zu dhöhen Ddeh links hincinsescllobeD kann ebcnfalls zur Auseabe von y gcBprungenwcrdeD. Beim Rundungsmodue ! dd Ergebds, dm witd it Z'ile 157 ,,Abschnciden"isi olTensichtlicll Beim Abwürtsrunde! ist ds Erseb s aüch auBee{iihft Ausgabc von, .lurch Verzweicenzur Vorzeichenvon' geteetel deshalb das y Ia zelL lTl wi.d lbeir ! iieseswlrd ja in r aulbewahrt urd mschließen.lentspreche verzweisi Ganzcntsprechend wir.l bcim Aufwüxtsrundenh dcn Zeilen 176 177 ve düren.Beim Ründcn zum i'chsisel+ gencn Gitteryunkt hängt .las Ersebnis von d ab Zur Erinneruns: Beim Erreichen von Zeile 178,in der dd Runden zum nücißigelcgenenGitijerDunktbeeinni, ist irr:r3 = tr(€) und .u, : mr7:(e). In dieserZeile wird also tto, das ob€rc Bvte von md(e), niit 15' den oberen
264
9. 4. Diveße
Imqle7J,entierünget
l ? udd das Ersebni' sr ! fro'ür'li\ r" qo isr J BJlp \o1 m, 2 .' \erc'i'hen Ci'r tio l/2 uno dd ErgPhrrE r ' "o !' ' r,' von r vpr"'h'n) gif daBegcn ,n | ,1"n Vo-,"rt.n = auch die unte'-en t5' müsen tß AlterDative' Bei der aer;bibenden i;;; ;--..+ v-l L2undtsT(4{üt "t-'rrf,"r *aden tafÜr(,' r r " b i ' t s i p h r A u ( n / 8 / / n"., LZe'h -
;';i
;i?il;
tai ratr t"t bpidesni hr det rarl so mus"bo'h ds Er6pbn:"riü.'
I/2
P'negctadezasl ßr odq mrnr' o n beninnr w' .dc!. D,a+. E'gebn:sSinsl oavon 'b ob I D i p P o . i r i o nd i f t c a u D r e ' l r e Dj J r r n a n c r I h a r ' o d ' r $ . 4 o ou da" ünrcFi" Bir von, oen d t r w p i r c ro b ' n b c b r i m m r p /nu v e $i s r n s ' ü r l i c hd i c P o 6 i r i o n * r--*'-;.b, von r6a seson"r.i." m 'z/'\ von ,,l , dra einra'h dJr'h einen Linkbshrrr .also "ri,"^aar*"a1" nocs kJnnDarb:aaber Beb'ou'" n'n üqden j'i".:"J.1: rs:2 herge6telltlst nun I eine ungeradeZahl, r:'l:;l;:.1'ffi"1",'1"::1"fl'l: i6r neh rn den Z.il"n /8?-r88 hi'hr' ir j'do'h s eine serail' Zahl so ;:il"; ö"""".^." uperanon,'r Ds-de! scnn g€nou dann .liescnbeidenZ'ilcn r3r, - 0 Lptzt€res6ilt nsrüdjrh nüchstenzorc 8{srcr: r$ Zeilc l8o pinp Null hcr€nskomnr' DieseB"dingunCwtrd in der , s n d e r n l e r r 8-l / | E r g c b n i s d a s o , l e r i . r , r s i ee r f ü l l r ,i s t a l s ov g c r A d es o T"J.-v,li ts bleibr noch a"i Fatt tt.ig, da$ I zur KateSoricDEN0"" ot"ntnottttn "n'"n t'no"
Ersebnisnän€,*",,llti}äi"T,,J:ilH"rTili:l ahtrds.s einfach. Hi.ristdi.B*echnuns Fallesbegitn!al$omit d diescs Die Behandlung d'rekt ni"a,^*..dus r;zeile 106BeiR'rndunssesenNullk€nnoffe'sicbrli'h t*"*ir"" Gntc'punki nti.hsselcs{€n bc,mRrjndens'ss ds ."rden. ebenso "rä;;;:;";;#"
ii iäl; l-:JJ.flliTi.'x'i Y"':liiffi lli::i iJ,?i,11-*"":i :?f ä:":l:H'":l de! Zahl. sondernnur von ihrem VoEeichenab dcs PENTIUM signäIisiertinexa9t9xcepl BefehlFRNDINT Der I3€Int €ntsprechende wcrdenmuss um da€ Elsebnis zu crlanscn Dcr standard sast ":;;.-;;;; cner Opentionn;chlgenau.t't aarn "";;J", Wenndaslcruhdac Ergebnis hicr iedoch::6 abcr p€r deJ"ßt iot inexact ex.,ption zt signalb;crcnDa€ gcrund(teErgebnis ^hier srnd,genzc nrlionerneenau,dtnn es isi jo das gcwünschreErgebnis unJ au'lerdpm acr abslcff von Uberlaü Zahlenim-Zallengittercxakr dars(ellbar'wennnün einmal bei dass nicht' sagt r'[.^i"i-ä""at"*"*"r, eal nicht eintreten L€lm Der standaid iII wie imnrer wird hier' Ü.c;nauiskei( a uzeisensci rlotzdpm iil;;;;;;";" .olch cjnemFall. rtemB(ispicl des PENTIUM gcfolgt 9.4.5, MultiPlikation oJ und b = o = o" Zu zwci ziveidr tcl genauFnnormalisiFr'(r Fli(ßkomnäzrhlen genäüe zweidrittel ist eiüe t * . . n" *ff a* p.ätf.t berechnetü'erdenDi€sesProdukt c = c:::r' comit der Eigenschaft Fiießkommazahl [s (q)Fs(b) = s's(c).
(9.23)
e' kein c Bibr mij f' {ollFs{b].,D a . A p p r , r i m 0 t i o n s / c i . h F ns o L h F d e u t ' n d a ' s t a r q soll dF"Pn t'rc) dcm rroouKt w F r d ' ' l g c n " m m e n ( n.rct. do,i.nie" auq d"m Cirr"_
Run näi. si-J vomseqähh"" iii",r"irj Ä,l*r'"n''na'. ko-'nr'br"*' mosri'hsr dügsmodus diktiert. ^tt
tt*^,t
a t*n
A -
.p.,r,l-
t" rot dtt
I Lhei tlE itexa't
ex@ptio' shaj, be sis'eJ"l
265
9. Det Staüdaxd IEEE 754 lür Fließkommaaithmetik Bei den folsenden ANführünsen \\'erden die Vorz€ichenvon o und b zünüclst aüßer Acht gelassen. Es sei a = Fs(o) und b : Fs(b), {erner e. = e(o) und e6 : e(b) oflensichtlich sind ?, = (1 + f(o))215 Lrndu = (1 + f(b))21s ganzeZahlen.Mit diesen€rh:ilt mar für das Prcdukt ab: rru2-302ed+4odcr oö = t 2-302""+4 mit u = t1u.Ntn ist, als 1 + f (o) = r, or4. oo, also ist u = (1 + f (s))215= ror.r" .r0 Binärzahlgeschrieben, elne Zäl1lmii 16 Bii. Ebenso, : rbl! . . b0. Folglichist u eine Zahl mit 32 Bitl ..tüo. Wegenu ) 215und tr ) 215ist tr > 230,lo3rund m3okönnen t? = u = ro31rD3o also nicht bcide zusleich den Wcrt o haben. Ftu dä6 Produkt ersibt sic.h ab = uJ2-3o2'"+eL = m3rftijo,rD2q... roo2."-"" = fogr,lo;o too2'+""+" Dies€Dä.rstcllungdesProduktesist noch nicht normalisiertJde rosr = o möclichist. durch einen Da aber m3o= r b€i tusr = o geltcn muss,ltisst sich die Norma.lisierung = Falle tosl = r und i im Wcrden a.1so einzigen Linksshift erreichen. f lijl fso lo durch '=0 i31,lso" fo = iosl,tlgo foo und im Falle to31= o durch t31,i3o to = fo3o,ro2s tloo
l = -l
definicrt,so wird dac normalisierteProdukt zu
,o = fgr,lso...fo2t+t+"'+"'
(e.24)
alleding8nochnicht Dosist die €caßteDo$tcllung von ob durcheincFließkommaznhl, unbedingtdurch eine zweidrittelgenaue. Zunächst sei ongenommen,da6s 6ich der Exponent € = t + 1 + ed + ed im fur einc erloubtenBereichbeffndetEs sei ormalisierteFlicßkonrmazahl
l-=ho
fo
det Sckwei,l21von l, auch ,,die unsichtba.renBit" genarnt Mit 6 = fsr,fso d = o,115. t0 erhält mar wie bei (8.a)
's ab: C2+ " ü2'
t31 i zu urterscheiden Nun reicht zwar dio (enntnis der ersten p + 1 Bits dcs Qüotienten aus' korrekt zu runden, es sind abcl 2p Quoiienicnbits erforderlich, um erkennen zu könrcn, ob der Quotient exakt i6t. Dass wirklich 2p ünd nicht wcniger Quotientenbits nöiig sind, die Exoktheit des Quotientcnzu bestimmen,zciEt das Beispiel0'8EAA/0'888D = 1.087600038F.. . oder in Bnfirschreibweisc: oj rooorrro rofoforo oj roo0rooo rooorrof
:
I. OOOoIorr OlrIOflO
OOOoooo0OOOOOOnIOIIfTIf
-
277
9. Dcr Standa
IEEE 7s4 für FließkoInrJ,aatithmetik
Den ersien 16 Bits des Quotientenfolgen 15 Nullbits, aber die erstcn 16 Bits des Quotienienbilden nicht den exäkienQuotienten. Die ExaktheiidesQuoiienienkannaberauchfbstgestelltwerdcn,ohncdcn sesamten Schweifberechnenzu müssen.Dazu ein€ Delinitbn: Für u = o,ür ...u" sei ){t ) der Index d€sletztenvon o verschiedeneD !q. Z.B. ist .\(o,roror) : 5. D.mit lässisichdas folgendeKriteriurn fbrmulieren: Ess€i ä:q=2'xo,qrqr
., mit,?€{0,l},und2=o,q|
A ( ö ) + . \ ( lpr)+ e
I -, 2"P , 1 ' 1 - o' bl = - \ 2
r'
Hier nocheire Annerkung zur Bezeichnungswcisc. Ar$ träditionallenGründenwird gänze sondcn cin aus zweiBits bestehendes Suroli nicht der Bitschweifbctrachtot. t däs sijcl rooooooowird i n Zeile1l/t indie Zelle13'l verzweigijuara:o um I zu crhöhen. D " r d , , " k t " q FW " 8 \ { i r c . ' i n - . i n / . 8 . r , 6 / u . e p n u n o d a n n/ t r A d . , F r F n .r t(b), so seschiehiin den zeilen 50-il rolsendes: . Die vorbeusend€ErniedrisunsdesExponentenin Zeile 9d wird aufsehoben(Zeile 5r). . Ds este QuotieDtenbiiq0 = r wird in rlzj6 lhineinseschoben"(Zeile J.1). . Der Schleifenzähler rr wild veünirderi, cLd{ur uoch 15 weitereBits zu berechuen3ind lzcitc 52). . Itesisterrs:2 erhäli seinenAnfangswüi ro = l(a) - llb) (zc cn 53-54) Die Schleifezur Berechnunsder eßren 1(J(oder 15) Quotientcnbitsisr in r,en zeiten 55-67 €nthalien.Sie beginnt demit, dä6s11z116nach lirtks g$hiftet wird, um lechis Plaiz fiir das niüchste Quotienienbjtzu rnacher.Danachwird rs,, nachlinks g$hiftei, un 2r"-1 zu bilde!. Tritt dabaiein Ubertragauf, so ist 2r',1 > 2 und damil eßi lecht 2r,-! > l(6), also wird iD die Zcilc dJ s€sprunseü,in de! dieserFall beorbeiteiwi!d. Ist dar Lnrksshiftaber mil keinenr Ubülros verbundcn,so wird in dcn Zcilen 6r-11 2r,-r explizii,mii t(b) verglichen.Er8ibi dieScfVc€lcich 2r"-1 < t(b), 60 kann schoDan das Schlcifcncndc scspruDscnwcrden,dcrn 6 ist dann r" = 2r, I und q, = o, d.h. rr? 16 und rB, enthaLten6chondie dchiigen Werie. Isi däs€sen2r"-r > f,(b), so wild in Zeite 63 q" = I und in den folsendenbeiden Zeilenr" berechnet,r, - 2r,-r J(b). Näch dem Schleifendurchlauf mussein weiijererSchrii! des Vertäluensfolse , um däs Rundungsbitzu ecwinncD.Also wird in dcn Zcilcn d8-69 Doppelregisterrs:2 noch einmal nach links gc6hifict,um 2rß zu bildcn. Ergibt dß cincn Ubcftra€, so isi q16= r und es mussaufsernndetwerden,was durch eineSprtrnsin die Zeilc 7l auch seschicht.AndcrnfaLknNs in den Zeilen71 7, 2116mit J(b) ve.slichenwerden.Siellt sich dabei heraus,dass2rß < l(b) Bili, so ist abzuruüde!,d.h. es kam dilekt i! Zeile 8l nit de! PliifuD8 des ExponenteDbegonnen werden. Aderntalls lsi aufzürunder, das in Zeile 75 beeinni und däs in dieser Zeile cin geseiztesUbeftmgsbii eNariei. Diesesmussexplizii gesetztwerden,ddes naiürlich Dichi gcsctzt isi) wenn dic Vozwcigung in Zcile 73 Dichi erfolgt. Zum Aufrunden wird in Zeilen 1 5o h ö h i , i n d e n l i D G e s i a l id e sÜ b e r i r a g s b i izsu m Tr T6doQuoticniqo,qr''-qrum2 Qrotientenresisier11z:16addiert wird. R.gisto ro wurdc schonin Zcilc 35 mii 00 gcladcn. nilc bei diecerAddltion ein Ubertras auftritt, mussder Quotjent neh rechtsseshiftetweF den, anschließend ist der Exponent uh Eins zu erhöhen(Ze\Ien'/8 8r). Dabei besinnt der Rechisshiltin Zeile 78 mil dem Befehl röx, da ja das Ube tugsbit in da Blgisier 126:24 hineinsechobcn werdcn mss. In den Zeilen 8.1 87 wi.d die jetzt schon zur Gewohnheit sewordeDeUberprüfuns des Expo neüen durchgeführi. Anschließed wird di! Bitmuster des Quotienten ebenfalle wie sewohnt zsmmengeseizi (Zeiler 88 9?) , bevor es schließlich aüsgegebenwird.
309
10. Die lnrpletuenticrüne.tr.j,{Vn Seündljcn-",FließkanmaaüLlüneLill
10.5. Vergleiche Gelescxtlich nnNs fcsts.stcllt mrden, wel(her der drei B€dinsunsen Fj (d) < 0, Fs (d) : 0 oder Fs(o) > 0 cn,c zw,idritt.t Bcraüc Fli€ßkommazahl o senüst. Das ka r mit seh viel rvenigerAufrvaud gcpriift wcrdcn, als für €iren sllßemejn€nVergleich zireier Zählcx zu leisien wärc, wic do Vrrglcnrh.kj beiden Unterprogramme FkaTst und Fkavgl zejgt. trIit FkaTst lässt sich au.h fostsidlcn, ob enre positive oder eine negalive NLrll ! o l . b r f d l l "J " . j . 1 , . x l .r . o u , r , 1 5 : . r r , . l r . . Plozedur FkaTst En'e z$€nbitiel gen{üe Fließkonnnazahl wifd gcrcsl,ciund !s $lklex äLsEr gcbnisSlatusbils geselzl: . lst ßs(d) = 0, so wid dds Nnllbii it des Siai,,sn:gistcrsßcsctzt.lst dascAcnl:s(d) I 0, so wnrl .]as St.tNbit sclöschl,. . lst s(0) = r. ist also daBVofzcichenvon d geseizi,so wird das Ncsntivbii e dcs Stah,s tisistHs sesctzi,ist s(o) = o. so wiü d6 Statusbil Brlös(liL. Na(iltdud Auifuf d(isIl,norrrosmn,nrs kanr .lso wic scwohntnjt brlt, blg€, bleq 1ull blne
r2or2s l)ic ^dfcssc ,! cirLo zwci(hiilcl gdr{u)r lrlicßkoritrrirhhl 0 Dn, l)rcz(luf sclil drvorr rus, (lässd kc l FkaTst: il '| I t 1, 7 8 , FkäTo1:
push2 ldd ldd lsl rol cLs brcc ses pop2
1 1 6 ,r 1 7 1 1 6 ,Y + 1 tt7 ,Y+2 116 r77 FkaTo1
NrN isl. l,lsivnrl k.jn ltl,Lo cf?crAt. n[,. .nr
2
r,r! ,
2
t171 (r2r..dli
1
rr?ec(d)=d,...0[,...-,(0)
r/2 I
\\,'om 6(d) = ,, .hnn 5 ts t
r17,x16
l)ats UntdDrograllr isi leichl zu verlolgen. B€gister 116 wn..l .ri1i d.m miitlcrcn uDd r17 mit d.m obo.n llylc von d gcladcr. Dic bcidcn Slilts erzeue€Dden ExporeDte! in rr? Dd ziveite Shift setzt dabci das Nullbit, faus e(d) : 00 gill. und l:idl glei.l,zeiiig d$ I;bertrassl)it nir den voüeicher s(ü). ID dor zeil.n 6 E wird also d6 Ncsaiivbii des srdlusregist€ß nL ^bhängigkeit von \irzenilen von o Aesctzt.
Däs Unicrprograutr tcstot nnrht ob os rnit cnrem NaN als Parämeier nufBernfer wird. Soll dieser'test doch durdiecfiiht wcrdol, kann lvie irr Fkavgl vo[egargen iverdel.r' Die einfächste \'löglicl rcit, zrv.i Flnrßkomir^zahlcn zu veigleichen, besteht däfin, ihre Diflerenz zLt bilcler urd LLics(:nit FkaTst zu nDtersuchen.Das erßäbe zwar eir sdrr kurzes Unterprcgfamrn, aber der Aufivand dr Prozcssortakhin w;tr. bcträchtli..h. r0D:LssdrJ T.st rniht dn(ngeiihrt {ird, üai tisiletis.hc Gründ.. Dü rörig. V.rgl.icl, nil 255 hiithl Aus- und Ncbenwifkune.r, .ln] ärs .nrxn lr.t€rprcsramn, das sein€Aüsabe ziels€richi€tverlolgi und hübschanzus€lenist. enr zienlicl,.s Dürdrnhüdd g{rna.il't hätten
310
10.5. VüSleiche
Dis 1üsst sich vermeiden, l\renn gar nicht die Fließkommaw€rte dar Zahlen betrachtet werden, sondern ihre Bjtmusier. Wie so oft stcckt aber auch hier der Teufel im Detail. Woute nan die vielen auftretenden Fällc mit dem Einsatz von relativen Verzweigmgen erledigen, erhielte man ein ausgcsprochen unübersichtliches Programln (Spashetti-Code). Hier wird deshalb cin anderer Wes sewählt, und zwax wird jeden nöslichen Fa.ll €ine eindeutige Zdl ztscordrei, die dann als Index für ein€ Sprunsta belle ve$endet wird. Man crh:ili ci übersichtliches,leichi zu verfolgendesProgramm. Als kleine Nebenwirkung btcllt sich ein, dass ein möslicher Fall nicht leicht vergesscn Prozedur FkäVsl Zwei zweidrittelgcnaucFließkommazahlen o = dr3 a0 und b = bB. .bo werdcnvcrglichen gesetztr uDd cs wcrdcn als E.gebhß Statusbiis . ht o ein NaN oder b ein NaN, so wird das Übcrlau{bit o des Stotrßreglsiersgesetzt, die MdereDSiaiusbitshabcn in dicsch |a1l l<eineBedeutung.Ist dagegenwederd noch t, ein NaN, so wird dqs Überlauibit selöscht trnd ds Null' und ds N€sativbii habcn die nehtolgond bechricbenc Bedeür'lns. . Isi Fs(o) = Fr(b)r so wird dB Nuilbi( r d6 SiätNregisierseasctzt.Ist daseeenlFs(o)+ Fs(b), so wild das Statusbit g€löscht. . ht F6(d) < Fs(b), so wird das Nesaijvbit 5 de$ Statusfe€isteßsesetzt,ist dag€gen Fs(d) > Fs(b), 3o wird das Statlsbit 8e]ö$cht. Nachdcnl Aufrufdes Unterprogramrnskanü aLsowie gcwohntmit |!lti b!86) b!6q und b!!€
Input !,o2s rslso
Die Adressed einerzwcidriticl senauenFließkomnazähld Die AdrcsscB cino zweidliirel senauenFließkomnazahlb
DasUnterpro$anmcucugtkeinenFehler. 1 vpfFkav: e 3 I .' 6 7 3 9 ld ?l 12 l3 11 15 16 17 FkaVnN:
.dw . dw . dlr .dw , dw .dr .d{ . d\{ . d\{ .d\,r .du .du .d!r .dv . dw .dw
Fkavppnn Fkavppnz FkavppzD Fkavzz Fkavpnnn Fkavpnnz Fkavpnzn FkaVzz Fkavnpnn Fkavnpnz Fkavnpzn Fka\zz Fkavm FkavnDDz Fkavnnzn Fkayzz
6
s
b)=oFs(tr)+oFs(b)10 b) = o F5G)l0 F6(b)= 0 6)=ors(d)=0F6(6)10 ü) = o rr(n) :0 rr(b) = 0 6) = r Fr(i!)l0 rr(b) l0 d ) = o s b) = r r,(o) l0 rs(b)= o
6 ( a )= o s ( b ) - r r 3 ( o )= 0 r 3 ( 0 l o
1
6(0)= o 6(b)-rr3(q)=013(b)=0 6(0):r 6(b)-or3(o) tors(b) lo 6(d): r 6(b) : o ri(o) l0 rs(b) = 0 s ( o ) : r s ( b ) : o r s ( o ) = 0 F s ( b )l 0 6 ( . ! )- 1 s ( b ) = o F s ( 6 ) = 0 F s ( b ) : 0 6 ( d ) : 1 6 ( b ) = r F s ( 6 )+ 0 r s ( b ) l 0 6 ( d ) = r s ( b ) : 1 r 6 ( d ) l 0 F r ( b ): 0 6 G ) : 1 6 ( 6 ) : r F s ( d ): 0 F s ( b )l 0 6 ( ü ) : 1 6 ( b ) : 1 F r ( o ) : 0 r s ( b )= 0 Uberlaulbit setzen, da ein NaN vorlicgi
311
1a. Die Implementierüna eiaer Avtufteundlichen Fließkommaaxithmetik rjDp Fkavrtl 2 pusb4116,!17,r14,!19 3 pusbsr20,121,r22,r30,r31 10 20 cI! t22 1 r22+00 21 ld 1 1 6Y , 22 ldd r17,Y+1 2 23 24 ldd r18,Y+2 2 ld r19,2 25 2 26 ldd r20,2+1 2 27 Idd t21',Z+2 lsl r17 t rr?+d14 "tuo c€d15 28 rol r18 1 r1s+ e(d)= r'*. .dß ctsor3=s(o 29 ral r22 1 ooo* s(d) 3A I€I r20 1 r2oFbra, ,bso ctsb16 3t . o,' cFb$=6(6 rol r21 I r,1 ec(r)=!r, 32 o o * 0 roI r22 1 6(b) 33 cpi r18,255 r Ist 6 ein NaN? a4 1/2JarUberlaulbiisetzen 95 breq FkaVnN r21,255 1 Ist 6 ein NaN? cpi FkavnN 1/2JarUberlaufbits€izeD 37 b!6q r18,1 1 . = r 1 + e ( d )= 0 38 Bubi tol r22 1 o*oe Fs(d)= 0 oderrs(o)l0 39 s u b i r 2 1 , 1 1 c:r(+e(b):0 1A rol r22 1 i09l r3(1,)= 0 oderF,(h) + 0 (2 *vpfFkav) ldi r30 10\r 1 Z t s 2 x W fFkaV 42 , ldi 131,HICH(2*vpfFkav) 1 43 I k+2k kI t22 1,1 1 Z - 2(vpfrkav+ /i) add r30,!22 15 r22 1 cll. 16 1 adc r31,r22 lPtt r22,Z+ 3 Ztso^=vpJFkavlÄl lpß r31,2 3 nov r30,r22 1 50 51 ljmp Fkavppmrcp 116,r19 I r1s:r7:16Dii rzr:2o:1evcreleichen Fkavglr
54 55
I
Ubertm8sbji c und Nullbit i als Ersebn
r/2 57 58
I
pops r31,r30,r22,r21,r20
Fkavnnnn: cp
r 19.116
1 Uberlaufbit löschen (kein NaN) 10 8 I
r:r:20:le mit hs:1?:1s vefglcicheD
14.5. Veryleiche 63 6.1 6i dd 67 68 69 Fkavzzl 70 z ?2 FkavppDr 13
cpc cpc cfs brcc ses rjmp
z
rjnp Fkavrr
cls rjDp clz cls
t2),t1,7 t2t,tL8
1 1
Fkavrt
r/2
Fkavrt
2 1 1 2 I 1
78 79 8, 81 82 83 8l 8' ,6 87 88 8, 9,
Fkavrt
seg rjmp Fkavrt
Fkavpnnz: clz cts rjmp Fkavpnzn: c1z cls rjmp FkavnpnzI clz s€a rjmp Fkavnpzn: c1z sea rjmp FkavnDnz: clz
. und Nullbit,
als Ergebnis
I
?t FkavppznI clz 76 77
Ubert.igsbii
Fkavrt
Fkavrt
Fkavrt
Fkavrt
Fs(6)=0^Fs(b)=0 +
s s G )= r s ( 0
Fs(o)>0^Fs(b)-0 +
rs(d)>[s(b)
2 1 1 2 I
F3(d)=0^rj(b)>0
=) r3(o) 0 ^ F s ( b ) = 0+
FsG)>Fs(b)
I 2 1 1 2
Fs(!)=0^rr(b) < 0 =) rs(o)>rr(b)
1
F , ' ( o o ^ F i ( b ) < o +
16(o)>15(6)
Fr(d)0 +
F s ( d )< F s ( b )
Das Unterprogrmm begi^ft n\ Zeile 19. Nach dem Löschenvon Resisier r22, i! dem der Tabellenindexberechnetweden wird, wid Dieifa.hregisterrls:ri 16 mit o und r21:,o:remit b seladen.Dürch die beiden Shifis in den Zeilen 98 29 wird der ExponeDie(d) in r1s zu sdmengecetzi, aleichzeitiswird ds Vorzeichenbits(B) in d6 UbertraesbiteGchobcn,und dieseswird vom Shift nr Zeiie 3, von links in Registefr22 hineinseschoben. Genausowird durch die Shiftsin den Zeiler 31 39 der Exponeni e(b) in r' zusannens€setzt,gleichzeitig
313
10. Die Implemeüiernns
einer AvR-frcundlicheü
Fließkomaaxithmetik
wird ds Vorzeichenbits(b) in dae Ubertrassbit scschobenund vom Shlftbefehlin Zeile 3J von links in !22 hineineeschoben. Die Shifts in Zeile 28 und in Zcile 9l aildern nichts m absoluten GrößenrerhältDis do Mdiissen von a und b zueinander, da in jcden Fall rechis ein Nullbii r!.]rgezogen und links kein Mdtissenbit lirErsseshiftet wird. Die Exponenter werdeniD de\ Zeilen 3.1 37 aufden Wert 255 getestet,d.h. es wird bei o uDd b geiestet,ob eil NaN vorliegt. Ist d6s bci q oder bei b def Fall, wid in die Zeile l7 ve.zwcist, in der ds Uberlaufbit gesetzi wifd, bcvor in ds rufende Piogrdnn zürückge In Zelle 3, wird 1 von Reght€r hs subrrahiert.Die Subtraktion crfordert genaudann ein ,,Borgen",wenn hs den Wcrt 00 hat. Genaü dau {ird slso das Ubertrassbit scscizt und vom Shifibelehlin Zeile 39 von links in r22 hineiryesclioben.Mit anderenWorten: In Zejlc 39 wird scnau dann ejne r loh liDks h 12, hinciDscschobcn. wenn €G) = 00 ünd dahlt Fs(o) - 0 silt. Dicser Vorsans wiederholtsich in dcn Zcilcn lr-ll für b: In Zeile ll sird win €(b) - 00 und dsnil F5(tr) = 0 senau dann eine r von link iD r22 hiDeilrseschoben, cxr. Der Inhalt * von Reghtel r22 bcachrcibl Du iD biiüier Veschliisseluügdic vorlicecndc K o m b i n s r . i oaDu 6[ ' r ( o ) = 0 o d e rr r ( o ) 1 0 , r s ( b ) : 0 o d e r F d ( 6 )1 0 , s ( o ) € { o r ] } n n d 3(b) € {o, r}. EnlhäLtr,, z.B. ooooroor, so bcdcnte( das von rechtsrach Linksselesenrols e n d e ss: ß ) - r , e ( d ) = o , F s ( 6 )= 0 u r d F r ( d ) 1 0 . Jeder Kolnbin€tion ist ciü Abscli ii,l des Urlrerlnosramhs zLrseordnct.Dic Tabclb nr den ZeileDI l, enihäli die Adressena^ dicsc! ^bschüille uud zwsr h der Reihenfolsc,dic dcr Bcdculung d$ Biinustes in r22 entspricht.Um älso den Fäll abzuhanddn,der deh Bitmusicr ooooroor und /r = I ertspricht) isi cinfachdic zugehörigeAd.essea, h der'laabelle anzusprinscn,olso dic zehnleAdrcBseder ]'abellc. Da.sAwlcscn de! ^drdsc dus der Thbelle wird in den Zcilcn 19-50 lcalisiert,rr der Spruns erfolsi i\ zcilc ,r1. In den meistcD!öllcn isi, ge. keitr V€rsleichnijiis. Gilt z.ll. rs(o) 10, rr(b) 10, 3(d): I und s(b) = o, d.h. sind s und b vo Null velschiden und isi d ncsativ uud b posiiiiv,so giLt naiürlich Fs(o) < Fs(b). Eir cchicr Vergleichict üu! in den Fällen nötis, in dcncn bcidc Zahlcn von Null velschiedensind und slcichcsVorzeichenhaben. Dcm Fall, dassbeidevon Null velsjhiedentrnd positiv snrd,ist der Urrterpm$annäbschnift in den Zeilen52-57 ,uscordne!.Dort werdenExponenturd ManNisscjewcils vo d u d b äls eiDe24-Bit-Zahlaufgefassiund nls solcheve!gln:he!.Dazu m!6s natürlich das obereByte de! 24-Bit-Zahlenaus dem Dxponenicnjdas InilUereByte {us d€m oberenByte dcr Maniisscurd daa uni.ereByte au dem unterenBytc do MDnilssebesieltetr,dätrit der Vergleichkorrcktc RcsuliAielielert." Die parallel fiir beideZahlcn vorgerloürneueu LiDksrhiftsi^ Zeile 28 $d in Zcile rl sowiedie beiden Dek.ementierunecnin Zeile 38 vt\.1zeile 10 äode!! Dichtsan den Größcnvcrhültnbsen zwiscLeübeiden ZahLen.Darauf wurdc bczüglicLder Shifts schon $eiter obeDeingesangcn. ^uf welcheWeisedje SiatutsbiiB eescizi wcrdcn,wurde schor bein Urteryrogramm FkaTst erläutcrt, Sind beide Zähle! vo! Null verscliicdcnund negaiiv,so komrnt das richtiee Erscbnisliefau6, wenn ni.lit 4 n,it b, sonder! 6 mii d vcrglichenwird, was jn den ZeileD62 67 durchscführt Tn allcn anderenFdllen, in denenrlso mindesteiseinc Zahl Null ist oder die Z Llenversdie deneVorzeichenhaben,ergibt sich dß Vergleichsersebnis sdz ohne Rechnüng. Einise Unte.prosrammabscliniii€kömen Dießt für mehrereFälle iun, das Unteryroeramü lässi slch also no.h kürzen. tLDis€r Vorcans Nid auslühdjcL in [Mss],\hdcl,nitt 2.6.2 erläut€|t. r2De. Cebrauchder B€lehl€.r und cp. wird in ll\,I6slAbschniit 2.4,2 vors€stellt.
314
10.6. Umwa
IDng vom Bintu- in das Dezima.lqstem
10.6. Umwandlungvom Binär- in das Dezimalsystem In dies€mAbschnitt soll zu einer gegebenenZahl r={.2-
mir
1
t 0, so wird geprüIt,ob d binär normälisiertist, ob also ; < d < 1 silt. Ist d normalisiert,so vid emeut dürch 10 dividiert und dann mit Linksshiftsfortsefahren.Ist d dagegennicht normalisiert, so wird noch einmal nach links eeshiftet, also r = (2'z€\0-r)2^-'z10r= d2^-1101 gcbildei.Ist darin rn 2 : 0, so ist $'iederdie ge$'ünschte Form gefunden.Ist allg€mein
r = di2n,ro\ m
(10.3)
; O MulliDlizicrcnnii m.I
ck tdi ldl ldi 44 Fkaz1o: rcall l,t inc 46 lsr 47 ,t1 .12 .13
18 19 60 51 52 53 t,l 55
58 59 61 62 FkaZT2l 63 6,1
68
318
12 r2l,OxCC r20,oxCC r19,oxCD Fka3x3 116 r15
ro! for lsr
!13 rL2 r15
ror tot lsr
r13 rr2 r15
ror ror
r13 r12
1 r
S+ rrr:rnrsrr:* *r 1 1 1 1 1
r12 t2 13
breq
Fkazl4
! 1 r : 1 4 r 1 s L+ i !
I I I I 1 t l
r 1sl tol rol
- 0,CCCCCD t 1og rzr;rorrs
I I
1 1 I I 1 1
- 6 rers:r r+2r
1/2 Fall8n:0, di€ (" berechnen 1 r binäf, normalisiert?
10.6. Umwandlung vom Bintu
brpl rjnp
d9 7d
FkaZ12 Fkä210
in das DezirDalsysten
1/2 Nenr:u weiier redüzierer 2 Ja: erneut mit rf niultipliziercn
Berechnüns der Koefizi€nlen (" der Dezhalcrtwickluns
'ri Fkazt4, ldi 117,6 12 FkaZtS. ldi 119,10 't3 clr r2O Fkazl6r mul r2,r19 Z 7J ßov\.r r13:r12,r1:r0 76 xdul r4,r19
1 1 1 2 1 2
77 7' 7e a, 3l 82 83 8l 85 EO 67
I 2 1 1 1 2 1 r*f 1 1 rl2 2
mo!ü üul add adc adc stl movlr nov dac brne rjnp Du lEll
t15: !14,11: !0 r:3,r19 r13,r0 r14, 11 r15,r20 Z+,t75 r3tt2,r73trl2 r4,r14 rt7 FkaZ16 Fkazo4
< 0: Nlntidiziffh
dec
105
ror tot inc breq tst brne rjnp FkaZ24: tst
116 x15 x4 13 f2 r17 FkaZ24 r15 FkaZ22 Fkaz2o x15
tfl
n,il r0
FkaZlSr ldi 119,10 clr 12 clr r20 Fkaz2o;mul r2,r19 mow r13:!12,!1:r0 mul r4,r19 mov\r r15:r14,r1: r0 Lt mul r3,r19 add r13,r0 adc r14,r1 98 adc r15,r20 99 nov r4,r14 novw 13:12,r13:'12 102 F k a z 2 2 : 1 6 r 103 ror
r-10t
1 1 I 2 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 L/2 1 r/2 2 I
l0üo l0u2 l0r
r€10r
t*t
rrallsD : 0, die (" berechnen f 0 erbfrchrc. Bei ;< U @rden jcdoch in den Zeilen 'U 76 eiayotze:chen ausseeeben und n Desierr.Dic ZellesuDs von n in dic Eine! und Zehner$folst nsch der iü [Mss]Abschnift3.2 bqrchrjebeneD Mcthode. Die Zehnerrcrdcn dabei il !1s und die Ejner in r1s ePeucr. Isr n > 10, so wird aus dcn Zehna.n€ineÄSCII-Zifler gerLeht und ousg€seben(Zeilcn 89 90), die Eincr welden in den folscndc beidenZeilen in €ine ASCII-Zifier velwan(lelrund ousg€s€ber. Schließlichwird ab Zeile 93 dos Länsenbyicwie schonim Untcrprcs.amm Fko€z belechner Ein all8emcincres Unterprogramm zur Formaticrung jst nicht schwer zu scllrcibcn. erlbrdert ebcl viel Aufmerksamkcit für Detsils. Eine gut€ Mögtichkeii ist, Untcrprogramm Fkal{rit€ schrittweise zu verbessern.Einc erste Verbesscrungwäre etwo, die Anzahl der signiffkanten Dezimolzifiern vorzugcbon und ab Psrä,.noterzu übergebcn. Dicse Anderung wöro sehr leicht durchzuführen. Es mus6 noch das in FkaDez ver$'cndete Unterprogrdmm Fka3x3 zur Multiplikation zweicx2{-Bit-Zahler u, = zz216*ür23 +zo und t' = t'z2ro+or23 +oo erlü.rrtcrtwerclen. Da"sProdukt ist leicht nüszurechnen,cs crgibt 6ich zu
Abbildung10.5.rDurchtührung dcr 24 x 24-Bit-Muttiptikation
rLL:Laba+ (urlo + uour)2s+ (zzt'o+ arq + uo"J2)216 + (u21)r+ u tj2)221 + u2u2232
327
10. Die Implementienjtng eiaet AvB-freundlichen Fließkomma,atithmetik weden können. Die seciB Bild 10.5 eibt an, wie die Teilprodukte zusa.mmengesetzt ürür. .rr11 und touo direkr btu Produktblaespb bis po könnenmit den TFilprodukten werden Ubcrträge.diFbei serzte€rdcn,dic übrigenThilprodulle miissFnhinzuaddicrt ganz werden. na.ch lome weiteqegeben den Additionen entstehen, müssennatürlich Die beiden Multiplikanden weden in den Registern r4:B:2 und r21:2or1oübergeben, DasUnterprozusammengesetzt. dasProdukt wid auf32 Bit€ gerundetin rr6:xa:rB:12 gramm verwendetdie Register ro, 11 und rxx bis 116 Zu beachtenist, dassdasRunden zr einem Überlauf führen känn. in diesem Fall ist nech dem Auftuf das UbertragBbit
r19,r2 r FkaSx3r nu] nov r11,r1 2 nu1 r20, 13 3 eovlr r13: r12,r1: !0 '1 t0u1 r21,r4 5 tdol.rr r15:r14,r1:r0 6 nul 120,!2 7 add r11,r0 8 adc rl2,r7 I dr r0 1a adc r1g,r0 tI adc r14,r0 19 adc r15,r0 13 nu1 r19,r3 1l add 111,!0 r5 adc r12,r1 It cLt r0 17 adc !13,!0 18 adc r14,r0 19 116,10 adc ,, r27'r2 ßlI r12,r0 add 99 r13,r1 adc 29 r0 clr 24 ad. r74,tA 25 adc r15,r0 26 n:JI fl9,t4 27 add fL2,ro 28 adc r13,r1 99 r0 c1r 9' adc r14,ro 3l adc r15,r0 99
2 1 2 1 2 1 2 1 1 1 1 1 1 2 1 I 1 1 1 1 2 1 1 1 I 7 2 1 1 1 1 1
3,ü121,!32u2t1
,l 35
328
add adc
r13,r0 r14,r1
1 1
uaro urul u21)2 u\ra
uol)I
ü2aa
uor2
10.7. Beispiel I: Bercchnung einet Dürchflßsmenge
37 38 39 10 11 .!2 43
.t4 ,16 ,17 18
ctr adc nut add
r0 r15,r0 r20,r4 !13,10
c1r adc
r0 r15,r0
adc adc adc adc
r12, r0 r13, r0 r14,r0 r15, r0
I
t 2 t I 1 1
Rundeheuf 32 Bit 1 1 1
Der Durchführung der Multiplikation isi leicht zu folgen, so &ds nu! ds Runden eirer Erlöutelung bedart Es nuss &ufg€rundet werden, wenn pl > 80 silt, in welchem Fall eine r zu den oberenvi€! Bytes ,u &ddi6renist. Nun gili aber ?r > 80 genaudann, wenn Bit 7 von pl ge€atztist. Wird dies€sBit durch den Shift-Befehlin Zaile l3 jn das Uberirassbit kopieü,so ersibt sjchbeipr > g0 sera.de die zun Rundenbenötiste1, die mit dem adc-Befehl addi.n werdenk$n, and.rnfslls wird 0 addiert.
10.7.Beispiell: Berechnung einerDurchflussmenge Die durch eine Ohohrleitungmit dem Radiusr pro Minute {iießendeOlmengeO ist gegebendurch
o 2v= I
|.. u \ xP a x '
dobeiist u(c) die Strömunssseschwindiskeit desÖls im Abstand, von der Rohrarchsc in
[email protected] einemRohr mit dem RÄdiusr = 40cm wurd€n für die Strömungsgcschwindigkcit die in Tbbelle 10.1 angegebenen Werte gemessenra. Zu berechnenist die iü einer Minute durch das Rohr fließendeOlmenge. Es seiar4enommeD, dassein ATmega128die neun Me$werteperiodischetwa üb€r die serielle Schnittst€lle einliest, die DurchflussüeDgebercchnet und anzeigl. Einlesen und Ausgabe inieregsierenhier jedoch nicht, deshalb bGteht Erstere aus einem Kopieren der Tabelle aus dem Programrn- in den Arbeitsspeicher, Letzteres nur aus dem Aufruf von Fkal,lrlt€. Das Integrälwird mit der bekanntentapezsumme berechnet.rsDiesehat fü das Intesral zür Berechnuns der Durchflussmensedie folsende Gestaltl
]{Di*s Beispjelstmmt ans lAutkl BEISPIEL 6.3. lssieh€ düu etwa [stoel.
329
10. Die Implementierung einex AEt-freundlicicn
Fiießkommaaithmetik
Täbell€10.1.:Messwerteder Strömungsgeschwindigkeit
,
r"kmt ü,(0,)t#l
00120 1582 21058 31544 42032 52523 630 735 840
18 14 12
Die Umsetzung in ein Programm bietet keino Schwierigkeiten. Vorgestellt wird ein lauftähigesHauptprogramm, das sich allerdings die Daten sus dem Programmspeicher holt und nach der Berechnung in €incr Endlosschleifeverbleibt, Es ist also eigentlich dafür gedacht,im Simulator abzulaufen,um die Unterprogramme desModuls in Aktion zu studieren, r 2 J I , 6
.lnclud€ . includ€ .d6vice .os€g .org , include
"n128def,inc" "nakros. avl" ATn€9a128
8 f 10 11 12 1, rl
.includ€ .ioclude .inclüd€ .lnclud€ .lnclud€ .lnclud€ .dseg
I'fkaadd.avr" Dfkälrul.avr"
0x100
"fkavgt, avl" "v€cn128,avr"
Dio Deklaraiion de! ve.werdeten Vadabter
15 16 17 18 19 9, 21
rI: r'v't rTt vblll: \cTt wstack: Bc(hnci
.byte ,byte .byte .byte .byte .byte .caeg r.u(.").
3 3 3 9 72 2 ,"
99 l\l!a]l,l: pushs ,J 1di
330
in 11€, D(.")
in rr?, Adrese des Prodükiß in x
116,r2a,r29,r30,r31 10 r28,L0lt(rx) | tx + b
10.7. Beispiel I: Bercchnutrg einer Durch.fiu3smenge
24 25 26 27 28 29 3T 32 ,9 31
tdl
ldi
rdi CAII 1dt tdl caIl
poPs
!2g,HIGE(rx)
1
Fkaxo8
4+
116,117 r28,L0!l(rll) |29,HICH(rW) Fkal(o8 r30,L0w(rx) r31,HIGIi(rX) FkaMul r31 , r30, r29 , r28, t16
| '\ + u\ru) 1 1 4+ 1 x[0]e!xx't 1 4+ 10 4
Dio Be.€chnuq de. Tltpesumme
95 Trap€zr ldi ldi 36 ldl 37 ldl 38 ldl 99 Id 4a nov$ ,1r aov 12 ldi le ld.i 11 lcall l,t td1 16 rdr 47 ldl ls caII 19 add Trpzo2: ä, nov 51 nor/'w 5e Id ,9 nowt 5/ ldi 55 ldl 56 rcal1 57 ldi 58 ldi ,9 cpi 6a brn€ 61 ldi 62 call 69 6J Tr?204: ldi ldi di ldi 66 \di 6'/
!18,0 119,5 120,8 r28, tol, (vbl'l) !29,HIGH(vbl,l) r17,Y+ tg tt2,r29 tr23 116,!18 r26'L0 (rT) flT,HICH(IT) Xl1all,{ 116,-1 r28, Lol'l(rT) !2g,HIGH(!T) Fkaska r18,r19 116,!18 r29tt28,t3tr2 r17,Y+ r.3tt2,t29tt28 r26,L0$(rw) !27,EIGH(!l'l) I\DalW r28,L0ll(rl'I) r29,ltTGH(rW) t20,L TrPzO4 116,-1 Fkaska r30,L0W(rT) r31,HI0lt(rT) I26,L0W('T) r27,ItTGH(rT)
I 1 1 I , 1
rß+h=at-Eo rro F (Anzahl d€r r,) - 1 Y -, (t,(oo)) ! 1 " F u ( o o ) ,Y F , a ( u ( ' 1 ) ) rs., +,4(u(a1))
1 1
3+ 1 1 I
rr e,o@(oo)2-1
I
tta *
I 2 1 I
tn F w('") , rs'2 * .a@@,+))
av = iv-L+
n
x ts r'4(!$)
I
1
Y € /(rv)
1 Der letzte Sunnand? I 1/2 Neilr keine Divbion durch 2 I
1
z +.4lrI)
I
1
x ts.4(rr)
1
331
10. Die Implementie ng eiüet .AvRJrcu'dlichen Fließkommaarithnetik
1di ldi
Fka-Add r20 Trpzo2 r28,LoW(rx.) r29,HTGH(rX)
catl 1dl Idi ldi 1di call
116,x19 FkaKo8 r30,L0U(rT) r31,HIGH(rT) r26,L0l,l(rT) r27,HIGH(rT) FkaMul
calL '/0 71 'tp 79
u 76 76 78 't9
I
t/2 I Y e Ä(rx) I
L I 1
z + "4(t't) X ts
80 Die al8iddtch iE Progrdmnspcicl'er
,db .db
82 89
L20,82,54,44 32,23,74,14 12,O
Dor EiNpn,ng ii du Prosredm, Aülbuu dd stdpcls
8l 86
starr:
ldi ldi
r 16, Loi,t(MMEND ) SPL,116 I16 , HICI{(RA}'IEND ) SPH, r16
I I I
Dic vorbc,ci!ung lur t€l crbchondl,'ng
88 89 9A
rdl
92 99
in
tdi
in 95
116,Lolll(Fehl€r) pfFkärh1,r16 r 16, HICH(F€hler) PfFkaFhl+1,r16 r16,SPL wstack,rl6 r16,SPH wstack+1,r16
(opioron der Tbsidddn vom Plo8rmn_
ldt 9d ldl 97 ldi 98 ldi 99 ldi 100 rrl (opie!6:]Pm
101
blne
1 2 1 2 1 2 1 2
ln den Arboit6sDelche!
r30 , Lov( 2*vbRon) r31,HIGH(2*vbBon) r28,L0l,J(vbW) r29,HIGH(vbw) 116,9 r0,z+ Y+,ro 116 Kopiere
1 1 1 1 1 3 2 1 r/2
Die Be.eclnüns dcr Trapezsunmc und ii,re Dezinalausgabe
rcall
rdi 101
332
Ldl
Trapez r28,L0i,J(xT) r29,HTGH(rT)
3+ 1 1
"4(!r)
1A.7. Bekpiel I: BercchnunBeiDerDurc}flüssmerge 1A8 1A9 tta tt1 Evigt
ldi ldl call rjnp
r3o,Lo!1(vcT) r31,HIGH(vcT) Fkawrit€ Enig
1 1 4+
Die Bchandlung von Fchlem
rl9 Febler: Ids 113 cti 1lt
1ds
rl6,wstack
2 1
SPL,r16 rl6,rstack+1 SPH,r16
1 2 1 I
118 Snooz€r rjnp Die Fehlerbehandlung wird direkt von Abschritt 10.1übernommen. Dazugehörendie Wortvsriablein Zeile2rj die Zeilen88-95 zur Vorbereitungwd die Zei)en112-118 ztt\rtatsü,chlichen Ub€mahmebei Auftreten einesFehlers.So wie die Dinse Li€sen,dürfte es eiserilich kejnen Fehlerseben. Denn bei Einssnssdaten0 < u" < 255 isi wede! Exponentenu{iellaufaoch Exponentenüberlouf möglichund da nicht dividiert wi!d, kann auch nicht durch Null getaili wcrdcn.Flemdeinfiussisl allenfolisdurch Intcrrupts möslich.Einc ciulAchc,abcr brauchbarc Reaktionauf Fehlerwtlle hier, das Aussabenediun (2.8. ein LoD-Displsy) zu löschenund zu warten. auf die Ankunft des niüchien Datens&tzes Der Tesidatemaizist in den Zeilen 8.1 83 zu finden,er wild in den Zeilen 96 1rl vom Programmspeicher in den Bytevektorvbri in Zeile 18 im Arbeit$peiche! kopie.t. Unterprogramm T!äp€z b€r€clmei die Trapazsumme in der Fließkonmavariablen rT in Zeile JZ Zu! Ber€chnungder Produkie o,t (e,) veMendot es das U ierprogrammXEaxl nI Zeile 99. Dieseserwartet c, in R€sisier116 und u(ry) in 1171das Produkl soll in einer Fließkommav0dableabsespeicheri werden,derenAdresgein ResisterX überscbenwerdenn$6. Seine tr\nktion ist simpel. Es erz€ustaus 116zunächstdie Fließkommaväriable !x (Ze:le 23 9,5), dann a$ 11? die Fließkommavariable lll (Z€i]€n,6 29), die daDn mite dde. multipliziert werden(Zeilen 3r-321. Unt€rprcgrammTrap€z verwendeirls fi.irdie r/ und 11?fi.irdie 1,(c,). Das jsirfür die u(c") ganz natürlich) abcr walun auch für die c,? Warum wild also für dic r, keinc Flicßkonmavariablebenutzi? Geschithedas, Bo ffele zwer di€ Umwddlung einer 8-Bii'Zahl in €ine Fließkommazahl wes, 3iattd€$en mftste aber eine Fließkommaa.ddition veMendet w€rden, um dje o" fortzuchalten, und eine Fljeßkonmdddiiion ist ebeDrchr viel langsamer&b die Zählenumwandlune. Es ist auch ei8entlich ur die Beachtuns der Gruüdresel zur Opiiroierung, ntlnlich &Bit-Zall€n und 8-BiFAril.hmeiik so langezu verweaden,wie es irgend geht. In Zeile 35 wild rls mit dem Anlängswert ,o geladeDj in der folgenden Zeilc ho mit dem Abstand Ä = r"+1 - r, do a?) dann r2o mii d€r um EiN vcrmindcltcn AnzahLder ,,. Der Fat des Unterprogramms veNendct dic r" direkt nichi mchr, cveniucllc Anderungen, wclche die., beirefi€n,brauchendemnachnur in den Zeilen 35 37 vorsenommenzu we.den. In deD Zeilen 31 10 wi\d r! nii @(oo) seladen.Doppelreslster.3.2 dient zur Zwis.henspeicherunsder Adressevon u(r!), es enthält also nach Zeile ll die Adressevon D(,,). Anschließendwird h6 mit oo geladen, und da vor dem Auftuf von xnarU in Zeile l5 Registel X mü der Adrcsse von !r seladen wird, berechnet ,!a1{ das Produkt .ou(ro) in !r. Die Zeilen16 19 bilden dann.ou(,o)2 L, wie von der tapezrormei sefordert. Mit der Zeile 5, besinnt die Scdleife,mii der ,tie r"ü(r,), / € {r,...,7}, abei aüch r8D(ra)2 t bere.hnet werden.In ihr wtd durch Addition von ä zu c"-1
333
10. Die Implamentictlüg
einet AVR freundlichen Fließkonmaäritlmetik
übergegang€n. Zur Voibereitrng de. Produktbilduns wird in Zeile 5l ResiBter116 mit ," anschließcnd in dea Zeien 52 5,1Resister11? nit @(r"). Da vor dem Auftuf von seladen, xna1uRegisterX mit der Adressevon !! geladenwid, bercchnetxnallt dasProdüki r,ü(r, in xt. Fü. / : 8 musedas Produkt noch durch Zwei dividieri rerden. Dazu witd l^ Ze:ie 60 allerdings ünabhängig von der Anzahl der 3" sctetet, ob der Schleifenzähler seinen letztetr W€rt I hai. I6i da der Fdll, wüd dEsProduki in den Zeilen d9 63 nachrcchts geshifiet,dic Adre$e von !v wurd€ schon h den Z€ilen 58 59 tu Register Y gela.den.h den Zeilcn 61 68 wi.d dann d6 Produkt zur bisherigentapezsunme in !T hinzüaddiert. E, bleibt noch, die berechneteSummemii i zu multiplizieren.Dazr wird ä in den Zeilen 71 7l in eine Fließkommeahl lmgewandclt, mit der in den Zeiler 75 79 di€ SunDe DuliiIm Hauptprogrammwird Bchließlich in den Zeilen116-ll,
die l'.apezsrlmmeals Dczinalzahl
Das Prograrnm erzeugt die Zeichenkette ,,0,20675€5", die Einhciicn si l #. Mctern umgerechneteDrgebnis ist danü ;"
Dos in
f -r'l
/ u ( r ) " . d " -. 0 , 0 2 0 6 7 5 + 1 . J t D d xI 10.8. Beispiel ll: Sortieren von Fließkommazahlen Es sollenn zweiöittel genaueFließkommozahlcn ro,.. . , rn-r der Grötjenäch sortiert werden.Dabeisoll ?, einerecht kleineZahl sein.Do.eZicl die$esAbschnittesi6t nicht, den b$ten aller Sortieralgorithmenzu präscntiocn und zu implcmenticren,sondern die Vergleichsprozedur Fkavgl zu testen.D0"ekann mit einem Sortierprogra.mm, bei dem Vergleicheeine gro߀Rolle spielen,sehr gut durchgcfiihrtwcrdcn.Ncbcnbciist noch zu sehen,wie aüs einemC-Programmein gutesAssenrblerprogramn wird. Das cinlachstcallcl Sortien€d:lhreni6t bubblesorti,das kurz gesagtdsrin bestcht, so laqc durch dic zu soriicrenden Elemente hindurchzulaufen und nicht in der Sortierrcihenfolgcncbcnoina.ndorlicgcnden Elementeauszutauschen, bis bei eidemDurchlauf keiD Austäuschmehr nötig wor. Do bcim erstenDurchgangda6 größt€Eleü€nt an den l€tzten Platz dcr Fol8eBcbrochtwid, sind beim nächslenDurchgangnur noch die erstenn - 1 Dlemettezu bcsuchonusw. Ein Unterprogramm,dasdiesesVerlahren realisiert,lässbsichrelativ einfachaulbaucn.Um auchein schnelles Unterprogrammzu erhalten sind allerdings einig€ Reg€lnzu beachten.E$tcns daüf der Zugrifl aul die Vektorelementenicht überIndizesseschehen, d.h. die Adressendcl Elementesind dirckt zu manipuliercn.Zweitenswird die Anzal n der Eleme ta auf ma"'.imal255bcsc.hränkt, dämit für die Schleifenzähler8-Bit-Arithmetik veMandeli wcrdcn kann. Und drittens sollendie Schleifenzähler abwärtszäh]en,nicht aufwärts,vic cs in den Algorithmen oft gesc.hieht.Das ist leicht möglich, da die Scl ei{enzähler nicht als Irdizcs vcnvcndct wcrden sollen.Und noch eine vierte Regel:Das Rechn€nmit Adressan(pointor anthrnetic)ist als 16 Bit Arithmetik so weit wie eben möglichzu begrenzen.Spötter könnten hier behäupten, dassbei Einhaltung dieser Regeln überhaupt kein Prcgramm mehr zustande sebracht werden könne. Däs ist jedoch eanz und sar nicht der Fall, die Regelnerzwingennur ein echtesAssemblerpro$amm,d.h. ein Programm,das am
334
10.8. Belspiel II: Sottiercn wn Fließkommazahlen Befehlssatzünd den Adressierüngsäiten des Proze'qsorsausgerichtet ist, wie etwa das folsende. EinVektorro,...,t"
Prczedur FkaBub wird laah Größeautl r von n zweidritielgenaucnFljeSkomnlvahlen
Input ro 11?:16 Die Adre$e p des elsi€n Vektorelemenies Die Anzahl n der Vektorelemente Es gibt kejne Fehlerbcdingung. 7 FkaBubI cpi 2 brlo , Fka3ubI push4 pu3h5 , rdov 5 6decr2r 7 FkaBo2: clr mov 8 nowr 9 10 FkaBo4: novw 11 adis r, call br8€ 13 ori 11 Id. t5 ld ./6 st 17 st r8 19 tdd ldd 20 97 std 6td 22 ldd 9, ldd ,-l std 2F st:d 26 9 7 F k ä 3 0 6 :d € c brne 9s tstt 2s 3, breq dec 31 brDe .99 3 3 F k ä B O A :p o p 5 pop4 31 .?, FkaB1o: ret
118,2 FkaB1o r28,r29,r30,!31 r2,r3,r4,r5,r19 r2'rfa
I 2 < 1? 1/2 Fallsja, zurück I 10 1 12 e k = tl- 1
r19 ,3,t2 t29tt2A't77.r76 r31:r30,r29rr28 r29rr28,3 Fkav8l FkaB06 119,1 r4'Y rS,Z Y,r5 z,tA r4,Y+1 t6,Z+f Y+1,r5 z+1,t4 r4,\+2 15 'Z+2 Y+2!r5 z+2,t4 13 FkaBo4 x19 FkaBo8 t2 Fka!02 r19,r5,r4,r3,r2 r31,!30,r29,r28
1 L 1 | 2 4+ 1/2 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1/2 1 1/2 1 1/2 lc I 4
e 0 Austauschindikal,or i*h Y F,{('b) Z +,^\rh ) Y Fr'4(?rJ-,+r) r^ r+1 > tr-r? Fallsja; kcjn Austa$ch Austauschindikator+ 1 AusiauschuDteresByi€
A!3ta$ch
ritijlercsByte
Autiausch ober6 BYte
te?-l Forifahrcn bej i > 0 Wu e ausgetduscht? Falls nicht züück I k+k Fortfahrcn bei Ä.> 0
335
10. Die Inplementierüne
einet.4vBJrcundüchen
Fließkommaarithmetik
Die Extremfällen = 0 und n: 1 werdenin den eNten beiden Zeilenabgefdsen. Die jnnere Schleife durchläufi die Elemenie ro bis r,., dabei ist Ä der Zähler der äußeren Scl eife, der im erstenDurchlaufbei n - 1 beginni. Der Zählerd der innerenSchlejfebeginnt bei &. Regist€r12 wird für A benut?t, es wird in den Zeilen 5 6 mit dem Anfangswertd 1 geladen. Register he zeigt nach einen Durchlauf der inneren Schleife an, ob Austaüschüngen stattgetunden haben, €s wjrd gleich aü Anfang der äuScren Schleif€ in Zeile 7 mii 0 iniiialisjert. A$chließend wild B€gisierrs, das ftr i v€rwndet wird, mit Ä initialisiert. Schließlich wird vor dem Eintritt in die innere Schleife noch Reglsier Y mit der Adresse von ro geladen. Beid Betreten der inneren Schleife iD Zeile 10 enthülf R€g]ster Y die Adrese von rr t (also von to ih ersten Durcngang).Nach den Zeilen 10 ll enthält also Z di€ Adresse$n rr-, und Y die Adrsse von rr-,+,. Ein Austauechmnss erfolgen,wenDrr I > rr t+r gilt, der Au,taNch in den Zejlen .ll 96 nu$ also übersprunsenwerdenbei.i,t < r,,-r+1. DieseBediDgung kann jcdoch von Flavgl nicht geiestet werdenj es sind ftir zwei Fließkommazahlcn t und t' nür Testsauf r < r' oder r > r' nöglich. Folglichist nicht zu tesienjob rr-r < "b-i+r, sondernob r,r-i+l > r,,-i silt, und cbcn das g$chieht in Zeile .19,weil Y die Adrerse von r^ i+1 urd Z die voD rr-i enthd.lt-Bci /^-!+r > wird folslich ab Zeile Jl aussetauscht. "r,-i wird, um mind$t€m eh Austauschen D€r A$taNch beginnt dmit, dsss!1e mit 1 geladcn anzuzeigen.Der eigenilicheAustausche olgt dann Bytc filr Byl,e, auf dies€W€isewerden nur zwei RegiBtcrgobrauchi,statl drei bei einem Au$is.lNcheii öioc. Nach den Verlassender jnnorcn Schlcifewild in Zeile 29 sep!üfi, ob überhaupt ein AusIrusch strttgefunden hat. I$t ds-sder Fali, ist dcr Vekto! sorlielt und da$ Unterprogramni kann verla$en werden. Noch cin Hinw€is zur Bezeichnung.Im Unterprogrsmm wird nicht zwischen cincl zwei drittcl genaucn Flicßkommaza.hlri und ihrem Wert rr = F (ri) unterschicdcn, ondcrnfalls hättc die Lcsborkeit der Erläuterung doch sehr Belitten.
336
11. Zufallszahlen 11.1. Ein additiverZufallszahlengenerator Da im Du' h pin CFnFralor für Zutalt/ahhn bFnurzrwirJ, mussF:nsol.I.r 'orgesu.llr verd€n. Die Wahl isi auf den Genemtorr h=Q:.
i+r^:r)mod216
n)31
S t ä r t u ' € do€0 . . . o 3 0
(11.1)
scfallcnünd zwar hauptsächlichdeshalb,weil an ihm sehr eut die Prosrammieruns cines tungpüfier6 demonstriert werder kann. Es sind a.lso31 Anfangswerte ro bis r3o gegebcn,dic nächstcn Wcrtc sind dann r31 = (rrc + co) mod 216 ca2 = (r25 + 11) mod 210 :
Nachder Berechnungvon cal wird co nicht mehrbenötigt,ebensoih nachder Berechnungvon r32, ucw.Dasbedeutet,dassman mit einemVektor der l,änge31 auskommt, wen dic lndizcsmodulo 31 bcrechneiw€rden: 16 + (x2a+ q) mo1 u , 4 8=)r - i ' ( r '