Tentamen. DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU. Tisdag 15 december 2009, kl

Relevanta dokument
EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

Tentamen. EDA485 Maskinorienterad programmering Z. Måndag 6 mars 2006, kl i V-salar

Tentamen med lösningsförslag

Maskinorienterad programmering

Tentamen med lösningsförslag

Tentamen. EDA485 Maskinorienterad programmering Z DAT015 Maskinorienterad programmering IT. Tisdag xx yyyy 2006, kl

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen.

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. Lars-Eric Arebrink

Tentamen med lösningsförslag

Tentamen. DAT015 Maskinorienterad programmering IT. Fredag 21 april 2006, kl i V-salar

Maskinorienterad programmering

Tentamen. EDA432 Digital och datorteknik IT INN790 Digital och datorteknik GU. Måndag 23 oktober 2006, kl i V-salar

Tentamen med lösningsförslag

Exempel på tentamen 1

Tentamen med lösningsförslag

Tentamen. EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU. Onsdag 12 Januari 2011, kl

Tentamen. EDA432 Digital- och datorteknik, IT DIT790 Digital- och datorteknik, GU. Måndag 18 Oktober 2010, kl

Tentamen med lösningsförslag

Tentamen. DIT150 Maskinorienterad programmering GU DAT015 Maskinorienterad programmering IT. Söndag 17 december 2006, kl

Tentamen med lösningsförslag

CHALMERS TEKNISKA HÖGSKOLA

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Maskinorienterad programmering

Exempel 3 på Tentamen

LEU240 Mikrodatorsystem

Tentamen med lösningsförslag

Digital- och datorteknik

Tentamen med lösningsförslag

Tentamen. EDA452 Grundläggande Datorteknik, D DIT790 Digital- och datorteknik, GU. Måndag 17 December 2012, kl

Tentamen 3. EDAxxx Grundläggande Datorteknik DIT791 Grundläggande Datorteknik, GU. Måndag xx Oktober 20xx, kl

Tentamen med lösningar

Exempel 1 på Tentamen med lösningar

Exempel 2 på Tentamen med lösningar

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Digital- och datorteknik. Mekatronik-, data- och elektroingenjör Åk 1/ lp 1o2. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen

TENTAMEN (med svar och vissa lösningar)

Laborationsmoment t 2 - En Borrautomat

EDA215 Digital- och datorteknik för Z

Digital- och datorteknik. Lars-Eric Arebrink. vid flera tillfällen. Betyg 4: 36 poäng Betyg 5: 48 poäng

Digital och Datorteknik EDA /2011. EDA 451 Digital och datorteknik 2010/2011. Uppbyggnad_och_funktion.pdf

Digital- och datorteknik

Laborationsmoment t 2 - En Borrautomat

Digital- och datorteknik

Facit till övningsuppgifter Kapitel 13 Anslutning av minnes- och I/O-moduler till buss 13-1

Digital- och datorteknik. Lars-Eric Arebrink. Betyg 4: 36 poäng Betyg 5: 48 poäng

Digital- och datorteknik. Lars-Eric Arebrink. Betyg 4: 36 poäng Betyg 5: 48 poäng

Programmering i maskinspråk (Maskinassemblering)

Laborationsmoment 2 - En Borrautomat

Digital- och datorteknik

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Digital- och datorteknik

EDA Digital och Datorteknik

Digital- och datorteknik

Övningsuppgifter i Mikrodatorteknik 4p/5p

Adressavkodning - busskommunikation

TENTAMEN. Digital- och datorteknik. Institutionen för data- och informationsteknik Avdelningen för datorteknik LEU431. Lars-Eric Arebrink

Assemblerprogrammets struktur; exempel

Maskinorienterad Programmering 2010/11

Laborationsmoment 2 - En Borrautomat

Assemblerprogrammering del 1

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Programmering av inbyggda system 2014/2015

Digital- och datorteknik. Lars-Eric Arebrink. vid flera tillfällen. Betyg 4: 36 poäng Betyg 5: 48 poäng

Digital- och datorteknik

Programmering av inbyggda system

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Digital- och datorteknik. Lars-Eric Arebrink. Av institutionen utgiven instruktionlista FLEXIBLE INSTRUKTION SET PROCESSOR FLISP

Programexempel för FLEX

Extrauppgifter för CPU12

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå

