Examensarbete för magisterexamen 160p i datateknik

Storlek: px
Starta visningen från sidan:

Download "Examensarbete för magisterexamen 160p i datateknik"

Transkript

1 Examensarbete för magisterexamen 160p i datateknik MULTITASKING II UTÖKNING AV ROBOTSPRÅKET RAPID Utfört av: Handledare: Robert Kostelac, rkc99001@student.mdh.se Christer Norström, Mälardalens högskola, Västerås Ingemar Reyer, ABB Robotics AB, Västerås

2 Datum och ort: Västerås, Sammanfattning ABB Robotics AB tillverkar industrirobotar och är ett av de världsledande företagen inom området. Robotarna programmeras i robotspråket rapid som utvecklats av ABB Robotics. Denna rapport beskriver en undersökning av multitasking i rapid. I rapid finns det möjlighet att skapa task, tilldela dessa task olika prioriteter och en Round-Robin schemaläggare används. Dock saknas det funktionalitet för synkronisering- och kommunikation mellan olika task. Huvuduppgiften med detta examensarbete har varit att implementera instruktioner i rapid för just synkronisering och kommunikation. Denna rapport beskriver ABB Robotics mjukvara och robotspråket rapid utförligt och ett relaterat område; multitasking. Detta teoretiska område ligger som grund för de idéer och tankar som ledde fram till de nya instruktionernas syntax och funktionalitet. De avslutande kapitlen som handlar om implementation och förslag på förbättringar av multitasking-systemet. Robert Kostelac 2

3 2 Innehållsförteckning 1 Sammanfattning Innehållsförteckning Inledning Relaterat område Multitasking Schemaläggning Synkronisering Kommunikation Felsituationer Problembeskrivning Robot Systemet Översikt av systemet Interaktiva Enheter Teach pendant Cabinet Configuration Program server Process Interpolator Servo Segment Target EIO Kommunikation mellan klasserna Rapid Syntax Strukturen på Rapid Några vanliga instruktioner Multitasking i Rapid Program Server (PGM) Interpretator Kompilator Länkare Editor Viewport ReaL ReaL - Rapid ReaL-rutin C-funktion parametrar ReaL rutin C funktion returvärden Ny Rapid instruktion Shared database Inter Process Communication Asynkrona meddelanden Synkrona meddelanden Prenumerationer Robert Kostelac 3

4 6.7 Klassen PGMRUN Lösning Nya Rapid Instruktioner Semaforer Meddelandeköer Implementation Komplett multitasking design Task spawn Schemaläggare och prioriteter Meddelandeköer Slutsats Litteraturförteckning...50 BILAGOR A. Producent/konsument problemet i Rapid Robert Kostelac 4

5 3 Inledning Som redan nämnts så tillverkar ABB Robotics AB industrirobotar. Dessa robotar används främst inom bilindustrin. Några av ABB Robotics största kunder är BMW, GM och Opel. I dagsläget är konkurrensen mycket hård och det japanska företaget Fanuk har gått om ABB Robotics och är numera världsledande. Mjukvaran i ABB Robotics system är väldigt kraftfull med vilken det är möjligt att programmera snabba och precisa robotrörelser. Programmeringsspråket rapid är enkelt, flexibelt och samtidigt kraftfullt. Multitasking i rapid är ganska nytt och utvecklades omkring Troligtvis är ABB Robotics det enda företaget i världen som har implementerat multitasking i sitt robotspråk (mjukvaruavdelningen kunde ej bekräfta detta vid tidpunkten då examensarbetet utfördes). Det är förvånansvärt att inte fler företag implementerat multitasking eftersom det underlättar enormt vid programmeringen av industrirobotar. Det är vanligt att en robot placeras enligt löpande band principen i t.ex. bilfabriker. I ett sådant scenario är det passande att låta ett task (se nästa kapitel för noggrann förklaring av multitasking) övervaka t.ex. sensorer samtidigt som ett annat task utför robotens rörelser. ABB Robotics multitaskingsystem är inte helt färdigutvecklat. Det som återstår att lösa är synkronisering och kommunikation mellan task på ett bra sätt. Självklart finns det redan möjlighet till synkronisering och kommunikation mellan task, men detta kan endast göras genom utbyte av information i globala variabler (så kallade persistents i rapid) och pollning av dessa för att garantera ömsesidig uteslutning. Detta medför att synkronisering och kommunikation i praktiken blir begränsad eftersom programmen ökar enormt i komplexitet. Trots denna begränsning används multitasking av många av ABB Robotics stora kunder, bl.a. GM. GM har ofta flera robotar som samarbetar vid t.ex. montering av bilar. Robotarna måste synkroniseras och rapidprogrammen blir oerhört komplicerade och ibland inträffar till synes obegripliga fel. Dessa rapid program hamnar på ABB Robotics mjukvaruavdelning som får försöka lösa problemen. Detta är tidskrävande och kostsamt för båda parter. Det är därför av yttersta vikt att funktionaliteten i rapid utökas så att synkronisering och kommunikation mellan task klaras av på ett effektivt sätt. Huvuduppgiften med examensarbetet har varit att lösa biten med synkronisering och kommunikation mellan task genom att implementera semaforer och meddelandeköer. Dessutom skulle en helhetssyn för multitaskingsystemet presenteras. Robert Kostelac 5

6 4 Relaterat område I detta kapitel förklaras grunderna i multitasking. Detta område ligger som grund till kapitel 6 Systemet och kapitel 7 Lösning. Om läsaren är bekant med begrepp som schemaläggning, semaforer, meddelandesändning etc. kan detta kapitel hoppas över. Detta kapitel är tänkt som kompletterande material till multitaskingkursen som ges av ABB Robotics. 4.1 Multitasking I datavärlden kallas förmågan att kunna exekvera mer än ett task (program) samtidigt multitasking. I multitasking är en CPU involverad, men den hoppar mellan program så fort att det uppfattas som att alla program exekverar samtidigt (parallellt). Exempel 4.1 Antag fyra program A, B, C och D. CPU:n exekverar program A under ett kort tidsintervall, därefter exekveras program B ett kort tidsintervall osv. När program D har exekverat klart börjar CPU:n om igen med program A, osv. Se figuren nedan: Program D Program C Program B Program A Fig. 4.1 CPU:n exekverar programmen A, B, C och D under korta tidsintervall CPU:n hoppar mellan dessa program så fort att det uppfattas som om de exekveras parallellt, se figuren nedan: Program D Program C Program B Program A I praktiken innebär multitasking att flera program existerar i minnet samtidigt och exekveras parallellt. Flera nya begrepp introduceras med avseende på parallell programmering jämfört med sekventiell programmering; task (program, process), schemaläggning, synkronisering och kommunikation. Dessutom kan felsituationer som deadlock och svält uppstå. Begreppet task har redan förklarats och nedan följer en förklaring på de övriga Schemaläggning Fig. 4.2 Programmen A, B, C och D ser ut att exekvera parallellt. Robert Kostelac 6

