Interrupt i Linux/StrongArm 1100

Storlek: px
Starta visningen från sidan:

Download "Interrupt i Linux/StrongArm 1100"

Transkript

1 Interrupt i Linux/StrongArm 1100 Ett kapitel för kursen Wearable Computers D 10 p Namn: Handledare: Björne Lindberg och Ulf Brydsten

2 Innehållsförteckning Innehållsförteckning...2 Inledning...3 Interrupt...3 Linux interrupt API...3 Datastrukturen irq_desc_t...4 Status variabeln...5 Action listan...5 Depth...5 Lock...5 Datastrukturen hw_irq_controller...6 Typename...6 Startup...6 Shutdown...6 Enable...6 Disable...6 Ack...7 End...7 Set_affinity...7 do_irq() funktionen...7 handle_irq_event() funktionen eller do_irq()...7 Filen arch/arm/kernel/entry-armv.s...7 Filen arch/arm/mach-sa1100/irq.c...7 Filen include/asm-arm/arch-sa1100/irqs.h...7 Initiering av interrupthårdvara...8 SoftIRQ och tasklets...8 Interrupt probing...8 SA1100 processorns interrupt...10 Blockdiagram över interruptkontrollern på SA Interruptkontrollerns register...11 Interrupt pending register...11 IRQ pending reg. och FIQ pending reg...13 Mask register ICMR...13 Level register ICLR...14 Control register ICCR...14 Exempel på interrupt drivrutin för SA Drivrutinens funktionalitet...15 Keypad_init...15 Keypad_isr...15 Keypad_do_tasklet...15 mydev_read...15 Applikationens funktionalitet...16 Testkörningar...16 Källkod...17 irqdrv.c...17 Makefile för irqdrv...20 irqapp.c...20 Makefile för irqapp

3 Inledning Detta kapitel är ett delmoment i kursen Wearable Computers D, 10p. Kapitlet ger insikt i hur interrupt hanteras i Linux kärnan och de hårdvaruspecifika delarna av hanteringsprocessen beskrivs för StrongARM processorn SA1100. Kapitlet innehåller källkod för en exempeldrivrutin och en testapplikation, som utför tidmätning för olika delar i interrupthanteringsprocessen. Interrupt Ett interrupt är en signal som skickas till processorn från antingen hårdvara, hårdvaruavbrott, eller programvara, mjukvaruavbrott. Avbrottssignalen innebär en servicebegäran och medför normalt att processorn avbryter det den håller på med och exekverar en så kallad avbrottsrutin som är förutbestämd antingen i kärnan eller i användarens kod. Därefter återgår processorn att exekvera där den höll på då avbrottet skedde. Två olika typer av interrupt finns, interna och externa avbrott. Interna avbrott genereras av processorn själv, dessa används bland annat till att indikera att olika fel har uppstått så att programmeraren kan ta hand om dessa. Externa avbrott sker genom att en yttre enhet påverkar någon av processorns interrupt pinnar. Till externa avbrott räknas även interna timers. Linux interrupt API Linux interrupt API är den del av kärnan som arbetar mot hårdvarans (plattformens) interruptkontroller. Kunskap om interrupt APIn är nödvändig för att kunna porta Linux till en ny hårdvara, utan detta är det omöjligt att uppnå ett fungerande system. Vi börjar med att kolla närmare på de två viktigaste data strukturerna som används för att hantera interrupt i Linux kerneln, irq_desc_t och hw_irq_controller. För att klargöra en del saker kommer kod från Linux kerneln som körs på LART att användas, LART systemet bygger på en SA1100 processor och koden skiljer inte mycket från övriga SA1100 plattformers kod. Bilden nedan demonstrerar interrupthanteringssystemet i Linux. Bilden visar relationer mellan olika datastrukturer och funktioner. Punkterna nedan förklarar de olika stegen i bilden. Interrupt sker Asembler macrona i entry-armv.s exekveras därifrån anropas sedan C funktionen asm_do_irq() med hjälp av följande asembler instruktion bne asm_do_irq. asm_do_irq() funktionen körs, anropar do_irq() funktionen. do_irq() anropar i sin tur do_irq(). do_irq() funktionen anropar varje funktion som ska hantera interruptet, dvs. alla irqaction strukturer loopas genom och varje irqaction.handler exekveras. När exekveringen återgår till asm_do_irq() så exekveras alla väntande interrupt på samma sätt. Slutligen anropas do_softirq() funktionen. 3

4 Datastrukturen irq_desc_t Grundstenen i Linux inerrupthantering är denna datastruktur. En array av denna struktur som heter irq_desc[] håller koll på källan till varje interrupt i Linux. Nedan visas definitionen för irq_desc_t, koden är tagen från include/linux/irq.h i kernelns källkod. /* * This is the "IRQ descriptor", which contains various information * about the irq, including what kind of hardware handling it has, * whether it is disabled etc etc. * * Pad this out to 32 bytes for cache and indexing reasons. */ typedef struct unsigned int status; /* IRQ status */ hw_irq_controller *handler; struct irqaction *action; /* IRQ action list */ unsigned int depth; /* nested irq disables */ spinlock_t lock; cacheline_aligned irq_desc_t; 4

5 Status variabeln Status fältet anger som namnet säger, interruptkällans status. Status kan vara en kombination av ett eller flera av nedanstående bitmönster. En del av dessa statusbitmönster har endast betydelse i en SMP arkitektur, dvs. en multiprocessorarkitektur. Status bitmönster IRQ_INPROGRESS - Interruptet hanteras. IRQ_DISABLED - Interruptet är inte aktiverat. IRQ_PENDING - Interruptet väntar, och bör hanteras. IRQ_REPLAY - Interruptet har mottagits men inte ännu bekräftats. IRQ_AUTODETECT - Håller på med automatisk sökning efter interruptkällan. IRQ_WAITING - Väntar på interrupt från källan, används vid autodetect. IRQ_LEVEL - Interrupt "triggas" på hög/låg flank. IRQ_MASKED - Interruptet är maskerat och är inte vara aktivt. IRQ_PER_CPU - Interruptet har tilldelats en viss CPU, endast vid SMP. Action listan Aktion fältet är en länkad lista med irqaction datastrukturer. Varje struktur i listan håller reda på minnesadressen till interrupthanteringsfunktionen. En ny irqaction struktur läggs till i listan varje gång request_irq() funktionen anropas. Nedan visas hela datastrukturen irqaction, koden tagen från filen include/linux/interrupt.h struct irqaction void (*handler)(int, void *, struct pt_regs *); unsigned long flags; unsigned long mask; const char *name; void *dev_id; struct irqaction *next; ; Fältet irq.handler pekar på den funktion som ska exekveras då ett visst hårdvaruinterrupt sker, och har ingen som helst vetskap om varför eller vad som gjorde att interruptet skedde. Detta gör att ineterruptdrivna drivrutiner är mycket enkla att porta mellan olika arkitekturer. Depth Detta fält har uppkommit på grund av att en del systems interruptkontrollers inte gillar upprepade enable/disable av interrupt eller att dessa sker i obalans. Så depth fältet håller alltså reda på enable/disable anrop av ett visst interrupt och ser till att dessa hålls i balans. Lock Detta fält har betydelse i multiprocessor system och kan alltså låsa strukturen så den inte behandlas av flera processorer. 5