Arbetsbok för MC12, kapitel 4 Klocka. Genomgång av laborationer. New disc Här väljer du olika arbetsstycken

Digital- och datorteknik

Tentamen med lösningsförslag

Assemblerprogrammering del 3

Digital- och datorteknik

Assemblerprogrammering

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!)

TENTAMEN(Nu anpassad till FLIS- processorn)

Tentamen (Svar och lösningsförslag)

Lösningar till tentamen i EIT070 Datorteknik

Lösningsförslag tenta

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

Programmering i maskinspråk (Maskinassemblering)

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Printerport. I DAG Fö 3. Adressavkodning för skrivarporten. Printerport - forts

Assemblerprogrammering, ARM-Cortex M4 del 3

Digital- och datorteknik

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Tentamen med lösningsförslag

Transkript:

Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU Tisdag 15 december 2009, kl. 08.30-12.30 Examinatorer Jan Skansholm, tel. 772 1012 Rolf Snedsböl, tel 772 1665 Kontaktpersoner under tentamen Som ovan Tillåtna hjälpmedel Häftet Instruktionslista för CPU12 I den får rättelser och understrykningar vara införda, inget annat. Du får också använda bladet C Reference Card samt en av böckerna Vägen till C, Bilting, Skansholm, Studentlitteratur och The C Programming Language, Kerninghan, Ritchie Även i boken får rättelser och understrykningar vara införda, inget annat Tabellverk och miniräknare får ej användas! Allmänt Siffror inom parentes anger full poäng på uppgiften. För full poäng krävs att: redovisningen av svar och lösningar är läslig och tydlig. Ett lösningsblad får endast innehålla redovisningsdelar som hör ihop med en uppgift. lösningen ej är onödigt komplicerad. du har motiverat dina val och ställningstaganden assemblerprogram är utformade enligt de råd och anvisningar som givits under kursen och tillräckligt dokumenterade. C-program är utformade enligt de råd och anvisningar som givits under kursen. I programtexterna skall raderna dras in så att man tydligt ser programmens struktur. Lösningar anslås såsom anges på kursens hemsida. Betygslistan anslås såsom anges på kursens hemsida. Granskning Tid och plats anges på kursens hemsida. Betygsättning För godkänt slutbetyg på kursen fordras att både tentamen och laborationer är godkända. Tentamenspoäng ger slutbetyg enligt: 20p betyg 3 < 30p betyg 4 < 40p betyg 5

Uppgift 1 Maskinorienterad programmering - Tentamen 2009-12-15 2(8) Adressavkodning, bussystem Konstruera och rita upp adressavkodningen för ett MC12-system där vi önskar en yttre ROM-modul och en yttre RWM-modul. Dessutom skall två 8-bitars IO-portar finnas. Alla chip select signaler är aktiva låga ROM-modulen skall ha sin sista adress på $FFFF och är 8-kbyte stor. RWM-modulen som är 32-kbyte skall placeras med start på adress $0000. Använd fullständig adressavkodningslogik för minnesmodulerna. Inporten och utporten får placeras på valfri (valfria) adress (adresser) i det lediga adressutrymmet. Använd så få grindar som möjligt (ofullständig adressavkodning) när du konstruerar adressavkodningen för IO-portarna. (7p) a) Motivation ROM. 8kbyte 2 3 2 10 byte 13 Adressbitar [A12,A0] direkt till ROM-kapsel. RWM. 32kbyte 2 5 2 10 byte 15 Adressbitar [A14,A0] direkt till RWM-kapsel. Minnesmodulerna och I/O-portarna tar upp följande adressområden: Väljer att lägga IN- och UTport på samma adress då detta ger färre grindar. Lösning A 15 A 14 A 13 A 12 A 11 A 10 A 9 A 8 A 7 A 6 A 5 A 4 A 3 A 2 A 1 A 0 RWM Start: 0000-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Stop: 7FFF 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ROM Start: E000 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 Stop: FFFF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I/O 8000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Realisering Alla chip select signaler är aktiva låga. CS-ROM: {A 15 A 14 A 13 E R/W} CS-RWM: {A 15 E} I/O: Bilda först IOSEL för både portarna enligt {A 15 A 14 E} Välj sedan OUTSEL enligt {IOSEL R/W } och slutligen INSEL enligt {IOSEL R/W} A 15 A 14 A 13 E R/W CS_ROM A 15 E CS_RWM A 15 A 14 E R/W CS_IO R/W INSEL OUTSEL