7 På något sätt måste arbetet mellan olika task fördelas, detta görs av schemaläggaren. Målet är att alltid ha ett task (program) som exekverar för att på så sätt utnyttja CPU:n maximalt. Det finns många olika schemaläggningsalgoritmer, den som visades i exempel 4.1 är en Round-Robin (RR) schemaläggare. En RR schemaläggare hoppar mellan task och låter varje task exekvera under ett bestämt tidsintervall. Tidsintervallet (time quantum) är en tidsenhet som tilldelas varje task och ligger normalt mellan 10 och 100 ms. Prestandan på en RR schemaläggare beror huvudsakligen på tidsintervallet. Generellt sett skall tidsintervallet vara stort med avseende på tiden det tar att byta task (context switch) Synkronisering Exempel 4.2 Antag att en context switch tar 5 ms och att tidsintervallet definieras till 20ms. Det skulle innebära att 20% av all CPU-tid skulle gå förlorad. Exempel 4.3 Antag ett tidsintervall på 500 ms och samma context switch som i exemplet ovan. Den förlorade CPU-tiden skulle minskas till 1%. Nackdelen är att svarstiden skulle bli stor. T.ex. vid 10 task skulle svarstiden bli hela 5 sekunder. Eftersom olika task exekverar helt oberoende av varandra måste det finnas funktionalitet för att koordinera exekveringsordningen mellan dessa task. Ett lämpligt sätt att synkronisera task är att använda sig av semaforer. En semafor tillåter att olika task synkroniserar accesser till gemensamma resurser (en resurs kan vara en global variabel, skrivare etc.), oftast delat minne. En semafor är i stort sett bara en räknare på vilken de två atomära operationerna wait och signal kan göras. wait(sem) tar semaforen sem signal(sem) släpper semaforen sem Begreppet semafor kommer ifrån järnvägar [4], där system utvecklades för att förhindra att flera tåg använde samma järnvägsspår. Ett tåg som vill använda ett järnvägsspår, väntar på att semaforen som indikerar om ett tåg finns på spåret blir ledig. När semaforen blir ledig, kör tåget ut på spåret samtidigt som semaforen sätts till att indikera att spåret är upptaget. Ett annat tåg som närmar sig detta spår blir tvunget att vänta tills semaforen blir ledig. När det första tåget lämnar spåret, återställs semaforen och det andra tåget tar semaforen och kör in på spåret. Det finns två typer av semaforer, binära semaforer (kallas även mutex semaforer) och generella semaforer. binära semaforer kan anta värdet 0 eller 1 generella semaforer kan anta värdet 0 eller ett heltal större än 0. Exempel 4.4 Detta exempel är typiskt för hur binära semaforer används för att synkronisera två task runt en synkroneringspunkt i ett program. I det här fallet kan inte task Robert Kostelac 7

8 B passera punkt 2 i sitt program innan task A har släppt semaforen s. Först initieras en semafor s som tagen. TASK A TASK B Task B gör Task A gör 2. wait(s) 1. signal(s) och släpper sema- foren. När semaforen blir ledig kan Task B fortsätta exekvera förbi punkt 2. Fig. 4.3 Två task synkroniseras m.h.a. en binär semafor Exempel 4.5 Antag ett diskotek som kan innehålla upp till 200 människor samtidigt. Vid ingången står en vakt och räknar antalet människor som går in och antalet människor som går ut för att på så sätt se till att det aldrig finns mer än 200 personer inne i byggnaden samtidigt. När diskoteket är fullt blir de människor som vill in på diskoteket tvungna att köa för att bli insläppta. En generell semafor kan användas för att simulera ovanstående scenario. Semaforen s initieras till initialvärdet 200. En person som vill gå in på diskoteket gör wait(s) och om det finns plats blir personen insläppt. En person som lämnar diskoteket (t.ex. går ut och tar lite frisk luft) gör signal(s). På så vis garanteras att det aldrig finns mer än 200 personer inne på diskoteket samtidigt. Exempel 4.6 Producent/Konsument problemet är ett klassiskt problem när det gäller synkronisering [14]. Problemet löses naturligtvis enklast med meddelandesändning. I detta exempel visas dock en lösning där semaforer används. Problemet definieras enligt följande: En producent producerar meddelanden som läggs i en buffert En konsument hämtar meddelanden från samma buffert producent konsument Robert Kostelac 8

9 Fig. 4.4 producent/konsument En korrekt lösning följer dessa kriterier: Konsumenten måste vänta på meddelande när bufferten är tom. Producenten måste vänta på att skicka meddelande om bufferten är full. Producenten och konsumenten kan ej samtidigt manipulera bufferten, dvs. de måste vara ömsesidigt uteslutande. Följande semaforer behövs för att lösa problemet: full en generell semafor som håller reda på antalet meddelanden i bufferten, initieras till 0 empty en generell semafor som håller reda på hur många nya meddelanden får plats i bufferten, t.ex. 100 mutex en binär semafor som kontrollerar att bufferten ej används av både producenten och konsumenten samtidigt, initieras till 1 Pseudokod för lösningen: semafor full(0); semafor empty(100); semafor mutex(1); void producent() { wait(empty); wait(mutex); skicka_meddelande(); signal(mutex); signal(full); } void konsument() { wait(full); wait(mutex); hämta_meddelande(); signal(mutex); signal(empty); } // antal meddelanden i bufferten // antal platser i bufferten // bufferten är ledig // vänta på att det finns plats i bufferten // vänta på att ingen använder bufferten // skicka ett meddelande till bufferten // låt andra använda bufferten // signalera att ett nytt meddelande finns i bufferten // vänta på ett meddelande // vänta på att ingen använder bufferten // hämta ett meddelande från bufferten // låt andra använda bufferten // det finns plats för ännu ett meddelande i bufferten Robert Kostelac 9

10 Att skydda resurser med semaforer fungerar bara om alla involverade task samarbetar genom att vänta på semaforen när resursen är upptagen och släppa semaforen när resursen ej längre används. Ovanstående exempel kan tyckas komplicerat och det är det också eftersom semaforer ej är en lämplig konstruktion för att lösa producent/konsument problemet Kommunikation Normalt används kommunikation mellan task för att övervaka exekveringsordningen eller för att utbyta information mellan task. När en utvecklare designar algoritmer identifieras de beroenden som existerar mellan de olika tasken. Under exekveringen hanteras dessa beroenden genom att tasken kommunicerar med varandra. Det finns flera olika sätt att kommunicera; semaforer förklarades i kapitlet ovan och härnäst följer en beskrivning på meddelandeköer. Meddelandeköer (message queues) fungerar genom utbyte av data i buffertar. Alla task kan använda sig av dessa köer, oavsett om dessa task är relaterade eller ej. TASK 1 meddelanden TASK 2 meddelandekö Fig. 4.5 Task 1 skickar meddelanden till task 2 via en meddelandekö Meddelandeköer är det naturligaste sättet att skicka meddelanden mellan olika task. Två task med en tvåvägskommunikation kräver normalt två köer. För ett task som samlar in information från andra task och sedan bearbetar denna information räcker en kö. Notera att efter att ett task har mottagit ett meddelande från en kö, tas meddelandet bort från kön. Exempel 4.7 Meddelandeköer kan användas till att synkronisera task. I figuren nedan visas hur task 2 väntar på ett meddelande från task 1. När meddelandet mottagits kan exekveringen i task 2 fortsätta. TASK 1 TASK 2 Task 1 skickar ett Task 2 väntar på ett meddelande som 2. meddelande från Task 1, 1. talar om att Task 2 exekveringen fortsätter kan fortsätta exe- när meddelandet kvera mottagits. Robert Kostelac 10

11 Fig. 4.6 task 2 väntar på meddelande från task 1 innan exekveringen fortsätter Felsituationer När två eller flera task kan använda en gemensam resurs, som t.ex. en variabel i ett delat minne kan det ibland inträffa att samma resurs används av flera task samtidigt. Detta innebär att felaktiga och oförutsebara resultat kan uppstå. Det enda sättet att lösa sådana fel är att garantera ömsesidig uteslutning till en sådan resurs, dvs. endast tillåta ett task i taget access till resursen. Andra fel som kan uppstå är svält och deadlock. Svält betyder helt enkelt att ett eller flera task inte får tillräckligt med CPU-tid på grund av att andra task ockuperar CPU:n. Deadlock innebär att ett eller flera task väntar på varandra och backlås har uppstått. Exempel 4.8 Exemplet visar ett fall där Task A och Task B båda vill skriva ut på samma skrivare. Task A börjar skriva ut på en skrivare Task B avbryter Task A och skriver ut på skrivaren Task A fortsätter att skriva ut där den slutade, vilket medför blandade utskrifter Det behövs mekanismer för att skydda ett task som är i sitt kritiska avsnitt (avsnitt där globala resurser modifieras) och ett ömsesidigt uteslutande (mutual exclusion) mellan task måste garanteras. Lyckligtvis är semaforen en utmärkt konstruktion som kan användas för att garantera ömsesidig uteslutning. Notera att vid användning av semaforer så måste programmeraren framförallt förhindra att deadlock inträffar. Exempel 4.9 För att undvika blandade utskrifter används en semafor för att garantera ömsesidigt uteslutande: En semafor s för resursen skrivare deklareras. Task A tar semaforen s och börjar skriva ut på skrivaren Robert Kostelac 11