6 Datastrukturen hw_irq_controller Varje interruptbeskrivning i irq_desc_t innehåller fältet handler, detta fält refererar till en hw_irq_controller struktur. Definitionen av hw_irq_controller strukturen finns i filen include/linux/irq.h och visas här nedanför. /* * Interrupt controller descriptor. This is all we need * to describe about the low-level hardware. */ struct hw_interrupt_type const char * typename; unsigned int (*startup)(unsigned int irq); void (*shutdown)(unsigned int irq); void (*enable)(unsigned int irq); void (*disable)(unsigned int irq); void (*ack)(unsigned int irq); void (*end)(unsigned int irq); void (*set_affinity)(unsigned int irq, unsigned long mask); ; typedef struct hw_interrupt_type hw_irq_controller; Typename Fältet typename innehåller en kort namnbeskrivning av arkitekturens interruptkontroller, detta textfält används i bl.a. Linux /proc katalogen för att visa kontrollerspecifik information. Startup Kerneln anropar kontrollerns startup() funktion då en drivrutin gör förfrågan efter ett visst interrupt via funktionen request_irq() eller när interrupt initieras med autodetect. Startup() är rent funktionellt identisk med enable-funktionen förutom att startup tar bort eventuella köande/väntande interrupt, medan enable inte gör det. I inbyggda Linuxssystem som har en interruptkontroller som inte köar upp interrupt så är startup() och enable() funktionerna samma i drivrutinen för systemets interruptkontroller. Shutdown Precis som namnet säger så stänger denna funktion ner ett interrupt i interruptkontrollern. Funktionen anropas även då en drivrutin gör free_irq(). Shutdown funktionen är ofta samma funktion som disable() funktionen. Enable Denna funktion informerar systemets interruptkontroller om att aktivera den efterfrågade interruptkanalen. Disable Funktionen informerar systemets interruptkontroller att inaktivera ett visst interrupt. 6

7 Ack Kerneln anropar interrupkontrollerns ack() funktionen genast ett interrupt dyker upp, före detta behandlas. Vissa kontroller använder sig inte av denna funktion medan en del andra mappar ack() funktionen till disable(), så att inte ett nytt interrupt kan ske på samma kanal innan det föregående har behandlats. End När kerneln har behandlat ett interrupt anropas denna funktion i interruptkontrollerns drivrutin, kontrollern förväntas därmed ställa in sig så att nya interrupt kan ske på kanalen. Precis som i föregående funktion mappas denna funktion ibland till enable() av samma orsak. Set_affinity I SMP arkitekturer används denna funktion till att bestämma vilken CPU som ska behandla interruptet. Funktionen används inte i enprocessorsystem. do_irq() funktionen Linuxkärnans inblandning i interrupt- och undantagshanteringen börjar i och med denna funktion, som anropas via processorns interrupt request handler. Källkoden för do_irq() funktionen på SA1100 systemet finns i filen arch/arm/kernel/irq.c Normalt är det väldigt små skillnader i olika arkitekturers do_irq() funktion, för i stort sett manipuleras endast irq_desc_t strukturer i funktionen. Den riktiga hanteringen av interrupt sker i funktionen handle_irq_event() som i SA1100 arkitekturen har fått namnet do_irq(). handle_irq_event() funktionen eller do_irq() Då do_irq() funktionen har identifierat interruptet skickas listan med interrupthanteringsfunktioner till denna funktion, för vidare behandling. Härifrån anropas varje interrupthanteringsfunktion för alla interrupt som ska behandlas. Med andra ord funktionerna som har skrivits för interrupthantering i drivrutiner för en viss hårdvara. Exempel på detta visas i källkoden till exempeldrivrutinen längre fram i kapitlet. Filen arch/arm/kernel/entry-armv.s I denna fil finns maskinspecifika interruptfunktioner. Koden i denna fil är skriven i assembler och här läses av vilka interrupt som har skett varvid C funktionen asm_do_irq() anropas som i sin tur sedan anropar do_irq. Filen arch/arm/mach-sa1100/irq.c I denna fil finns bland annat funktionen SA1100_init_irq(), funktionen initierar hårdvarans interruptkontroller. I filen finns också funktionerna mask_irq() och unmask_irq() mfl. Filen include/asm-arm/arch-sa1100/irqs.h I denna fil definieras alla IRQ nummer för samtliga interrupt på SA1100 processorn. 7