Uppgift 2 Avbrott Maskinorienterad programmering - Tentamen 2009-12-15 3(8) Ett varuhus skall övervakas med ett avbrottsdrivet MC12-system. Det finns en larmknapp vid kassan och två knappar vid dörrarna. Studera figuren nedan. Vid larm (om någon i kassan eller vid dörrarna trycker på en larmknapp) sker ett avbrott. Om larmet kommer från kassan skall avbrottssubrutinen DESKRUT anropas. Kommer avbrottet från dörrarna skall avbrottssubrutinen DOORRUT anropas. Slutligen, om det larmas från kassan och dörrarna samtidigt anropas avbrottssubrutinen CHAOSRUT. (Möjligen kan delar saknas i specifikationen. Begrunda dina antaganden om du gör några.) a) Skriv en initieringssubrutin INIT i MC12-assemblerspråk, som initierar systemet för avbrott. b) Skriv nödvändiga rutiner så att avbrott hanteras korrekt. (9p) Som dokumentation räcker det att du kommentarer de program du skriver. Larmknapp i kassan 1 1D Q C1 CS read E0D1 R Q 1 IRQ Till bit 0, inport E0D5 MC12 Larmknapp dörr 1 1 1D R C1 Q Q 1 Till bit 1, inport E0D5 Larmknapp dörr 2 1 1D R C1 Q Q CS read E0D3 ClrDesk equ $e0d1 Avbrottsvippa vid kassan ClrDoor equ $e0d3 Avbrottsvippa vid dörrarna IrqStatus equ $e0d5 Statusbitar för Avbrottsvippor Both equ 3 Desk equ 1 Door equ 2 INIT psha ldaa ClrDesk Nolla IRQ-vippor ldaa ClrDoor movw #IrqHandler,$fff2 Avbrottsvektor cli pula rts

Maskinorienterad programmering - Tentamen 2009-12-15 4(8) IrqHandler ldaa IrqStaus anda #Both Båda larmen? cmpa #Both bne NotBoth... nej jsr CHAOSRUT ldaa ClrDesk Kvittera båda ldaa ClrDoor bra IrqExit NotBoth bita Desk Larm från Kassan? beq NotDesk... nej jsr DESKRUT ldaa ClrDesk Kvittera bra IrqExit NotDesk jsr DOORRUT Larm från dörren ldaa ClrDoor Kvittera IrqExit rti Uppgift 3 Småfrågor a) Realtidssystem. Vad menas med ett basic block (2p) b) Grafik. Vilket är viktigast för att öka prestanda på ett nytt grafikkort man utvecklar: (1p) c) Seriekommunikation. I kursen diskuterades problem med att bibehålla synkroniseringen mellan sändare och mottagare när man skickar långa sekvenser av data. Hur är detta löst i CAN-protokollet? (2p) d) En avbrottsvektor hittas på adress hittas på adress FFF8/FFF9. Vad har denna för syfte. (2p) e) En C-funktion deklareras enligt följande: int replace( char *str, char c); Antag konventioner som i XCC12, (se bilaga 2). Visa aktiveringsposten i funktionen. (2p) a) Ett stycke kod med en ingång (en label) och en utgång (en branch). Används vid tidsanalys (Se OH:n Realtidssystem) b) Minnesbandbredden (Se OH:n Grafik) c) Mottagaren: Hård synkroniserar på SOF. Synkroniserar på flanker i mottagen data. Sändaren inför Stuff-bitar vid långa sekvenser av nollor och ettor. (Se OH:n CAN) d) IOP. Ha möjlighet att upptäcka/fånga ogiltig operationskod (att programmet spårat ur) e) 2 4 PC msb PC lsb *str msb *str lsb c SP minskande adress