12 Task B vill skriva ut på samma skrivare men semaforen s är upptagen, tasket väntar Task A skriver klart och släpper se semaforen s Task B får semaforen s och skriver ut I en situation där ett task väntar på resurser som ägs av andra task, som i sin tur väntar på resurser som ägs av det ursprungliga tasket, inträffar deadlock. Kort sagt är deadlock en cirkulär väntan på resurser. Nedanstående figur visar deadlock i trafiken; ett mycket vanligt scenario, speciellt när vi har bråttom. Fig. 4.7 deadlock i trafiken När inträffar deadlock? I normala fall kommer ett task som vill allokera en resurs att göra på följande sätt: 1. begära resursen 2. använda resursen 3. släppa resursen Om resursen är allokerad av ett annat task, kommer tasket att vänta. Om tasket som håller resursen vill ha en resurs som det väntande tasket håller i, kommer det tasket också att vänta. Båda tasken kommer att vänta för evigt. Alltså, deadlock kan inträffa när ett task måste vänta på en resurs. Det går att visa att följande fyra kriterier måste vara uppfyllda för att deadlock skall kunna inträffa: Robert Kostelac 12

13 1. Varje resurs är antigen allokerad av endast ett task, eller är ledig. 2. Task som håller resurser kan begära nya resurser. 3. Task som håller resurser kan ej kan ej fråntas resursen. 4. Cirkulär väntan. Det måste finnas en kedja av två eller flera task, där alla task väntar på en resurs som är allokerad av ett annat task i kedjan. Robert Kostelac 13

14 På grund av punkt nummer 4, cirkulär väntan går det att rita en graf och kontrollera om deadlock existerar. väntar på Resurs X Task A ägs av Resurs Y ägs av Task B väntar på Fig. 4.8 deadlock existerar mellan task A och task B Hur kan deadlock hanteras? Ignorera problemet Denna lösning är inte så dum som den först låter. T.ex. om en maskin förväntas stanna en gång i månaden p.g.a. av deadlock och blir stående en timme, så kan problemet vara försumbart. Fast om denna maskin är en del av ett större system i ett kärnkraftverk bör inte denna metod väljas. Ibland kan andra typer av fel vara mycket vanligare, t.ex. hårdvarufel, och då kan deadlock problemet ignoreras. Detektera deadlock och åtgärda I detta fall håller systemet kontroll på de resurser som fördelas och använder informationen till att bygga en deadlock graf. Om deadlock påträffas finns två möjliga åtgärder: 1. Ta en resurs från ett task och ge den till ett annat task 2. Döda ett task som håller en resurs som ett annat task behöver Förhindra deadlock genom att bryta en av de fyra nödvändiga punkterna för att deadlock skall kunna uppstå. En möjlighet att förhindra deadlock är låta task ta alla resurser som behövs på en gång. Det är dock vanligt att task i förväg inte vet vilka resurser som behövs. Dessutom hålls resurserna ofta längre än nödvändigt, så den här lösningen är inte bra. En lösning som fungerar i praktiken är följande: ordna resurserna i en viss ordning, dvs. alla resurser tilldelas ett nummer. När sedan resurserna allokeras tas dom alltid i samma ordning. t.ex. 1. plotter 2. bläckstråleskrivare 3. laser printer Förhindra deadlock genom att noggrant fördela resurser. Robert Kostelac 14

15 5 Problembeskrivning De problem som skulle analyseras var att presentera en helhetssyn för multitasking passande ABB Robotics robotsystem. En komplett instruktionsuppsättning och dess funktionalitet för multitasking skulle presenteras. Semaforer och meddelandeköer skulle implementeras. Det som finns i systemet idag är möjligheten att skapa upp till 10 task. Prioriteter kan tilldelas dessa task. Dessutom finns en RR schemaläggare. Notera dock att task måste definieras statiskt, dvs. alla task läses ifrån en konfigurationsfil. En diskussion kring dessa områden finns i kapitel 7.3 komplett multitasking design. Det finns möjligheter till kommunikation och synkronisering mellan task. Detta görs genom att polla globala variabler, genom att använda interrupt eller med en dispatcher. Med andra ord, det finns ingen möjlighet för en rapidprogrammerare att på ett naturligt sätt kommunicera mellan task och synkronisera dessa. Därför var det av yttersta vikt att implementera semaforer och meddelandeköer för att förenkla för rapidprogrammeraren, dvs. kunden. Resten av denna rapport beskriver systemet, implementation av semaforer och meddelande-sändning i systemet och slutligen en sammanfattning på multitasking i rapid. Robert Kostelac 15

16 6 Robot Systemet I detta kapitel förklaras de delar av systemet som är viktigast för att uppgiften skulle kunna lösas. Först beskrivs systemets huvuddelar och hur dessa delar kommunicerar vid t.ex. exekvering. Därefter förklaras robotspråket rapid med en betoning på multitasking delen. För att kunna lösa uppgiften och införa ny funktionalitet som t.ex. semaforer är vissa delar av systemet speciellt intressanta. Dessa är Program Servern (PGM), ReaL, Shared database (sdb), Inter Process Communicaton (IPC) och klassen PGMRUN. Dessa delar beskrivs utförligt i kapitlen Det visade sig att det var lämpligast att implementera så mycket så möjligt i ReaL där den största delen av robotens funktionalitet redan är implementerad. Därför ges ett ganska utförligt exempel på hur en ReaL instruktion skapas i kapitel 6.4 ReaL. 6.1 Översikt av systemet Figuren nedan visar en översiktlig bild av systemet och därefter följer en förklaring av delarna. 1 Servo Interactive Units 1 1,m Cabinet 1,m 1 Ipol 1,m 0,m 0,m Comp Tp Program Segm. Target 1,m 1 Config EIO Process Sensor Euq. Fig. 6.1 Översiktlig bild av klasserna i systemet. Robert Kostelac 16

17 6.1.1 Interaktiva Enheter Det går att kommunicera med systemet på två olika sätt, antigen med en dator (Comp) eller med en kommunikationsenhet (Teach Pendant, Tp). Utifrån användarens synvinkel består systemet av ett interface (Cabinet) och en konfigurationsfil (Config) Teach pendant Kommunikationsenheten (Tp) är en fysisk enhet som ger en operatör möjlighet att programmera och kontrollera roboten. T.ex. finns en joystick med vilken roboten kan flyttas manuellt, nödstopp, möjlighet till att skapa nya rapid program etc Cabinet Cabinet (CAB) är ett interface mot alla interaktiva enheter kopplade till systemet. Den kontrollerar tillstånd i systemet och fördelar resurser Configuration Systemet har en klass som hanterar all konfigurationsinformation. Konfigurationen som specificeras är konsistent och ändras ej under exekvering Program server Programservern (PGM) innehåller tjänster och information som behövs för att skapa en interaktiv programmeringsmiljö och exekvera roboten. PGM förklaras i kap Process Denna klass består av ett process skelett som möjliggör installation av nya delar i systemet som t.ex. inkapsling av sensorenheter, processutrustning mm Interpolator Interpolatorn beräknar positioner varje nytt tidsintervall och använder metoder i servo för att flytta roboten i små steg mot den slutgiltiga destinationen Servo Servo ser till att robotens axlar följer positionen, farten etc. av de dynamiska steg som genererades av interpolatorn. Dessutom kontrollerar servo bromsar på roboten Segment Robert Kostelac 17