8 Initiering av interrupthårdvara Kerneln initierar interruptkontrollerns hårdvara genom funktionen init_irq() som anropas från funktionen start_kernel(). Implementationen av init_irq() finns alltid i de arkitekturspecifika delarna av kernel koden, för SA1100 finns funktionen i filen arch/arm/mach-sa1100/irq.c. Och start_kernel() finns i init/main.c SoftIRQ och tasklets Softirq körs skilt från hårdvaruinterrupt i Linux kärnan. Softirq fungerar så länge interrupt är aktiverat i systemet, softirq ersätter bottom-half strategin som användes i äldre linux kärnor (2.2), vilket inte kommer att behandlas i detta kapitel. Softirq körs på varje processor i systemet om det är ett multiprocessorsystem. Tasklet är som ett softirq, förutom att detta körs enbart på en processor, även om systemet tillhandahåller fler. Ordet tasklet är aningen vilseledande eftersom detta inte har något med aktiva processer i operativssytemet att göra. Exempel på tasklet visas i exempeldrivrutinen längre fram i kapitlet. Softirq och tasklets är implemnterad i kärnan med sina egna datastrukturer och funktioner, och är i princip helt hårdvaruoberoende så länge kernelns do_irq() funktion anropar do_softirq() funktionen, detta görs i ARM arkitekturen. Aktiva softirq och tasklets hanteras av ksoftirqd tråden. Interrupt probing Linux kärnan tillhandahåller funktioner för interrupt probing, dvs automatikst avgöra vilken interrupt kanal en viss hårdvara är bunden till. Denna funktionalitet kan användas av drivrutiner via funktionerna probe_irq_on() och probe_irq_off(). När en drivrutin ska söka efter interrupt kanalen anropas först probe_irq_on() för att meddela kerneln om att probing ska inledas. Sedan anropar drivrutinen något i hårdvaran som "tvingar" den att ge ifrån sig ett interrupt. Och slutligen anropas probe_irq_off() vilken returnerar interruptkanalen som används för hårdvaran. 8

9 Kodexempel med IRQ probing: void mydrvprobeirq() unsigned long mask; int irq, retry=5; while (retry--) mask = probe_irq_on(); /* Gör något med hårdvaran som tvingar den att ge ifrån sig ett interrupt */ irq = probe_irq_off(mask); if (irq <= 0) printk(kern_info ": Could not find interrupt line."); else printk(kern_info ": Found interrupt line %d", irq); if (irq > 0) if (request_irq(irq, &my_isr, SA_INTERRUPT, "my_isr", NULL)) else printk(kern_info ": Bind IRQ error"); printk(kern_info ": Bind IRQ done"); break; 9

10 SA1100 processorns interrupt SA1100 processorns interruptkontroller makserar alla interrupt oavsett om dessa är FIQ (Fast IRQ) eller IRQ interrupt och kombinerar dessa till. Interrupthanteringen i SA1100 är indelad i två delar. Lägsta nivån av hanteringsprocessen representeras av interruptkontrollerns IRQ pending register (ICIP) och FIQ pending registret (ICFP), dessa register innehåller alla aktiverade och omaskerade interruptkällor. Interrupten som är aktiverade i sin hårdvara görs synliga via interruptkontrollerns mask register (ICMR). ICIP registret innehåller alla interrupt som är programmerade att generera ett IRQ avbrott och ICFP innehåller alla FIQ avbrott som har aktiverats. Valet av ICIP eller ICFP sköts genom att programmera registret ICLR level register. Andra nivån av hanteringsprocessen är egentligen hårdvaran som genererar interrupten. Normalt så kombineras flera interrupt från denna nivå (genom en ELLER procedur) och skickas vidare till första nivån. Vanligtvis kan källan till interruptet avläsas via två register, ICIP eller ICFP beroende på vilken interrupthanterare som körs i mjukvaran (Linux kerneln) för tillfället. När processorn är i idle mode så kommer varje interrupt att väcka upp den igen, interrupt mask registret ignoreras när systemet är idle. Blockdiagram över interruptkontrollern på SA

11 Interruptkontrollerns register SA1100 processorns interruptkontroller består av fyra olika register. ICIP, IRQ pending register. ICFP, FIQ pending register. ICMR, Mask register. ICLR, Level register, väljer IRQ eller FIQ. Vid reset av processorn så inaktiveras ICIP och ICFP registren och de övriga har okänt innehåll, alltså måste interruptkontrollern initieras. Interrupt pending register ICPR är ett 32-bitars läsbart register som visar alla aktiva interrupt i systemet. Dessa bitar påverkas inte av mask registret (ICMR). Nedanstående tabell visar alla fält i registret, samt deras interruptkälla och andra nivåns källa. 11

12 Som man kan se i tabellen så har flera fält i detta register fler än en interruptsignal. När ett interrupt kommer från en av dessa kan interrupthanteringsrutinen avläsa vilken enhet som gav upphov till interruptet, men inte den exakta källan. För att få fram exakta källan måste rutinen läsa av enhetens status och därifrån avgöra vad som ledde till interrupt. För alla interrupt som bara har en källa kan dessa avläsas direkt. 12

13 IRQ pending reg. och FIQ pending reg. ICIP och ICFP innehåller en flagga per interrupt, totalt 32, som indikerar att ett interrupt har skett. I interruptrutinerna läses ICIP och ICFP av för att avgöra vilket/vilka interrupt som skett. Bitarna är endast läsbara. Tabellerna nedan visar ICIP- respektive ICFP bitarnas placeringar i registren. Mask register ICMR ICMR registret innehåller en maskbit för varje interrupt som väntar, maskbiten kontrollerar om det väntande interruptet ska generera ett processor interrupt eller om det ska ignoreras. När ett väntande interrupt aktiveras sänds det till processorn endast om motsvarande bit i ICMR är satt till en 1:a. Om processorn är i idle-mode så ignoreras masken helt och hållet. Maskbitarna är främst till nytta då systemet vill ha prioritet på interrupten, då kan ett interrupt av lägre prioritet maskas bort ifall interrupt av högre prioritet ännu inte har behandlats. 13

14 Level register ICLR ICLR registret styr om interruptet ska behnadlas som IRQ eller FIQ (Fast IRQ, detta används mycket sällan och funkar inte speciellt bra i Linux). Om ett väntande interrupt är omaskerat så läses motsvarande ICLR bit av för att avgöra vilket sorts interrupt som ska genereras. ICLR bitarna har ingen betydelse för maskerade interrupt. Control register ICCR ICCR registret innehåller endast en kontrollbit, disable idle mask bit (DIM). Om denna bit är satt till en 1:a förhindrar den att alla interrupt kan väcka processorn ur idle mode. Istället kan endast de interrupt som inte är maskerade väcka processorn. 14