Maskinorienterad programmering - Tentamen 2009-12-15 5(8) Uppgift 4 Under laborationsserien skrev du ett antal rutiner för att styra borrmaskinen. Rutinen OUTZERO var en av dessa. Koda denna rutin i MC12 assemblerspråk enligt följande specifikation. (5p) ************************************** * Subrutin OUTZERO. Läser kopian av borrmaskinens styrord på * adress DCCopy. Nollställer en av bitarna och skriver det nya * styrordet till utporten DCTRL samt tillbaka till kopian DCCopy. * Biten som nollställs ges av innehållet i B-registret (0-7) vid anrop. * Om (B) 7 utförs ingenting. * Anrop: LDAB #bitnummer * JSR OUTZERO * * Bitnumrering framgår av följande figur. 7 6 5 4 3 2 1 0 * Utdata: Inga * Registerpåverkan: Ingen * Anropade subrutiner: Inga ************************************** OUTZERO PSHX PSHA CMPB #7 Exit om B>7 BHI OZExit LDX #BIT Pekare LDAA B,X Hämta bitmönster ANDA DCCopy.. och nollställ STAA DCtrl Ställ ut STAA DCCopy OZExit PULA PULX RTS BIT FCB %11111110,%11111101,%11111011,%11110111 FCB %11101111,%11011111,%10111111,%01111111 Uppgift 5 Skriv en C-funktion med följande deklaration: char *trim(const char *s1, char *s2); Funktionen skall kopiera den text s1 pekar på till det utrymme som pekas ut av s2, men vid kopieringen skall alla inledande och avslutande s.k. vita tecken inte tas med. Med vita tecken menas mellanslag, tabulator och nyradstecken. Tänk på att det kan finnas vita tecken inne i den text som skall kopieras. Dessa tecken skall förstås tas med. Funktionen trim skall som resultat ge en pekare till den trimmade kopian av texten. Du får inte använda dig av några av C:s standardfunktioner, utan du måste skriva allt själv. Tips. Leta först framifrån efter första icke vita tecken. Sök sedan upp slutet på texten och leta därifrån bakåt efter sista icke vita tecken. Kopiera sedan den mellanliggande texten till det utrymme som pekas ut av s2.

Maskinorienterad programmering - Tentamen 2009-12-15 6(8) (7 p) char *trim(const char *s1, char *s2) { const char *p1; char *p2; /* Hoppa över inledande vita tecken */ while (*s1 *s1 == ' ' *s1 == '\t' *s1 == '\n') s1++; /* Leta reda slutet av texten */ for (p1=s1; *p1; p1++) ; /* Sök sista icke-vita tecken */ for (p1--; p1>s1 *p1 == ' ' *p1 == '\t' *p1 == '\n'; p1--) ; /* Kopiera till s2 */ for (p2=s2; s1<=p1;) *p2++ = *s1++; *p2 = '\0'; return s2; } Uppgift 6 a) I realtidskärnan som beskrevs på en av föreläsningarna ingick två avbrottsrutiner. Vilka typer av avbrott tog dessa hand om? ( 1 p) b) I realtidskärnan beskrevs varje process (aktivitet) med hjälp av en struct, av slaget process_struct. Vilken information fanns i en sådan struct? (2 p) a) Software interrupts och avbrott från klockkrets. b) Processens idnummer, processens prioritet, pekare till botten och toppen på processens stack samt tidigaste starttid för processen. Uppgift 7 På kortet ML4, som ingår i laborationsutrustningen, finns bl.a. en stegmotor. Från ett program kan man styra denna motor via porten ML4OUT på adressen 0x400. Från denna port kopplas fyra enpoliga kablar till stegmotorn, på vilken de ansluts till fyra faser som kallas RÖD, BLÅ, GUL och VIT. Kablarna är anslutna till de höga bitarna, b7-b4, på utporten ML4OUT enligt följande schema: Stegmotorns axel fås att rotera genom att man styr ut höga och låga signaler till de olika faserna. För att få stegmotorn att rotera ett steg skall 0V kopplas till två av faserna medan de två andra faserna skall kopplas till +5V. Här motsvarar +5V hög signal, dvs. en etta på ML4OUT och 0V låg signal, en nolla på ML4OUT. Riktningen som stegmotorn roterar framgår av följande tabell.