18 Segment innehåller all information som behövs för att flytta roboten till nästa position. PGM skapar ett nytt segment, använder 'set-' metoder i segment för att sätta nya värden och skickar informationen till interpolatorn Target Denna klass kapslar in information om positioner på en manipulator. Metoder finns för omvandling mellan kartesisk- och axel representation, och vice versa EIO Denna klass är ansvarig för kontrollen av analoga och digitala IO signaler Kommunikation mellan klasserna Figuren nedan visar den huvudsakliga kommunikationen under exekvering: Interactive Units CAB Ipol PGM Process Fig. 6.2 huvudsaklig kommunikation under exekvering Cabinet (CAB) exekverar program med hjälp av exekveringsmetoder i PGM. Programservern (PGM) använder metoder i Ipol för att utföra robotrörelser. PGM samarbetar också med IO och Process för att skapa och kontrollera processdelar. Vissa processer kommunicerar med Ipol för att t.ex. korrigera robotens rörelser. Huvudsaklig kommunikation under programmering: Robert Kostelac 18

19 Interactive Units CAB Ipol Config PGM Process. Fig. 6.3 huvudsaklig kommunikation under programmering 6.2 Rapid Interaktiva enheter, t.ex. Tp (kommunikationsenheter) manipulerar innehållet i ett program med hjälp av metoder i Cabinet och via Config. Cabinet använder metoder i Program (PGM) för att utföra den begärda uppgiften. Cabinet kan beordra Ipol att flytta roboten. Rapid är programmeringsspråket som används för att programmera en robot. Ett rapidprogram består av instruktioner och data som kontrollerar en robot och dess utrustning på ett önskvärt sätt. Nedan förklaras robotspråket rapid kortfattat, speciellt betonas multitaskingdelen. Ett normalt rapidprogram är oftast uppbyggt av tre delar: en huvudrutin där exekveringen av huvudprogrammet startar flera subrutiner, som används för att dela upp programmet i mindre beståndsdelar programdata, som används för att definiera positioner, numeriska värden etc. Dessutom innehåller programminnet systemmoduler, se figuren nedan: Robert Kostelac 19

20 Program minne Program Program data Huvud rutin Sub rutiner System moduler Fig. 6.4 uppbyggnaden av ett Rapid program Systemmoduler är program som alltid finns i minnet. Rutiner och data som har med installationen att göra, som t.ex. verktyg och servicerutiner är installerade som systemmoduler Syntax En instruktion definierar en specifik händelse som skall inträffa när instruktionen exekveras; t.ex. flytta roboten. Robert Kostelac 20

21 En instruktion beskrivs enligt: TPWrite String [\Num] [\Bool] [\Pos] [\Orient] Instruktion Argument Ömsesidigt uteslutande argument Ett valfritt argument omges av [ och ]. Dessa argument behövs ej specificeras. Argument separerade med är ömsesidigt uteslutande. Med detta menas att de ej kan existera i en instruktion samtidigt. Argument som kan repeteras ett godtyckligt antal gånger omges med { och }. Exempel: TPWrite test ; Strukturen på Rapid Programmet består av ett antal instruktioner som beskriver på vilket sätt roboten skall arbeta. Instruktionerna anropas oftast med ett antal argument som definierar vad som skall hända i en specifik instruktion. Dessa argument specificeras på ett av dessa sätt: som ett numeriskt värde, t.ex. 6 eller 6.6 som en referens till data, t.ex. reg1 som ett uttryck, t.ex. 5 + reg1 * 5 som en funktion, t.ex. Abs(reg1) som en sträng, t.ex. "Produce result" Det finns tre typer av rutiner: En procedur som används som ett subprogram. En funktion som returnerar ett värde av en specifik typ och som används som ett argument till en instruktion. Traprutiner som ger möjlighet att svara på interrupt. En traprutin kan associeras till ett specifikt interrupt. Det finns tre typer av data - konstanter, variabler och persistents: En konstant representerar ett statiskt värde och kan endast tilldelas ett nytt värde manuellt. En variabel kan tilldelas ett nytt värde under exekvering. En persistent kan beskrivas som en variabel som behåller sitt värde. När ett program sparas lagras även det nuvarande värdet på variabeln. När sedan programmet laddas på nytt, får variabeln det värde den hade när den programmet sparades. En persistent är global över task och används vid bl.a. synkronisering av task. Några andra egenskaper i rapid är: Aritmetiska och logiska uttryck Automatisk felhantering Modulära program Robert Kostelac 21

22 Multitasking Av dessa kommer endast multitasking att förklaras närmare Några vanliga instruktioner Eftersom det är av föga vikt att förklara alla detaljer av rapid kommer endast några enkla och vanliga instruktioner förklaras. Exempel på rapid program finns bl.a. i kapitel som handlar om hur synkronisering av task löses i rapid. Rapid har många likheter med procedurella språk som t.ex. C. IF, FOR, WHILE, GOTO etc. är instruktioner som kontrollerar programflödet, och finns i både C och andra programmeringsspråk. Det som skiljer rapid från t.ex. C är att det finns bl.a. instruktioner för att flytta en robot. Nedan följer en lista på några rapid instruktioner: IF WHILE FOR GOTO Stop := WaitTime WaitUntil! MoveC MoveL etc. Exekvera en sekvens av olika instruktioner beroende på om ett test är sant eller inte. Repetera en sekvens av instruktioner så länge ett test är sant. Repetera en sekvens av instruktioner ett visst antal gånger. Hoppa till en 'label'. Stoppa exekveringen. Tilldela ett värde till data. Vänta en tid, eller tills roboten har stannat. Vänta tills ett uttryck blir sant. Kommentar Flytta roboten längs en cirkulär väg. Flytta roboten längs en linjär väg Multitasking i Rapid Händelserna i en robotcell är ofta parallella, därför har man infört multitasking. Exekveringen startar vid 'power on' och fortsätter därefter för evigt, om inte ett fel uppstår i programmet. Ett program kan placeras i bakgrunden eller förgrunden av ett annat program. Det kan också placeras på samma nivå som ett annat program (standard). På så vis kan programmen tilldelas prioriteter. Upp till 10 olika tasks kan exekveras samtidigt. Begränsningen beror på att det inte finns resurser i systemet för att hantera fler än 10 task, framför allt är det dåligt med minne. Alla task består av ett antal moduler, på samma sätt som ett normalt program. Variabler och konstanter är lokala i varje task men persistents är globala och kan nås från alla task. Om två persistents har samma namn men dess typ är olika så kommer ett run-time fel att inträffa. En restriktion är att endast huvudtasket kan utföra rörelseinstruktioner. Robert Kostelac 22

23 Synkronisering av task I många applikationer behövs synkronisering av olika task. Eftersom funktionalitet som semaforer inte (ännu) finns görs det antigen genom pollning eller via interrupt. Det enklaste sättet att synkronisera två task är med pollning, med det är också det långsammaste. Persistents används då tillsammans med instruktionerna WaitUntil, IF, WHILE eller GOTO. Exempel 6.1 I detta exempel kommer WaitUntil instruktionen i task 1 att polla varje 100:de ms. När variabeln startsync sätts till sann i task 0 kommer exekveringen i task 1 att fortsätta. TASK 0 TASK 1 MODULE t0 MODULE t1 PERS bool startsync := FALSE; PERS bool startsync := FALSE; PROC main() PROC main() startsync := TRUE; WaitUntil startsync; ENDPROC ENDPROC ENDMODULE ENDMODULE Ett bättre sätt att synkronisera två task är med hjälp av interrupt eftersom det är händelsestyrt. Exempel 6.2 I task 1 deklareras ett interruptnummer isiint1. Det kopplas till traprutinen isi_trap. När task 0 sätter signalen do1 till 1 anropas traprutinen isi_trap i task 1. TASK 0 TASK 1 MODULE t0 MODULE t1 PROC main() VAR intnum isiint1; PROC main() SetDO do1,1; CONNECT isiint1 WITH isi_trap; ISignalDO do1, 1, isint1; ENDPROC WHILE TRUE DO ENDMODULE WaitTime 200; ENDWHILE IDelete isiint1; ENDPROC TRAP isi_trap ENDTRAP Robert Kostelac 23