15 Exempel på interrupt drivrutin för SA1100 Detta kodexempel illustrerar hur interrupt används i en linuxdrivrutin för SA1100 processorn. Drivrutinen använder sig av IRQ_GPIO9, vilket är interruptet som kan genereras på GPIO pinne nummer 9. Valet av just denna pinne var endast på grund av att den var den första lediga pinnen på mitt system just nu. Alltså det går lika bra att byta ut denna till någon av IRQ pinnarna. Många namn i drivrutinen har inget att göra med drivrutinens uppgift, detta på grund av att jag har modifierat en drivrutin för knapparna som jag redan hade skrivit. För att kunna köra denna drivrutin måste ett en device skapas i /dev katalogen på SA1100 systemet. På LART systemet görs detta t.ex. på följande sätt. Mounta en färdig ramdisk på värddatorn genom följande kommando mount o loop rdisk /mnt/rd Skapa en ny device på ramdisken med major-nummer 43 och namnet keypad. mknod /mnt/rd/dev/keypad c 43 0 Kopiera in den kompilerade drivrutinen irqdrv.o och applikationen irqapp till ramdisken. Umounta ramdisken, packa ihop den och skicka den till LART systemet. Drivrutinens funktionalitet Denna drivrutin har till uppgift att mäta hur lång tid det tar från det att ett interrupt har kommit till interrupthanteringsfunktionen tills det att den når applikationen som använder drivrutinen. Keypad_init Drivrutinen fungerar så att när den laddas in i systemet, med kommandot insmod irqdrv.o så körs funktionen keypad_init(). Denna funktion registrerar devicen /dev/keypad och kopplar filoperationerna till den. Sedan ställer drivrutinen in GPIO_GPIO9 att trigga på fallande flank med hjälp av funktionen set_gpio_irq_edge efter det görs en förfrågan om att få IRQ kanal IRQ_GPIO9. Och funktionen keypad_isr kopplas som interrupthanteringsfunktion. Keypad_isr Denna funktion kommer nu att exekvera så fort GPIO9 går låg i den här funktionen skrivs nuvarande tid ut i sekunder och mikrosekunder, samt antalet interrupt. I funktionen scheduleras en tasklet funktion som ska köras så fort den får tid. Keypad_do_tasklet Tasklet funktionen gör samma sak som interrupthanteraren, alltså skriver ut tiden. Så att man kan se skillnaden i tid mellan dessa två funktioner. Dessutom säger den till läskön att väckas upp med funktionen wake_up_interruptible(&keypad_queue); mydev_read Denna funktion körs så fort applikationen försöker läsa från drivrutinen. Men i funktionen sätts den att sova tills den väcks upp av ett interrupt på GPIO9, detta görs med hjälp av denna funktion interruptible_sleep_on(&keypad_queue); Och i detta exempel skrivs bara en 1:a till applikationen då den väcks upp av interrupt. 15

16 Applikationens funktionalitet Denna applikation är mycket enkel och använder sig alltså av devicen /dev/keypad för att kommunicera med drivrutinen. Då applikationen körs öppnas /dev/keypad för läsning. Sedan anropas funktionen read för att läsa från drivrutinen. Eftersom drivrutinen använder interruptible sleep så väntar applikationen tills drivrutinen väcks upp av ett interrupt. Då läsningen är klar skriver applikationen ut tiden, som nu kan jämföras mot tiderna från drivrutinen och totala fördröjningen kan räknas ut. Testkörningar Ladda drivrutinen insmod irqdrv.o Using irqdrv.o keypad initializing driver... (Följande utskrifter är modifieringar i kerneln (hacks) för att se vad som händer, alltså inget som visas normalt med standard kärna.) irq: 0 gpio_mask: 512. irq: 1 gpio_mask: 256. irq: 2 gpio_mask: 128. irq: 3 gpio_mask: 64. irq: 4 gpio_mask: 32. irq: 5 gpio_mask: 16. irq: 6 gpio_mask: 8. irq: 7 gpio_mask: 4. irq: 8 gpio_mask: 2. irq: 9 gpio_mask: 1. irg_desc[9] is now valid. irq Request IRQ returned 0 drv: Bind IRQ done [[[root@mp3machine:~]]] Generera interrupt på GPIO9 time value in keypad_isr : interrupt count in keypad_isr : 1 time value in keypad_do_tasklet : interrupt count in keypad_do_tasklet : 1 time value in keypad_isr : interrupt count in keypad_isr : 2 time value in keypad_do_tasklet : interrupt count in keypad_do_tasklet : 2 time value in keypad_isr : Starta applikationen och generera interrupt [[[root@mp3machine:~]]]./irqapp opened keypad app opened /dev/keypad time value in keypad_isr : interrupt count in keypad_isr : 6 time value in keypad_do_tasklet : interrupt count in keypad_do_tasklet : 6 time value in app : released keypad [[[root@mp3machine:~]]] 16

17 Källkod irqdrv.c #if defined(config_modversions) #define MODVERSION #include <linux/modversions.h> #endif #include <linux/config.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/slab.h> #include <asm/segment.h> #include <asm/uaccess.h> #include <asm/hardware.h> #include <linux/fs.h> #include <asm/delay.h> #include <asm/irq.h> #include <linux/sched.h> #include <linux/mm.h> #include <linux/sysctl.h> #include <linux/timer.h> #include <linux/tqueue.h> #include <linux/interrupt.h> #define DRIVER_NAME "keypad" #define MYDEV_MAJOR 43 long interrupt_cnt = 0; */ /*A global variable for counting interrupts, /* MyDEV File operations*/ static int mydev_open(struct inode *inode, struct file *filp); static int mydev_release(struct inode *inode, struct file *filp); static ssize_t mydev_write(struct file *filp, const char *buf, size_t count, loff_t *f_pos); static ssize_t mydev_read(struct file *filp, char *buf, size_t count, loff_t *f_pos); static int mydev_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); static void keypad_isr(int irq, void *dev_id, struct pt_regs *regs); void keypad_do_tasklet(unsigned long unused); DECLARE_TASKLET(keypad_tasklet, keypad_do_tasklet, 0); /*The tasklet list we put our*/ DECLARE_WAIT_QUEUE_HEAD(keypad_queue); /*The queue we put read to sleep in*/ static struct file_operations mydev_fops = read: mydev_read, write: mydev_write, ioctl: mydev_ioctl, open: mydev_open, release: mydev_release, ; 17