Maskinorienterad programmering - Tentamen 2009-12-15 7(8) Som tabellen visar finns det fyra tillstånd. Man ansluter först låg nivå (0V) till blå och röd fas samtidigt som faserna gul och vit får en hög nivå (+5V). I nästa tillstånd ändras endast två av faserna, nämligen röd och vit som inverteras. Varje tillståndsövergång innebär att stegmotorn roterar ett steg. Eftersom stegmotorn behöver en viss tid för att rotera ett steg kan man inte byta tillstånd hur fort som helst. Du kan här anta att 10 ms är en tillräckligt lång tid mellan tillståndsbytena. Uppgiften är att i C skriva en programmodul bestående av filerna stegmotor.h och stegmotor.c. I modulen skall det finnas två funktioner: motor_init, som initierar stegmotorn så att den sätts i starttillståndet (= det tillstånd som beskrivs av den första kolumnen i tabellen), och motor_vrid som roterar stegmotorn ett visst antal steg. Funktionen motor_vrid har två parametrar, en som anger antalet steg motorn skall rotera och en som anger om rotationen skall ske medurs eller moturs. Om rotationen skall ske medurs ges denna parameter värdet true annars ges den värdet false. Varje gång funktionen motor_vrid anropas skall motorn börja vrida sig utgående från den position den befinner sig i som resultat av tidigare anrop av funktionen. Du skall också skriva de definitioner som är nödvändiga för att programmet skall kunna komma åt utporten på kortet ML4. I denna uppgift får du förutsätta att funktionen hold som du konstruerade på laborationerna är färdigskriven och kan användas. Den ger som du minns en fördröjning med så många millisekunder som dess parameter anger. (10p) // Filen ports.h #define ML4OUT_ADR 0x400 #define ML4OUT *((portptr) ML4OUT_ADR) // Filen stegmotor.h void motor_init(); void motor_vrid(int antal_steg, int medurs); // Filen stegmotor.c #include "stegmotor.h" #include "ports.h" #include "clock.h" // innehåller deklaration av funktionen hold static port tillstand[] = {0x30, 0xA0, 0xC0, 0x50}; static int aktuellt_tillstand= 0; void motor_init() { aktuellt_tillstand = 0; ML4OUT = tillstand[aktuellt_tillstand]; } void motor_vrid(int antal_steg, int medurs) { int steg = (medurs)? 1 : -1; int i; for (i=0; i<=antal_steg; i++) { aktuellt_tillstand = (aktuellt_tillstand + 4 + steg) % 4; ML4OUT = tillstand[aktuellt_tillstand]; hold(10); } }

Maskinorienterad programmering - Tentamen 2009-12-15 8(8) Bilaga 1 - Assemblerdirektiv för MC68HC12. Assemblerspråket använder sig av mnemoniska beteckningar som tillverkaren Freescale specificerat för maskininstruktioner och instruktioner till assemblatorn, s k pseudoinstruktioner eller assemblerdirektiv. Pseudoinstruktionerna framgår av följande tabell: Direktiv Förklaring ORG N Placerar den efterföljande koden med början på adress N (ORG för ORiGin = ursprung) L RMB N Avsätter N bytes i följd i minnet (utan att ge dem värden), så att programmet kan använda dem. Följden placeras med början på adress L. (RMB för Reserve Memory Bytes) L EQU N Ger label L konstantvärdet N (EQU för EQUates = beräknas till) L FCB N1, N2 Avsätter i följd i minnet en byte för varje argument. Respektive byte ges konstantvärdet N1, N2 etc. Följden placeras med början på adress L. (FCB för Form Constant Byte) L FDB N1, N2 Avsätter i följd i minnet ett bytepar (två bytes) för varje argument. Respektive bytepar ges konstantvärdet N1, N2 etc. Följden placeras med början på adress L. (FDB för Form Double Byte) L FCS "ABC" Avsätter en följd av bytes i minnet, en för varje tecken i teckensträngen "ABC". Respektive byte ges ASCII-värdet för A, B, C etc. Följden placeras med början på adress L. (FCS för Form Caracter String) Bilaga 2: Kompilatorkonvention XCC12: Parametrar överförs till en funktion via stacken. Då parametrarna placeras på stacken bearbetas parameterlistan från höger till vänster. Prolog kallas den kod som reserverar utrymme för lokala variabler. Epilog kallas den kod som återställer (återlämnar) utrymme för lokala variabler. Den del av stacken som används för parametrar och lokala variabler kallas aktiveringspost. Beroende på datatyp används för returparameter HC12 s register enligt följande tabell: Storlek Benämning C-typ Register 8 bitar byte char B 16 bitar word short int D 32 bitar long long int Y/D