24 ENDMODULE Kommunikation mellan task När två task behöver kommunicera görs det med hjälp av persistents variabler Prioriteter Exempel 6.3 I exemplet visas hur strängen robot skickas från task 0 till task 1. TASK 0 TASK 1 MODULE t0 MODULE t0 PERS bool startsync := FALSE; PERS bool startsync := FALSE; PERS string stringtosend := ""; PERS string stringtosend := ""; PROC main() PROC main() stringtosend := "robot"; WaitUntil startsync; startsync := TRUE; IF stringtosend = "robot" THEN ENDPROC... ENDMODULE ELSE... ENDIF ENDPROC ENDMODULE Normalt exekveras alla task på samma nivå i en round robin. Det är möjligt att ändra prioriteringen på ett task så att det exekveras i bakgrunden av ett annat task. Då kommer bakgrundstasket endast att exekvera när förgrundstasket väntar på någon händelse, eller om exekveringen för det tasket har stannat. Ett program med rörelseinstruktioner är inaktivt nästan hela tiden vilket innebär att eventuella bakgrundstask får gott om CPU-tid. 6.3 Program Server (PGM) PGM utför tjänster åt cabinet (CAB). CAB utför i sin tur tjänster åt en operator eller/och en extern dator. De tjänster PGM utför är av tre typer: kontrollera exekveringen av rapidprogram interaktiv utveckling av rapidprogram utbyte av data, t.ex. läsa/skriva till globala variabler Ett rapidprogram kommunicerar med alla typer av resurser i systemet. Det mesta av rapids funktionalitet är uppbyggt av ett fördefinierat C-bibliotek kallat ReaL. Detta gör det möjligt att Robert Kostelac 24

25 expandera och förändra funktionaliteten på rapid utan några som helst ändringar i kärnan. PGMs uppgift är att manipulera och exekvera rapid task. En instans av PGM kapslar in exakt ett task. PGM klarar av att ladda, spara, visa, editera och exekvera rapidprogram. Det finns också rutiner för att installera ReaL arkiv och modifiera symboltabellen. PGM tillåter att rapid program skapas interaktivt eller att rapid program laddas från en fil. Ett syntax träd (internal form) används för den interna representationen av ett rapid program. PGMs huvudkomponenter är: kompilator, länkare, interpretator, editor, viewport och en printer. Det finns naturligtvis andra komponenter i PGM, men de tas inte upp i denna rapport. CAB Interpretator Länkare Editor Viewport 1, m Kompilator PGM ReaL Fig. 6.5 visar PGMs huvudkomponenter Interpretator Interpretatorns uppgift är att exekvera rapid program. Det centrala i interpretatorn är två stackar, en exekverings stack och en run-time stack. Exekveringsstacken har en kontroll på programräknaren, så att det från innehållet på exekveringsstacken går att ta reda på var i koden den nuvarande exekveringen är, och hur (via rutinanrop) den kom dit. Runtimestacken har motsvarande kännedom av dynamiska värden associerade med exekveringsstacken. När interpretatorn anropas kommer den först att kontrollera om det finns något interrupt som måste köras innan nästa instruktion kan börja exekveras. Efter detta kommer interpretatorn att hämta det översta elementet på exekveringsstacken och bearbeta detta element. Vad som händer därefter beror naturligtvis på elementet som hämtades, men kortfattat kan sägas att interpretatorn kommer att hämta och lägga till värden på exekverings-stacken och runtimestacken för att exekvera rapidprogram. Meningen med dessa aktioner är att ta interpretatorn igenom ett basic step. Ett basic step kan ses som den minsta exekveringen från ett väldefinierat tillstånd till nästa väldefinierade tillstånd. Normalt motsvarar ett basic step en rapid instruktion. I vissa fall är ett basic step otydlig t.ex. när en ReaL instruktion (ReaL instruktioner förklaras i kapitel 6.4) väntar på en händelse. När interpretatorn befinner sig i ett väldefinierat tillstånd kan den släppa kontrollen på exekveringen. Robert Kostelac 25

26 6.3.2 Kompilator Kompilatorn läser rapid källkod och genererar den interna formen (syntax trädet) av rapid. Dessutom genereras symboltabeller och referenser. När kompilatorn läser koden analyserar den rapid moduler, tasks, alla filhuvuden, kodrader och den lexikala korrektheten på identifierare och kommentarer kontrolleras. Scannern och parsern är genererade av ToolMaker-verktygen ScannerMaker och ParserMaker. Kompilatorn bara anropar scannern och parsern för att få jobbet utfört. Grammatiken är på formen EBNF (Extended Backus-Naur Form) Länkare Länkaren utför alla semantiska kontroller på rapid task. Den fyller i data i symboltabellen och i den interna formen. Den allokerar minne för variabler, skapar persistents i sdb och initierar konstanter och modulvariabler. Kortfattat kan sägas att länkaren utför alla kontroller som ej görs av kompilatorn eller editorn. Länkningen utförs i ett antal link passes. Först genomförs alla kontroller på tasknivå. Sedan följer länkning av alla modul datadeklarationer, alla rutin deklarationer tillsammans med alla parameter- och rutin datadeklarationer, och sist alla instruktioner i alla rutiner Editor Editorn hanterar current object, vilket är det objektet som operatören arbetar med. Här finns alla editeringsfunktioner som är relaterade till rapidkod. Editorn stödjer 'klipp ut', 'kopiera' och 'klistra in' operationer av rapidkod. T.ex. när ett kodavsnitt av ett rapid program klipps ut uppdateras symboler i symboltabellen och syntaxträdet struktureras om. Dessutom informerar editorn viewport-klassen med positionen av current object Viewport Viewport hanterar den del av koden som är synlig för användaren. Koden visas på formen pretty print (detta innebär bl.a. automatisk indentering av rapid kod). Klassen används också för att spara rapid moduler till en fil. 6.4 ReaL Den största delen av rapids funktionalitet är definierad i ReaL. ReaL i rapid motsvarar ett C- bibliotek i programspråket C. Ett gränssnitt kallat REAL (stora bokstäver) innehåller ett antal rutiner som tillåter att ReaL-instruktioner kommunicerar med rapid interpretatorn och andra delar av PGM. När det blev uppenbart att det inte skulle gå att utöka PGM med nya instruktioner (varför det inte går förklaras i kapitel 7) undersöktes möjligheterna till att utnyttja ReaL. Robert Kostelac 26