18 static int mydev_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) // Nothing here... return 0; static ssize_t mydev_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) int retvalue; unsigned char *kbuf, *ptr; retvalue = count; /*Sleeps until next interrupt wakes it*/ interruptible_sleep_on(&keypad_queue); kbuf = kmalloc(count, GFP_KERNEL); if (!kbuf) return -ENOMEM; ptr = kbuf; // Just return 1 when app is reading. *ptr = 1; copy_to_user(buf, kbuf, retvalue); kfree(kbuf); return retvalue; static ssize_t mydev_write(struct file *filp, const char *buf, size_t count, loff_t *f_pos) int retvalue = count; unsigned char *kbuf; kbuf = kmalloc(count, GFP_KERNEL); if (!kbuf) return -ENOMEM; if(copy_from_user(kbuf, buf, count)) return -EINVAL; printk("<1>recieved %d elements\n", count); kfree(kbuf); return retvalue; static int mydev_open(struct inode *inode, struct file *filp) MOD_INC_USE_COUNT; printk("<1>opened keypad\n"); return 0; static int mydev_release(struct inode *inode, struct file *filp) 18

19 MOD_DEC_USE_COUNT; printk("<1>released keypad\n"); return 0; int keypad_init() int result; printk(driver_name " initializing driver...\n"); result = register_chrdev(mydev_major, "keypad", &mydev_fops); if (result < 0) printk("<1>keypad: can't get major nr\n"); return result; // Interrupt /* Enable GPIO as interrupt line */ GPDR &= ~GPIO_GPIO9; set_gpio_irq_edge(gpio_gpio9, GPIO_FALLING_EDGE); // Allocate the IRQ result = request_irq(irq_gpio9, &keypad_isr, SA_INTERRUPT, "keypad_int", NULL); printk(kern_info " Request IRQ returned %d\n", result); if (result) printk(kern_info ": Bind IRQ error\n"); else printk(kern_info ": Bind IRQ done\n"); return 0; void keypad_cleanup() free_irq(irq_gpio9, NULL); printk(driver_name " cleaning up...\n"); unregister_chrdev(mydev_major, "keypad"); static void keypad_isr(int irq, void *dev_id, struct pt_regs *regs) struct timeval tv; do_gettimeofday(&tv); printk(kern_info "time value in keypad_isr : %ld.%ld\n", tv.tv_sec, tv.tv_usec); tasklet_schedule(&keypad_tasklet); interrupt_cnt++; printk(kern_info "interrupt count in keypad_isr : %ld\n", interrupt_cnt); 19

20 void keypad_do_tasklet(unsigned long unused) struct timeval tv; wake_up_interruptible(&keypad_queue); do_gettimeofday(&tv); printk(kern_info "time value in keypad_do_tasklet : %ld.%ld\n", tv.tv_sec, tv.tv_usec); printk(kern_info "interrupt count in keypad_do_tasklet : %ld\n", interrupt_cnt); module_exit(keypad_cleanup); module_init(keypad_init); Makefile för irqdrv TARGET = arm-linux- CC = $(TARGET)gcc LD = $(TARGET)ld NM = $(TARGET)nm INCLUDE = /home/pontus/stuff/lart/linux/include CFLAGS =-c -Wall -O2 -D KERNEL -DMODULE -I$(INCLUDE) LFLAGS = all: irqdrv.o $(NM) lcd.o >./syms clean: rm irqdrv.o rm syms irqdrv.o: irqdrv.c $(CC) $(CFLAGS) irqdrv.c -o irqdrv.o irqapp.c #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <string.h> #include <sys/time.h> int main(int argc, char *argv[]) char key; struct timeval tv; struct timezone tz; int fd = open("/dev/keypad", O_RDWR); if(fd == -1) perror("open"); 20

21 return 1; printf("app opened /dev/keypad\n"); read(fd, &key, 1); gettimeofday(&tv, &tz); printf("time value in app : %ld.%ld\n", tv.tv_sec, tv.tv_usec); close(fd); return 0; Makefile för irqapp CC = arm-linux-gcc CFLAGS = -g -O2 -Wall BIN = irqapp OBJS = irqapp.o HEADERS = all: $(BIN) $(BIN): $(OBJS) $(CC) $(OBJS) -o $(BIN) $(OBJS): %.o: %.c $(HEADERS) $(CC) $(CFLAGS) -c $< -o $@ #install: # install $(bin) /usr/bin clean: rm -f $(OBJS) $(BIN) *~ core 21

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010 Programsystemkonstruktion med C++: Övning 1 Karl Palmskog palmskog@kth.se september 2010 Programuppbyggnad Klassens uppbyggnad en C++-klass består av en deklaration och en definition deklaration vanligtvis

Läs mer

(Lösningsförslag finns sist i denna fil.)

(Lösningsförslag finns sist i denna fil.) (Lösningsförslag finns sist i denna fil.) Läser externa signaler. Har 64 ingångar (kanaler), från 0 till 63. Kan bara avläsa en ingång i taget. Avlästa värdet positivt 16-bitars tal. Varje läsning tar

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

Raspberry Pi och Tellstick, ett program i C.

Raspberry Pi och Tellstick, ett program i C. Raspberry Pi och Tellstick, ett program i C. Ett program skrivet i C för att med Tellstick tända och släcka en eller flera lampor. Programmet startas med kommandot: /home/pi/development/cprog/tellstick/tellstick-13

Läs mer

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser Namn: Laborationen godkänd: Digitala system 15 hp AVR 3 - datorteknik LTH Ingenjörshögskolan vid Campus Helsingborg Avbrott. Syften med den här laborationen är att introducera avbrott. Avbrott som uppkommer

Läs mer

Maskinorienterad programmering

Maskinorienterad programmering Externa avbrott Anslutning av extern avbrottsvippa, programmering med konfigurering och hantering av externa avbrott. Introduktion till time-sharing, enkel task-switch. Ur innehållet: NVIC och EXTI (SYSCFG)

Läs mer

F8: Undantagshantering

F8: Undantagshantering F8: Undantagshantering Undantagshantering i 68 Vad är ett undantag? Typer av undantag Att skriva undantagsrutiner Undantagshantering, vad och varför? Exempel: Ett system ska mäta temperatur var :e sekund

Läs mer

... Funktionsanrop. Vad händer när man kör ett program?

... Funktionsanrop. Vad händer när man kör ett program? Vad händer när man kör ett program? När man kompilerar ett program och sedan länkar ihop det så stoppar länkaren in lite extra kod i programmet. Det är denna kod som i sin tur anropar main-funktionen ungefär

Läs mer

Operativsystem IS1350

Operativsystem IS1350 Operativsystem IS1350 LAB 2 2011-09-26 Förberedelser: Läs igenom labhäftet. Gör uppgifterna i förväg, använd labtiden till att ställa frågor om du kört fast. Läs igenom tipsen om kärnakompilering på http://bobcares.com/

Läs mer

Realtidsstöd i Minix. En laborationrapport. Oktober 2012

Realtidsstöd i Minix. En laborationrapport. Oktober 2012 Realtidsstöd i Minix En laborationrapport Karl Zylinski Hampus Gustafsson Oktober 2012 1 Innehåll 1 Introduktion 3 1.1 Problem................................ 3 1.1.1 Skapa ett testprogram....................

Läs mer

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00 Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-04-16 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas

Läs mer

LEU240 Mikrodatorsystem

LEU240 Mikrodatorsystem Institutionen för data- och informationsteknik 2011-10-11 LEU240 Mikrodatorsystem Vi har tidigare i olika sammanhang sett att det är önskvärt att kunna använda ett högnivåspråk som C för att skriva program

Läs mer

printenv sort pager printenv grep args sort pager

printenv sort pager printenv grep args sort pager 1 Problembeskrivning Uppgiften var att skriva ett program, digenv för att visa miljövariabler. programmet vara ekvivalent med att köra: Kört utan argument så skulle printenv sort pager och kört med argument

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

F6: I/O hantering. Typer av I/O i ett datorsystem. Protokoll för synkronisering. Drivrutiner. Memory mapped Port mapped. Polling Timed Interrupt DMA

F6: I/O hantering. Typer av I/O i ett datorsystem. Protokoll för synkronisering. Drivrutiner. Memory mapped Port mapped. Polling Timed Interrupt DMA F6: I/O hantering Typer av I/O i ett datorsystem Memory mapped Port mapped Protokoll för synkronisering Polling Timed Interrupt DMA Drivrutiner 1 Memory mapped I/O enheter avkodas precis som ett minne

Läs mer

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

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) 1. 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

Läs mer

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 13 mars 2013, klockan 14:00 19:00 i Vic 2 A-D, 3 A-C. Tillåtna hjälpmedel: på tentan utdelad

Läs mer

Hur man kompilerar och kör IT++-program med MinGW. 1 Sammanfattning. 2 Om dokumentet. 3 Om min konfiguration

Hur man kompilerar och kör IT++-program med MinGW. 1 Sammanfattning. 2 Om dokumentet. 3 Om min konfiguration 1 (12) Hur man kompilerar och kör IT++-program med MinGW 1 Sammanfattning Detta dokument visar hur man lätt (med några få extra raders kod) kan få IT++ att bli kompatibelt med kompilatorn MinGW. Med den

Läs mer

Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK.

Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK. Tomas Nordström Högskolan i Halmstad Dokumentversion 0.1, 2012-04- 01 Beskrivning av porthantering i mikroprocessorn SAM3U som används på vårt labkort SAM3U- EK. Informationen till detta kompendium är

Läs mer

Tentamen *:58/ID100V Programmering i C Exempel 3

Tentamen *:58/ID100V Programmering i C Exempel 3 DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst

Läs mer

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne Programallokering Att placera program i flashrespektive RAM-minne Program i FLASH-minne Bara lokala variabler Globala oinitierade variabler Globala initierade variabler Program med avbrott Program i RAM-minne

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 6: Filhantering Henrik Björklund Umeå universitet 13 oktober 2009 Björklund (UmU) Programmeringsteknik 13 oktober 2009 1 / 22 Textfiler Filer är sekvenser

Läs mer

Datorteknik 2 (AVR 2)

Datorteknik 2 (AVR 2) Namn: Laborationen godkänd: Digitala system 15 hp Datorteknik 2 (AVR 2) LTH Ingenjörshögskolan vid Campus Helsingborg Enkel in- och utmatning. Drivrutiner. Bithantering. I denna laboration ska vi förbättra

Läs mer

Operativsystem ID1200/06 Tentamen :00-18:00

Operativsystem ID1200/06 Tentamen :00-18:00 Operativsystem ID1200/06 Tentamen 2018-01-12 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Svaren skall lämnas på dessa sidor,

Läs mer

Varför behövs det? I Allegro finns t.ex. stöd för:

Varför behövs det? I Allegro finns t.ex. stöd för: Allegro Introduktion Översikt vad är Allegro? Vad är lib och h-fil Kolla kodexempel Strukturen på ett Allegrospel Hur kommer jag igång? Var kan jag läsa mer Addons Alternativ Vad är Allegro? Ett spelprogrammeringsbibliotek

Läs mer

Att använda pekare i. C-kod

Att använda pekare i. C-kod Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare

Läs mer

Information Coding / Computer Graphics, ISY, LiTH CUDA. En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk

Information Coding / Computer Graphics, ISY, LiTH CUDA. En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk CUDA En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk Minnesareor och minnesaccess Delat minne Exempel CUDA = Compute Unified Device Architecture Utvecklat av NVidia

Läs mer

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet Vad händer när man kör ett program? Program och processer När man kompilerar ett program och sedan länkar ihop det så stoppar länkaren in lite extra kod i programmet. Det är denna kod som i sin tur anropar

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #19 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Normaltillstånd vs undantagstillstånd I normaltillstånd

Läs mer

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare Funktionspekare, inledning: funktionsanropsmekanismen Vid funktionsanrop läggs aktuella argumentvärden och återhoppsadressen på stacken, därefter sker ett hopp till adressen för funktionens första instruktion.

Läs mer

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar. ATMega16 Laborationer av Kjell 2 Rev:5 Datum: 29.09.2010 Page 1 of 7 Laboration 4: Knappstuds Drivrutiner för att eliminera störningar. Inledning: Laborationskortet EasyAVR6 har bland annat tryckknappar

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

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen

Läs mer

Synkronisering - Semaforen. Om att vänta men inte i onödan