27 Notera att detta kapitel handlar om hur helt nya ReaL instruktioner skapas, dvs. sett ifrån realprogrammerarens synvinkel. ReaL rutiner kan göra följande: prenumerera på händelser från manipulatorn, IO eller andra objekt. vänta på en viss händelse (event) avallokera händelser, och returnera allokerade resurser hämta rapid argument och hämta/spara funktioners returvärden spara data mellan en wait och nästa aktivering rapportera runtimefel till interpretatorn använda normala C primitiver ReaL - Rapid Alla objekt, datatyper och rutiner i rapid har en egen definition i ReaL. En tabell innehållande pekare till sådana definitioner skickas till PGM för att installeras vid uppstarten av systemet. I och med att en ReaL instruktion blir installerad blir den också känd för alla delar av PGM och därmed resten av systemet. En komplett definition av en ReaL-rutin ser ut på följande sätt: 1. en lista där all parametrar till funktionen definieras 2. definition av rutinen ReaL-rutin C-funktion parametrar Det finns fem parametrar till C-funktionen som användas i en ReaL rutin. Dessa parametrar ger ReaL programmeraren möjlighet att t.ex. skilja på olika task. void *origin Detta är en identifierare på program servern (PGM). Tidigare förklarades att upp till tio instanser av PGM kan skapas. Detta argument ger ReaL programmeraren en möjlighet att skilja dessa instanser åt. REAL_MODE mode Detta är exekveringsriktningen på detta anrop för ReaL rutinen. T.ex. kan rapid program exekveras baklänges vilket är lämpligt i ett robotspråk. Realprogrammeraren måste ta hänsyn till alla olika exekverings-riktningar. Nedan följer de exekveringsriktningar som finns: REAL_FORWARD Normal exekvering (med riktig robot). REAL_SIMULATE REAL_FORWARD_INSTR REAL_BACK REAL_UNDO Simulera instruktionen (används vid utveckling). Exekvera ett steg i taget. Normalt samma som REAL_FORWARD utom för instruktioner som har med rörelser att göra. Exekvera baklänges. Avsluta rutinen. Detta kan endast inträffa när ReaLrutinen tidigare returnerat REAL_WAIT och väntar på någon händelse. Robert Kostelac 27