Synkronisering - Semaforen. Om att vänta men inte i onödan Synkronisering - Semaforen Om att vänta men inte i onödan Dörrvakten Har order uppifrån pga brandregler: Släpp in max 40 personer Garanterar att det aldrig är fler insläppta än order angivit Kommer fler

Läs mer

Föreläsning 3. Programmering, C och programmeringsmiljö

Föreläsning 3. Programmering, C och programmeringsmiljö Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator

Läs mer

Tentamen. Datorteknik och realtidssystem

Tentamen. Datorteknik och realtidssystem Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2017-01-09 Lokal U1 Tid 08-12 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal frågor 5 Antal sidor (inklusive

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

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

#include <stdio.h> #include <string.h>

#include <stdio.h> #include <string.h> #include #include void fun(char s[]) int i=-1; while(s[++i]!=0) if('a'

Läs mer

Effektpedal för elgitarr

Effektpedal för elgitarr EITF11 - Digitala Projekt Effektpedal för elgitarr Handledare: Bertil Lindvall Ivan Rimac (I05) Jimmy Lundberg (I08) 2011-05-10 Contents Bakgrund... 3 Kravspecifikation... 3 Kravspecifikation Effektpedal...

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING Systemkonstruktion LABORATION REALTIDSPROGRAMMERING Laborationsansvariga: Anders Arvidsson, Björn Lundblad Utskriftsdatum: 2002-10-31 Laboranter: 1 Syfte Denna laboration syftar till att öva användningen

Läs mer

En klass behöver både deklaration och definition. Daniel Aarno Globala funktioner och variabler är OK.

En klass behöver både deklaration och definition. Daniel Aarno Globala funktioner och variabler är OK. 2 1 0 / ) - & 9 > ; 7 * ( ) ) En klass behöver både deklaration och definition Deklaration i h (hh) och definition i cc (cpp) Private är förvalt Student::learn() Student::Student() Student::~Student()

Läs mer

CPU. Carry/Borrow IX. Programräknare

CPU. Carry/Borrow IX. Programräknare Laboration:. Jämförelser mellan assembler och C. CPU ACCA ACCD ACCB 8-bitars ackumulatorer eller 16- bitars ackumulator CCR 1 1 1 SXH I NZVC Flaggregister Carry/Borrow IX IY PC Indexregister X Indexregister

Läs mer

Tentamen PC-teknik 5 p

Tentamen PC-teknik 5 p Tentamen PC-teknik 5 p Namn:. Klass:... Program: Di2, Em3, Et3 Datum: 03-08-15 Tid: 13:30-18:30 Lokal: E171 Hjälpmedel: Linjal, miniräknare, Instruktionsrepertoar för 8086 (utdelas), Lathund, Pacific C

Läs mer

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

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Torsdagen den 13 mars 2014, klockan 14:00 19:00 i MA:10. Tillåtna hjälpmedel: på tentan utdelad formelsamling,

Läs mer

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser Innehåll Operativsystem Vad är operativsystem och hur fungerar de Vad är ett OS? Syfte Att tillåta flera program att köra samtidigt Att fungera som ett abstraktionslager mot hårdvaran Att hantera olika

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

Programsystemkonstruktion med C++

Programsystemkonstruktion med C++ Programsystemkonstruktion med C++ Övning 1 Daniel Aarno bishop@kth.se Översikt övning 1 Kompilering och länkning Makefile Preprocessordirektiv Funktioner Funktionen main() Datatyper Minneshantering Pekare

Läs mer

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok Namn: Laborationen godkänd: Laboration 2. Cacheminne Laborationens syfte I laborationen ska du bekanta dig med cacheminnen. Genom laborationen fås kunskap om hur cacheminnen är konstruerade och hur de

Läs mer

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts)

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts) Mål Datorteknik Föreläsning 4 Att känna till begreppet polling (cyklisk avfrågning) och hur det implementeras Att förstå varför avbrottstyrd exekvering är överlägset polling Att veta vilken information

Läs mer

Övning från förra gången: readword

Övning från förra gången: readword (9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver

Läs mer

Institutionen för elektro- och informationsteknologi, LTH

Institutionen för elektro- och informationsteknologi, LTH Datorteknik Föreläsning 4 Polling och avbrott Mål Att känna till begreppet polling (cyklisk avfrågning) och hur det implementeras Att förstå varför avbrottstyrd exekvering är överlägset polling Att veta

Läs mer

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 - Inbyggda system - Analog till digital signal - Utvecklingssystem, målsystem - Labutrustningen - Uppbyggnad av mikrokontroller - Masinkod, assemblerkod

Läs mer

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning Övning 3 i 2D1324 Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning Avancerad c-programering och repetition Typisk h-fil #ifndef special_a

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

Polling (cyklisk avfrågning) Avbrott

Polling (cyklisk avfrågning) Avbrott Polling (cyklisk avfrågning) Avbrott Större delen av materialet framtaget av :Jan Eric Larsson, Mats Brorsson och Mirec Novak IT-inst LTH Att känna till begreppet polling (cyklisk avfrågning) och hur det

Läs mer

Föreläsning 2. Operativsystem och programmering

Föreläsning 2. Operativsystem och programmering Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data

Läs mer

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe Kodningskonventioner Viktor Kämpe Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK

Läs mer

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte CT3760 Mikrodatorteknik Föreläsning 4 Tisdag 2005-09-06 Stacken I datasammmanhang är en stack ett minnesområde. Det är processorn som använder stacken. För att skapa en stack anger man en adress i stackpekarregistret.

Läs mer

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen

Läs mer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio Ditt första C#-program med Visual Studio Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så

Läs mer

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00 Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-04-16 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas

Läs mer

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström DST 1 Nicholas Wickström IDE, Högskolan i Halmstad 2009 1 Outline 1 Vad är Hårdvara? (Datorsystemmodell; processor m. periferi, IO, Minne) Typiskt för hårdvarunära programmering (datablad, register, datastrukturer,...)

Läs mer

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts.

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts. Den första datormusen Douglas Englebart, 1968. programmering i GLUT Gustav Taxén CID gustavt@nada.kth.se In- och utenheter Alla datorsystem har in- och utenheter som behandlar information. Data skickas

Läs mer

Repetition C-programmering

Repetition C-programmering Repetition C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. Repetition

Läs mer

Datorsystemteknik Föreläsning 7DAVA14

Datorsystemteknik Föreläsning 7DAVA14 Datorsystemteknik Föreläsning 7DAVA14 Innehåll Introduktion (forts) Polling (cyklisk avfrågning) Större delen av materialet framtaget av :Jan Eric Larsson, Mats Brorsson och Mirec Novak IT-inst LTH Exempel

Läs mer

Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4

Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4 Avbrott Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4 Demonstrationsövning 5 1 Arbetsbok avsnitt 7: Undantag, avbrott - Uppgift 41 + enable_interrupt

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

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC) Realtidsprogrammering En introduktion Implementering (med exempel från PIC) Utan timing Periodtid varierar beroende på funktionernas exekveringstid. Specificera endast maxtid ( Worst case) och eventuellt

Läs mer

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering

Läs mer

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010 STYRNING - i Mikrodatorteknik för U2 2010 1. Uppgift M10 (5p) aug-09 Skriv ett program i PIC-assembler som - gör PortB till utport - ettställer bit 0, 3 och 4 i PortB - nollställer bit 5 och 6 i PortB

Läs mer

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2018-04-0 Lokal G6 Tid 14-18 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal uppgifter 5 Antal sidor 16 (inklusive

Läs mer

Avancerad SSL-programmering II

Avancerad SSL-programmering II Tekn.dr. Göran Pulkkis Överlärare i Datateknik Avancerad SSL-programmering II 1 Innehåll Makron för generisk stackhantering Hantering av konfigureringsfiler Certifikathantering 2 1 Makron för generisk

Läs mer

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00 Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp 2018-04-03 14:00-18:00 Omtentander på ID2200 TEN1 3.8 hp och ID2206 TEN1 4.5 hp skall inte skriva denna tentamen! Instruktioner Du får, förutom

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

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers Avbrott generellt F7.1. Avbrott sköts med hårdvara i processorn, man läser av hårdvarumässigt. Polling är en enklare princip för I/O- hantering.

Läs mer

Poster ( structar ) Postdeklarationer

Poster ( structar ) Postdeklarationer Poster ( structar ) Exempel på en postdeklaration: struct person { int id; char namn[20]; int vikt, skonr; p1, p2; Detta definierar två variabler p1 och p2 som poster med termerna id, namn, vikt och skonr.

Läs mer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen i TDP004 Objektorienterad Programmering Praktisk del Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Strömmar, externa filer och kommandoradsargument Eric Elfving Institutionen för datavetenskap 7 oktober 2015 Översikt 2/32 Strömmar Kommandoradsargument Jämförelseoperatorer

Läs mer

Arduinokurs. Kurstillfälle 4

Arduinokurs. Kurstillfälle 4 Kurstillfälle 4 CW-generering Det här kan ses som överkurs men kan ändå vara roligt för att kunna generera CW på ett enkelt sätt. Det blir en hel del nytt men vi tar det steg för steg Som alla vet gäller

Läs mer

Datorteknik ERIK LARSSON

Datorteknik ERIK LARSSON Datorteknik ERIK LARSSON Inledning Ken Thompson och Dennis M. Ritchie utvecklade C Turingpriset( Nobelpris i datavetenskap ), 1983 Alan Turing (1912-1954) För deras utveckling av generell OS teori och

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 04 Muterbara strukturer, omgivningar TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden

Läs mer

Synkronisering. Ordning och reda

Synkronisering. Ordning och reda Synkronisering Ordning och reda Banköverföring struct account { int balance; char* owner; }; struct account account[ NUM_ACCOUNTS ]; bool transfer( int amount, unsigned from, unsigned to ); 2 Banköverföring

Läs mer

Assemblerprogrammering - fördjupning

Assemblerprogrammering - fördjupning Assemblerprogrammering - fördjupning Ur innehållet: Trampoliner tabellerade funktionsadresser Aktiveringspost med ARM Cortex M4 Mer om parameteröverföring Registerspill Kodgenerering - ISA "Kodoptimering"

Läs mer

Systemnära programmering 2012-11-05. Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Systemnära programmering 2012-11-05. Tentamen. Systemnära programmering, 7.5hp 5 november 2012 Tentamen Systemnära programmering, 7.5hp 5 november 2012 Skrivtid: 9 13 Hjälpmedel: EN av följande böcker Bilting & Skansholm: Vägen till C ELLER J.R. Hanly & E.B. Koffman: C Program Design for Engineers

Läs mer

Introduktion C-programmering

Introduktion C-programmering Introduktion C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2 C Standarder

Läs mer

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Verónica Gaspes. IDE-sektionen.

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Verónica Gaspes. IDE-sektionen. Programmering Sommarkurs 2007 www.hh.se/staff/vero/programmering Verónica Gaspes IDE-sektionen Juni 14 Utkast 1 Recap 2 Mera om nya typer 3 Kort 4 Fält Recap Man kan ge namn till typer. Vi undersökte enum

Läs mer

Filer och structer Del 2

Filer och structer Del 2 Filer och structer Del 2 Agenda: Typedef Alternativ strängläsning från fil Binära data Lagra Läsa Oväntat slut på input Spara till nästa programstart Typedef Kan användas till att sätta ett eget namn på

Läs mer

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 7 mars 2012, klockan 14:00 19:00 i Vic 2, 3. Tillåtna hjälpmedel: på tentan utdelad formelsamling,

Läs mer

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

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet. Datorteknik Tomas Nordström Föreläsning 6 För utveckling av verksamhet, produkter och livskvalitet. Föreläsning 6 Vad händer vid uppstart SoC och Kringkretsar, PIO Programmering i Assembler Lab2 genomgång

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

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013 1 of 7 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

MESI i Intel Core 2 Duo

MESI i Intel Core 2 Duo MESI i Intel Core 2 Duo Sammanfattning Denna rapport beskriver en processor (Intel Core 2 Duo) vars cache coherence protokoll är MESI. Rapporten beskriver hur processorn är uppbyggd, hur många kärnor den

Läs mer

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan. Namn: Laborationen godkänd: Digitala system 15 p Datorprojekt, del 2 L T H I n g e n j ö r s h ö g s k o l a n v i d C a m p u s H e l s i n g b o r g Projektlaboration 2, skrivning till LCD. Förberedelser:

Läs mer