28 void *save Denna parameter pekar på en reserverad minnesarea som inte rörs av PGM mellan två anrop till ReaL rutinen, där det första anropet returnerade REAL_WAIT. IPC_MSG *event Pekare till ett inkommande IPC beordrat av ett tidigare anrop till ReaL rutinen. short *iptnum När en ReaL instruktion tidigare returnerat REAL_WAIT returneras det interrupt nummer instruktionen väntar på i denna parameter ReaL rutin C funktion returvärden En ReaL funktion returnerar till rapid interpretatorn med C-funktionen return. Den kan returnera en av följande: REAL_READY ReaL rutinen är klar. REAL_RECALC Omevaluera rapid argument och anropa igen. REAL_RECALL Avsluta basic step. Sedan omevaluera argumenten och anropa igen. REAL_WAIT Vänta på en händelse. REAL_STOP Stoppa exekveringen. REAL_EXIT Avsluta rapid programmet. REAL_BREAK Stoppa exekveringen. REAL_REFUSE ReaL rutinen vägrar exekvera. T.ex. kan ej exekvera baklänges Ny Rapid instruktion I detta kapitel visas ett exempel på hur en helt ny rapid instruktion example definieras. ReaL instruktionerna programmeras i ANSI-C. /* Rapid instruktionen definieras */ PRIVATE REAL_CFUN example_cfun; /* Parametrar till instruktionen definieras. Denna instruktion kan ta fyra olika parametrar, * varav de två sista ej kan existera samtidigt. Varje parameter definieras genom att fylla i sju * fält i strukturen REAL_PARDEF. De olika fälten är: * 1. valfri/nödvändig parameter * 2. typ av parameteröverföring (in, variabel, persistent...) * 3. parameter typ * 4. storleken på arrayen (eller REAL_SYMPARTYP_NOTCARR om ej array) * 5. parameter namn * 6. alternativ parameter (TRUE om föregående och denna parameter är ömsesidigt * uteslutande) * 7. namnet på typen * * En fil med förlängning.eng som innehåller den exakta syntaxen på typer, instruktioner * osv. såsom det skrivs i rapid måste också definieras. * Denna fil är en trivial textfil och skulle kunna se ut så här: Robert Kostelac 28

29 * * 1: * num * 2: * bool * 3: *. * osv. */ PRIVATE REAL_PARDEF example_par[] = { {REAL_SYMPARTYP_REQ, REAL_SYMPARMOD_IN, 1 /* num */, REAL_SYMDATDIM_NOTCARR, 14 /* n */, FALSE, "n"}, {REAL_SYMPARTYP_OPT, REAL_SYMPARMOD_IN, 2 /* "bool" */, REAL_SYMDATDIM_NOTCARR, 15 /* b */, FALSE, "b"}, {REAL_SYMPARTYP_OPT, REAL_SYMPARMOD_IN, 3 /* switch */, REAL_SYMDATDIM_NOTCARR, 17 /* s1 */, FALSE, "s1"}, {REAL_SYMPARTYP_OPT, REAL_SYMPARMOD_IN, 3 /* switch */, REAL_SYMDATDIM_NOTCARR, 18 /* s2 */, TRUE, "s2"} }; /* Rutinen example definieras. * I.eng filen återfinns "Example" som nummer 19. */ PRIVATE REAL_RTNDEF example_rtndef = { -1, /* ej funktion */ 19, /* Example */ example_cfun, example_par, sizeof(example_par)/sizeof(example_par[0]), REAL_SYMKEY_IO, /* Klassificering på Tp */ "example" /* syntax i.eng filen */ }; /* Det publika handtaget till alla objekt som skall installeras. */ PUBLIC REAL_SYMINSDEF example_syminsdef[] = { {REAL_SYMDEF_VERSION, REAL_VERSION}, /* Version */ {REAL_SYMDEF_PRC, &example_rtndef}, /* Rutinen */ {REAL_SYMDEF_END, NULL} /* Slutet på listan */ }; /* example_cfun - Example ReaL rutin * Rapid syntax: * PROC Example( Robert Kostelac 29

30 * num n * \bool b, * \switch s1 * switch s2) * * I rapid kan ett anrop till rutinen example se ut enligt: * Example 3 \s2; */ PRIVATE REAL_CFUNDEF(example_cfun) { REAL_ARLNUM *np; REAL_ARLBOOL *bp; REAL_ARLSWITCH *s1p, *s2p; /* Hämta argumenten */ np = (REAL_ARLNUM *) real_getarg(origin,1); bp = (REAL_ARLBOOL *) real_getarg(origin,2); s1p = (REAL_ARLSWITCH *) real_getarg(origin,4); s2p = (REAL_ARLSWITCH *) real_getarg(origin,5); } /* Gör något när s2p är specificerad */ if (s2p) {... return REAL_READY; 6.5 Shared database Shared database (sdb) hanterar variabler skapade i rapid som är synliga för alla andra objekt i systemet. Dessa variabler är globala, dvs. synliga för alla task. T.ex. persistents lagras i sdb. En variabel läggs in i sdb med metoden variable_create. Då allokeras minne för variabeln, och dess data initieras. Variabler lagrade i databasen kan accessas av all som känner till databasens id och namnet på variabeln. Följande sekvens används för att accessa en variabel: Hämta databasens id. Hämta en variabel descriptor. Accessa data med hjälp av variable read, write eller erase metoder. Det är också möjligt att prenumerera på ändringar av variabler lagrade i databasen. När det inte längre finns några användare av en variabel i databasen, tas den bort. 6.6 Inter Process Communication Inter process communication (IPC) används för att kommunicera mellan- och synkronisera asynkrona processer i systemet. Det finns tre olika typer av kommunikation; asynkron, synkron eller Robert Kostelac 30

31 broadcast. En process kan också begära att prenumerera på ett specifikt meddelande i en annan process Asynkrona meddelanden Den vanligaste kommunikationen är när en process önskar lämna ett meddelande till en annan process och inte behöver vänta på svar. För att åstadkomma detta gör den sändande processen ett ipc_send, medan mottagaren gör ett ipc_receive. Robert Kostelac 31

32 6.6.2 Synkrona meddelanden Om en process måste vänta på ett svar kan man använda ipc_sendwait. Den andra processen tar emot meddelandet med ipc_receive och skickar ett nytt meddelande tillbaka med ipc_answer Prenumerationer Detta är ett sätt att distribuera ett meddelande till de processer som prenumererar på ett meddelande. Processen som vill distribuera ett meddelande gör ett ipc_distribute, och sedan tar IPC hand om meddelandet och distribuerar det till de processer som vill ha det. För att meddela IPC att en process vill ha en distribution från en annan process använder den sig av ipc_subscribe, sedan ipc_receive för att hämta meddelandet. 6.7 Klassen PGMRUN PGMRUN är den del av PGM som inte fanns med från början utan den utvecklades i samband med att rapid utökades med multitasking. PGMRUN ansvarar för att PGM exekverar rapid program. Denna klass startar flera instanser av PGM, en instans för varje task. PGMRUN PGM Fig. 6.6 PGMRUN skapar flera instanser av PGM. PGMRUN utför tre uppgifter när det gäller multitasking: Skapar flera instanser av PGM, där en instans av PGM arbetar med ett rapid program. Det medför att en instans av PGM kapslar in ett task. Tillåter att prioriteter tilldelas dessa task. En Round-Robin schemaläggare används och varje task exekverar ett basic step per varv. Robert Kostelac 32

33 7 Lösning Möjlighet till multitasking i rapid finns redan. T.ex. finns möjlighet att skapa flera task och tilldela prioriteter till dessa. Det finns också en enkel schemaläggare. Det som saknas är funktionalitet för att hantera synkronisering och kommunikation mellan olika rapid task. Grundidén har varit att de rapid instruktioner som implementeras skall vara enkla för en rapid- programmerare att använda. Samtidigt skall instruktionerna vara kraftfulla, så att en erfaren rapidprogrammerare skall kunna utföra de uppgifter som ställs på ett multitaskingsystem. 7.1 Nya Rapid Instruktioner I detta kapitel visas hur synkronisering och kommunikation mellan rapid task ser ut sett ifrån rapidprogrammerarens synvinkel. Nedan följer de instruktioner som implementerades och dess syntax i rapid. SemInit Sem [\Take] SemTake (Sem [\Timeout]) SemRelease Sem MsgInit MsgQ [\MaxMsgs] MsgQSend (MsgQ Buff [\Timeout]) MsgQReceive (MsgQ Buff [\Timeout]) Initierar en semafor Tar en semafor Släpper en semafor Initierar en meddelandekö Skickar ett meddelande till en kö Tar emot ett meddelande från en kö Dessutom implementerades två nya typer; sem och msgq Semaforer Semaforerna implementerades som binära semaforer. Det finns ingen anledning att ha generella semaforer i rapid eftersom det sällan (eller aldrig) uppstår problem som kan lösas genom att tillåta flera task åtkomst till samma resurs samtidigt. Oftast används semaforerna till att skydda persistents, eller till att synkronisera olika task, och då räcker det med binära semaforer. Rapidprogrammeraren måste deklarera och initiera en semafor i alla task som skall använda semaforen. Dessutom bör semaforen intieras till samma värde i alla task (detta är dock inte nödvändigt). Vid den första påträffade initieringen kommer semaforen initieras till ett värde och alla därefter påföljande initieringar kommer att ignoreras. Om programmeraren av någon anledning har olika initieringsvärden på en semafor, kan denne ej med säkerhet veta vilket initieringsvärde semaforen får. Robert Kostelac 33

34 Exempel 7.1 Exempel på hur en semafor mysem deklareras och initieras som ledig (standardvärdet) i rapid. VAR sem mysem; SemInit mysem; Exempel 7.2 I detta exempel initieras semaforen mysem som tagen. VAR sem mysem; SemInit mysem \Take; Efter att en semafor deklarerats och initierats används den av samarbetande task med hjälp av funktionen SemTake och instruktionen SemRelease. Exempel 7.3 Ett task som vill använda en global resurs gör på följande sätt:... status := SemTake (mysem);! Använd global resurs SemRelease mysem;! Ta semaforen som skyddar global resurs.! Släpp semaforen. SemTake är en funktion som returnerar TRUE om det gick bra att ta en semafor, FALSE annars. Orsaken till att SemTake är en funktion är att det går att skicka med en timeout, som är maximala tid ett task väntar på en semafor. Om timeout ej är specificerad motsvarar detta WAIT_FOREVER, dvs. vänta för evigt. Exempel 7.4 Detta exempel visar hur ett task försöker ta semaforen mysem med en timeout på fem sekunder. IF SemTake (mysem \Timeout := 5) THEN! Fick semaforen inom 5 sekunder. Använd global resurs.... ELSE! Fick ej semaforen inom 5 sekunder, timeout! Gör någonting annat.... ENDIF Robert Kostelac 34

35 I kapitel Synkronisering av task, exempel 6.1, finns exempel på hur två task synkroniseras med hjälp av pollning och i samma kapitel visas i exempel 6.2 synkronisering med interrupt. Följande exempel visar hur samma synkronisering kan se ut med semaforer. Exempel 7.5 Task 0 och task 1 synkroniseras m.h.a. semaforen mysem. Task 1 försöker med instruktionen SemTake att ta semaforen mysem men blir tvungen att vänta eftersom semaforen är upptagen. När task 0 släpper semaforen med SemRelease tar task 1 semaforen och exekveringen i det tasket fortsätter. TASK 0 TASK 1 MODULE t0 MODULE t1 PROC main() PROC main() VAR sem mysem; VAR sem mysem; SemInit mysem \Take; VAR bool status; SemInit mysem \Take; SemRelease mysem; status := SemTake (mysem);... ENDPROC ENDPROC ENDMODULE ENDMODULE Exempel 7.6 I kapitel Kommunikation mellan task, exempel 6.3 visades hur två task kommunicerar m.h.a. persistents och pollning. Här visas hur det ser ut när semaforer används istället för pollning. TASK 0 TASK 1 MODULE t0 MODULE t1 PERS string stringtosend := ""; PERS string stringtosend := ""; PROC main() PROC main() VAR sem mysem; VAR sem mysem; VAR bool status; SemInit mysem \Take; SemInit mysem \Take; stringtosend := "really"; SemRelease mysem; ENDPROC ENDMODULE status := SemTake (mysem); IF stringtosend = "really" THEN ELSE ENDIF ENDPROC ENDMODULE Robert Kostelac 35

F5: Högnivåprogrammering

F5: Högnivåprogrammering F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering 1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Institutionen för elektro- och informationsteknologi, LTH

Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 5 Realtidssystem och realtidsprogrammering Mål Att du ska förstå hur avbrott används för - Mätning - Styrning - Stöd för körning av flera processer Att du ska förstå begreppet tråd

Läs mer

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH. Datorteknik Föreläsning 5 Realtidssystem och realtidsprogrammering Mål Att du ska förstå hur avbrott används för - Mätning - Styrning - Stöd för körning av flera processer Att du ska förstå begreppet tråd

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till

Läs mer

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram?

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram? Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer och synkroniseringsmeddelanden Parallellitet Ofta är det nödvändigt eller önskvärt att programdelar exekveras

Läs mer

Tentamen i Robotteknik MPR160, 16 december 2000

Tentamen i Robotteknik MPR160, 16 december 2000 Tenta i Robotteknik Z3 2000-12-16 1/6 Tentamen i Robotteknik MPR160, 16 december 2000 Lärare: Rolf Berlin ank 1286; 0707-99 24 89 Anders Boström ank 1526 Tillåtna hjälpmedel: Typgodkända kalkylatorer och

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

Introduktion till programmering och Python Grundkurs i programmering med Python

Introduktion till programmering och Python Grundkurs i programmering med Python Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?

Läs mer

Programmering B med Visual C++ 2008

Programmering B med Visual C++ 2008 Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

Typkonvertering. Java versus C

Typkonvertering. Java versus C Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

Övningsuppgifter kapitel 8

Övningsuppgifter kapitel 8 Inst. för Systemteknik Introduktion till programmering (SMD 180), 5 p Övningsuppgifter kapitel 8 1. Listor är en viktig datatyp i Python. Hur definierar kursboken lista? Vad kallas de värden som tillsammans

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Trådar. Aktiva objekt

Trådar. Aktiva objekt Föreläsning 11 Trådar 1 Aktiva objekt Det är välkänt från vardagslivet att saker händer samtidigt. Aktiva objekt gör saker på eget initiativ, medan passiva objekt endast gör saker när de blir ombedda.

Läs mer

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Fö 5+6 TSEA81. Real-time kernel + Real-time OS Fö 5+6 TSEA81 Real-time kernel + Real-time OS Stackens användningsområde * JSR / RTS : returadress * Temporärdata (push / pop) void myfunc(void) { int i; // hamnar nog i register int test[10]; // hamnar

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings

Läs mer

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

Tentamen i Introduktion till programmering

Tentamen i Introduktion till programmering Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

Gissa det hemliga talet

Gissa det hemliga talet Laborationsanvisning Gissa det hemliga talet Steg 2, laborationsuppgift 1 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i

Läs mer

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud. Analog Digitalitet Kontinuerlig Direkt proportionerlig mot källan Ex. sprittermometer Elektrisk signal som representerar ljud Diskret Digital Representation som siffror/symboler Ex. CD-skiva Varje siffra

Läs mer

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum: Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60 Superscalar vs VLIW Cornelia Kloth IDA2 Inlämningsdatum: 2018-12-05 Abstract Rapporten handlar om två tekniker inom multiple issue processorer

Läs mer

Föreläsning 5: Introduktion av pekare

Föreläsning 5: Introduktion av pekare Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men

Läs mer

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner Lektion 4, del 1, kapitel 10 Funktioner i JavaScript Inlärningsmål Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner Introduktion

Läs mer

Exam Concurrent and Real-Time Programming

Exam Concurrent and Real-Time Programming LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Exam Concurrent and Real-Time Programming 2018 08 23, 14.00 19.00 1. Vad är prioritetsinversion? Illustrera med ett enkelt exempel. Redogör

Läs mer

Visual Basic, en snabbgenomgång

Visual Basic, en snabbgenomgång Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika

Läs mer

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34 Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger

Läs mer

Pipelining i Intel Pentium II

Pipelining i Intel Pentium II Pipelining i Intel Pentium II John Abdulnoor Lund Universitet 04/12/2017 Abstract För att en processor ska fungera måste alla komponenter inuti den samarbeta för att nå en acceptabel nivå av prestanda.

Läs mer

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna

Läs mer

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten

Läs mer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Tentamen ID1004 Objektorienterad programmering May 29, 2012 Omtentamen för ID1004 Objektorienterad programmering HT11, 29 maj 2012, 09-13 Denna tentamen examinerar 3 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av 12 frågor. Varje fråga

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Kopiering av objekt i Java

Kopiering av objekt i Java 1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning 1 Dagens föreläsning Programmering i Lisp - Block, räckvidd - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng

Läs mer

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

1.1 Runnable och Thread

1.1 Runnable och Thread 1 Trådar 1.1 Runnable och Thread I övningen är ShoutThread hårdkodad att använda just ShoutRunnable. Det typiska förfarandet brukar annars vara att skicka över din Runnable i konstruktor-anropet till Thread:

Läs mer

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Enkla datatyper minne

Enkla datatyper minne Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in

Läs mer

Operativsystem - Processkommunikation

Operativsystem - Processkommunikation Operativsystem - Processkommunikation Mats Björkman 2015-01-26 Innehåll Processer (föreläsning 2) Processmodell Processtillstånd Trådar Processkommunikation (föreläsning 3, den här) Semaforer Monitorer

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen 68000 Arkitektur F2: Motorola 68000 I/O signaler Processor arkitektur Programmeringsmodell Assembler vs. Maskinkod Exekvering av instruktioner i 68000 Instruktionsformat MOVE instruktionen Adresseringsmoder

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör. Tentamen Inst. för Informationsteknologi Avdelningen för Datorteknik Herbert P Sander Tel: 070 376 06 87 Ämne: Operativsystem Lokal: Post Scriptum, sal 2 Datum: Måndagen den 13 maj 2002 Tid: Kl 09.00-14.00

Läs mer

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Tentamen ID1004 Objektorienterad programmering December 15, 2012 Ordinarie tentamen för ID1004 Objektorienterad programmering, 15 december 2012, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander F5 Selektion och iteration ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Boolska uttryck Boolska uttryck använder sig av jämförelseoperatorer < > = ==!= Resultatets datatyp är boolean

Läs mer

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet. Uppgift 1 Ett programmeringsparadigm är i grund och botten ett sätt att arbeta, ett sätt att möta problem. Det finns flera olika paradigm där varje paradigm har sina egna styrkor och svagheter. Det som

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta

Läs mer

Realtidsprogrammering Ordinarie tentamen

Realtidsprogrammering Ordinarie tentamen Tentamen i Realtidsprogrammering Ordinarie tentamen Datum: 2006-10-20 Tid: 08:00 13:00 Ansvarig lärare: Telefon: 1438 (kontor) Hjälpmedel: Miniräknare Poäng: Tentamen omfattar 40 poäng fördelade på 7 uppgifter.

Läs mer

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas. Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod

Läs mer

Testning av program. Verklig modell för programutveckling

Testning av program. Verklig modell för programutveckling Fel i program När man skriver program uppkommer alltid fel. Felen kan indelas i följande kategorier: Under kompileringen upptäcker kompilatorn fel som handlar om att man använt konstruktionerna i programspråket

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

Läs mer

Synkronisering. Föreläsning 8

Synkronisering. Föreläsning 8 Synkronisering Föreläsning 8 Synkronisering Så stort, intrikat och viktigt att det finns hela kurser om det i parallellprogrammering. Vi fuskar lite med några av de viktigaste bitarna! Synkronisering Vad

Läs mer

Övningar Dag 2 En första klass

Övningar Dag 2 En första klass Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt

Läs mer

Parameteröverföring. Exempel. Exempel. Metodkropp

Parameteröverföring. Exempel. Exempel. Metodkropp Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I

Läs mer

Abstrakta datatyper Laboration 2 GruDat, DD1344

Abstrakta datatyper Laboration 2 GruDat, DD1344 Abstrakta datatyper Laboration 2 GruDat, DD1344 Örjan Ekeberg (fritt från en idé av Henrik Eriksson) 27 oktober 2008 Målsättning Målet med denna laboration är att ge en inblick i hur man kan använda abstrakta

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag Datum: 2008-08-14 Tid: 08-12 Plats: PC6-PC7 i E-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna varje

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Programmering = modellering

Programmering = modellering Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal

Läs mer

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna. Använd olika lager. Döp lagren! Organisera era bibliotek! Design av interaktiv multimedia Ge era symboler instansnamn för att hitta dem med AS. Nytt för denna kurs: Ingen ActionScript-kod i.fla-filen!

Läs mer

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och... Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»

Läs mer

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t. Föreläsning 11 Arrayer Arrayer Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt int[] tal = new int[3]; Kan ha en array av t.ex: Heltal (int) Tecken (char) Personer (objekt av klassen

Läs mer

1 Klasser och objektorientering Vad är objektorientering?

1 Klasser och objektorientering Vad är objektorientering? 1 Klasser och objektorientering Vad är objektorientering? Det finns olika synsätt på programmering, dessa olika synsätt kallas för paradigm. De vanligaste paradigmen är det imperativa/proceduriella, det

Läs mer

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:

Läs mer

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1. Schenker har interna system som handhar information som är av intresse för våra kunder/partners. Idag finns ett flertal av dem tillgängliga via Internet, sk Online-tjänster. Dessa erbjuder inte bara hämtning

Läs mer

Länkning av Prolog under C

Länkning av Prolog under C Länkning av Prolog under C Kent Boortz Swedish Institute of Computer Science Box 1263, S-164 28 Kista, Sweden 1 september 1991 T91:14 Sammanfattning SICStus länkmoduler ger möjlighet att blanda Prolog-

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer