Programmering av grafisk display
|
|
- Mats Marcus Berg
- för 6 år sedan
- Visningar:
Transkript
1 Programmering av grafisk display Arbetsboken avsnitt 5 - Drivrutrin för grafisk display, uppg Datablad LCD Grafisk under resurser på kurshemsidan, s Lab 3 - Drivrutiner - Enkel grafik Lab 5 - Spel Programmering av grafisk display 1
2 Översikt Egenskaper Implementation av drivrutiner Skriva till display Prestanda Design av grafik Programmering av grafisk display 3
3 Egenskaper Upplösning på 128 x 64 pixlar. 128 pixel 64 Programmering av grafisk display 4
4 Egenskaper Inga färger eller ens gråskala. Varje pixel är antingen transparent eller fylld. Med andra ord: 1 bit / pixel. Programmering av grafisk display 5
5 Egenskaper Displayen består av två separata enheter. CS = Chip Select CS1 CS2 Programmering av grafisk display 6
6 Egenskaper Fysiska koordinater för displayen anges i page och address. I databladet kallas page X och address Y. page (X) address (Y) CS1 CS2 Programmering av grafisk display 7
7 Egenskaper Address anger vilken pixel inom varje halva i horisontalled. Från 0-63 för varje halva. Page anger 0-7 i vertikalled. 0 address (Y) page (X) 7 CS1 CS2 Programmering av grafisk display 8
8 Egenskaper Vi kan bara läsa och skriva i hela alignade bytes i vertikalled! Exempel: CS1 = 1, CS2 = 0, page = 0, address = 20. 1px address (Y) px 0 page (X) 7 CS1 CS2 Programmering av grafisk display 10
9 Egenskaper Vi kan bara läsa och skriva i hela alignade bytes i vertikalled! Exempel: CS1 = 0, CS2 = 1, page = 0, address = 20. address (Y) page (X) 7 CS1 CS2 Programmering av grafisk display 11
10 Egenskaper Vi kan bara läsa och skriva i hela alignade bytes i vertikalled! Exempel: CS1 = 0, CS2 = 1, page = 1, address = 20. address (Y) page (X) 7 CS1 CS2 Programmering av grafisk display 12
11 Egenskaper Vi kan bara läsa och skriva i hela alignade bytes i vertikalled! Exempel: CS1 = 0, CS2 = 1, page = 1, address = 21. address (Y) page (X) 7 CS1 CS2 Programmering av grafisk display 13
12 Exempel Programmering av grafisk display 14
13 Implementation av drivrutiner Port E Låga bitar (0-7) = styrregister Höga bitar (8-15) = dataregister Programmering av grafisk display 16
14 Implementation av drivrutiner Definition av portar #define PORT_DISPLAY_BASE 0x // MD407 port E #define portmoder ((volatile unsigned int *) (PORT_DISPLAY_BASE)) #define portotyper ((volatile unsigned short *) (PORT_DISPLAY_BASE+0x4)) #define portospeedr ((volatile unsigned int *) (PORT_DISPLAY_BASE+0x8)) #define portpupdr ((volatile unsigned int *) (PORT_DISPLAY_BASE+0xC)) #define portidr ((volatile unsigned short *) (PORT_DISPLAY_BASE+0x10)) #define portidrhigh ((volatile unsigned char *) (PORT_DISPLAY_BASE+0x11)) #define portodrlow ((volatile unsigned char *) (PORT_DISPLAY_BASE+0x14)) #define portodrhigh ((volatile unsigned char *) (PORT_DISPLAY_BASE+0x14+1)) Programmering av grafisk display 17
15 Implementation av drivrutiner Definition av kommandon till styrregister. Hantera synkronisering. #define B_E 0x40 // Enable #define B_RST 0x20 // Reset #define B_CS2 0x10 // Controller Select 2 #define B_CS1 8 // Controller Select 1 #define B_SELECT 4 // 0 Graphics, 1 ASCII #define B_RW 2 // 0 Write, 1 Read #define B_RS 1 // 0 Command, 1 Data Programmering av grafisk display 18
16 Implementation av drivrutiner Definition av kommandon till display, sänds via dataregister. #define LCD_ON 0x3F // Display on #define LCD_OFF 0x3E // Display off #define LCD_SET_ADD 0x40 // Set horizontal coordinate #define LCD_SET_PAGE 0xB8 // Set vertical coordinate #define LCD_DISP_START 0xC0 // Start address #define LCD_BUSY 0x80 // Read busy status Programmering av grafisk display 19
17 Implementation av drivrutiner Från datablad. Programmering av grafisk display 20
18 Implementation av drivrutiner static void graphic_ctrl_bit_set(uint8_t x); static void graphic_ctrl_bit_clear(uint8_t x); static void select_controller(uint8_t controller); Programmering av grafisk display 21
19 Implementation av drivrutiner static void graphic_ctrl_bit_set(uint8_t x) { uint8_t c; c = *portodrlow; c &= ~B_SELECT; c = (~B_SELECT & x); *portodrlow = c; static void graphic_ctrl_bit_clear(uint8_t x) { uint8_t c; c = *portodrlow; c &= ~B_SELECT; c &= ~x; *portodrlow = c; Programmering av grafisk display 22
20 Implementation av drivrutiner static void select_controller(uint8_t controller){ switch(controller){ case 0: graphic_ctrl_bit_clear(b_cs1 B_CS2); break; case B_CS1 : graphic_ctrl_bit_set(b_cs1); graphic_ctrl_bit_clear(b_cs2); break; case B_CS2 : graphic_ctrl_bit_set(b_cs2); graphic_ctrl_bit_clear(b_cs1); break; case B_CS1 B_CS2 : graphic_ctrl_bit_set(b_cs1 B_CS2); break; Programmering av grafisk display 23
21 Implementation av drivrutiner void graphic_initialize(void); static void graphic_wait_ready(void); Programmering av grafisk display 24
22 Implementation av drivrutiner void graphic_initialize(void) { graphic_ctrl_bit_set(b_e); delay_micro(10); graphic_ctrl_bit_clear(b_cs1 B_CS2 B_RST B_E); delay_milli(30); graphic_ctrl_bit_set(b_rst); delay_milli(100); graphic_write_command(lcd_off, B_CS1 B_CS2); graphic_write_command(lcd_on, B_CS1 B_CS2); graphic_write_command(lcd_disp_start, B_CS1 B_CS2); graphic_write_command(lcd_set_add, B_CS1 B_CS2); graphic_write_command(lcd_set_page, B_CS1 B_CS2); select_controller(0); Programmering av grafisk display 25
23 Implementation av drivrutiner static void graphic_wait_ready(void) { uint8_t c; graphic_ctrl_bit_clear(b_e); *portmoder = 0x ; // 15-8 inputs, 7-0 outputs graphic_ctrl_bit_clear(b_rs); graphic_ctrl_bit_set(b_rw); delay_500ns(); while(1) { graphic_ctrl_bit_set(b_e); delay_500ns(); c = *portidrhigh & LCD_BUSY; graphic_ctrl_bit_clear(b_e); delay_500ns(); if( c == 0 ) break; *portmoder = 0x ; // 15-0 outputs Programmering av grafisk display 26
24 När Busy flag är låg så kan displayen acceptera kommandon och data. Se databladet sida 19. Programmering av grafisk display 27
25 Implementation av drivrutiner static uint8_t graphic_read(uint8_t controller); static uint8_t graphic_read_data(uint8_t controller); Programmering av grafisk display 28
26 Implementation av drivrutiner static uint8_t graphic_read(uint8_t controller) { uint8_t c; graphic_ctrl_bit_clear(b_e); *portmoder = 0x ; // 15-8 inputs, 7-0 outputs graphic_ctrl_bit_set(b_rs B_RW); select_controller(controller); delay_500ns(); graphic_ctrl_bit_set(b_e); delay_500ns(); c = *portidrhigh; graphic_ctrl_bit_clear(b_e); *portmoder = 0x ; // 15-0 outputs if( controller & B_CS1 ) { select_controller(b_cs1); graphic_wait_ready(); if( controller & B_CS2 ) { select_controller(b_cs2); graphic_wait_ready(); return c; Programmering av grafisk display 29
27 Implementation av drivrutiner static uint8_t graphic_read_data(uint8_t controller) { graphic_read(controller); return graphic_read(controller); Enligt databladet måste vi läsa ut värdet två gånger för att det ska få effekt, se s. 19. Programmering av grafisk display 30
28 Implementation av drivrutiner static void graphic_write(uint8_t value, uint8_t controller); static void graphic_write_command(uint8_t command, uint8_t controller); static void graphic_write_data(uint8_t data, uint8_t controller); void graphic_clear_screen(void); Programmering av grafisk display 35
29 Skriva till display void graphic_clear_screen(void) { uint8_t i, j; for(j = 0; j < 8; j++) { graphic_write_command(lcd_set_page j, B_CS1 B_CS2); graphic_write_command(lcd_set_add 0, B_CS1 B_CS2); for(i = 0; i <= 63; i++){ graphic_write_data(0, B_CS1 B_CS2); Programmering av grafisk display 36
30 Skriva till display Funkar ok om vi vill rensa hela displayen, men inte så smidigt annars. Vi vill kunna skriva till displayen varje pixel för sig. (x, y) Programmering av grafisk display 37
31 Skriva till display Vi vill ha en funktion void pixel(int x, int y, int set) Inför logiska koordinater med x i [1..128] och y i [1..64] 1 1 x 128 y (x, y) 64 Programmering av grafisk display 38
32 Skriva till display Hur skriver vi en sådan funktion när vi bara kan läsa/skriva i hela bytes? Exempel: Vi vill skriva till logiska koordinater (86, 12). 1 1 x 128 y (86, 12) 64 Programmering av grafisk display 39
33 Egenskaper Vår address blir då = 21. Page blir (12-1) / 8 = 1. Vår bit i vår vertikala byte blir (12-1) % 8 = 3. address (Y) page (X) 7 CS1 CS2 Programmering av grafisk display 40
34 Egenskaper Vi läser då en byte med fysiska koordinater (CS2, 21, 1). Vi vill skriva till bit 3 i denna byte. = mask läst resultat Programmering av grafisk display 41
35 Egenskaper Skriv denna resulterande byte tillbaka till displayen. address (Y) page (X) 7 CS1 CS2 Programmering av grafisk display 42
36 Skriva till display void pixel(int x, int y, int set) { uint8_t mask, c, controller; int index; if((x < 1) (y < 1) (x > 128) (y > 64)) return; index = (y-1)/8; switch( (y-1)%8 ) { case 0: mask = 1; break; case 1: mask = 2; break; case 2: mask = 4; break; case 3: mask = 8; break; case 4: mask = 0x10; break; case 5: mask = 0x20; break; case 6: mask = 0x40; break; case 7: mask = 0x80; break; mask = 1 << ((y-1)%8); Forts. Programmering av grafisk display 43
37 Skriva till display if(set == 0) mask = ~mask; if(x > 64){ controller = B_CS2; x = x - 65; else { controller = B_CS1; x = x-1; graphic_write_command(lcd_set_add x, controller ); graphic_write_command(lcd_set_page index, controller ); c = graphic_read_data(controller); graphic_write_command(lcd_set_add x, controller); if(set) mask = mask c; else mask = mask & c; Notera: på grund av autoinkrementering av address graphic_write_data(mask, controller); Programmering av grafisk display 44
38 Skriva till display int main(int argc, char **argv) { POBJECT p = &ball; init_app(); graphic_initialize(); graphic_clear_screen(); draw(pos.x, pos.y) p->set_speed(p, 4, 1); while(1) { p->move(p); Lista av logiska koordinater beskriver geometrin. Skicka till pixel() med offset för nuvarande position av objektet. Programmering av grafisk display 45
39 Prestanda Upplevd bildkvalité - Flimmer. - Hackar. - Kan vi se enskilda bildrutor? Uppdateringsfrekvens (eng. frame rate) - Vad är en lämplig uppdateringsfrekvens för spel? - Hur kan vi specificera en uppdateringsfrekvens för vårt spel? Programmering av grafisk display 46
40 Prestanda #define TARGET_FPS 30 int main(int argc, char **argv) { POBJECT p = &ball; init_app(); graphic_initialize(); graphic_clear_screen(); p->set_speed(p, 4, 1); while(1) { p->move(p); Programmering av grafisk display 47
41 Prestanda #define TARGET_FPS 30 int main(int argc, char **argv) { POBJECT p = &ball; init_app(); graphic_initialize(); graphic_clear_screen(); p->set_speed(p, 4, 1); while(1) { p->move(p); delay_milli(1000 / TARGET_FPS); Programmering av grafisk display 48
42 Prestanda Programmering av grafisk display 49
43 Prestanda Varför flimrar det så? På grund av att vi ritar direkt till skärmen. Lösning: använd dubbelbuffering. draw() draw() draw() draw() draw() draw() frontbuffer (display) Programmering av grafisk display 50
44 Prestanda Rita till en backbuffer alltså till en buffer i RAM-minnet. backbuffer Rita sedan hela backbuffern i ett svep när vi är klara med vår nuvarande frame. draw() draw() draw() draw() draw() draw() frontbuffer (display) finished drawing copy_buffer() Programmering av grafisk display 51
45 Prestanda En enkel implementation. uint8_t backbuffer[1024]; // 128 * 64 / 8 void clear_backbuffer() { int i; for (i = 0; i < 1024; i++) backbuffer[i] = 0; Programmering av grafisk display 52
46 Prestanda Skriv till backbuffern istället för till skärmen. void pixel(int x, int y) { uint8_t mask; int index = 0; if( (x > 128 ) (x < 1) (y > 64) (y < 1) ) return; mask = 1 << ((y-1)%8); if(x > 64) { x -= 65; index = 512; index += x + ((y-1)/8)*64; backbuffer[index] = mask; Programmering av grafisk display 53
47 Prestanda Kopiering av backbuffer till frontbuffer. Jämför med graphic_clear_screen(). void graphic_draw_screen(void) { uint8_t i, j, controller, c; unsigned int k = 0; for(c = 0; c < 2; c++) { controller = (c == 0)? B_CS1 : B_CS2; for(j = 0; j < 8; j++) { graphic_writecommand(lcd_set_page j, controller); graphic_writecommand(lcd_set_add 0, controller); for(i = 0; i <= 63; i++, k++) { graphic_write_data(backbuffer[k], controller); Programmering av grafisk display 54
48 Prestanda int main(int argc, char **argv) { POBJECT p = &ball; init_app(); graphic_initialize(); graphic_clear_screen(); p->set_speed(p, 4, 1); while(1) { p->move(p); delay_milli(40); int main(int argc, char **argv) { init_app(); graphic_initialize(); graphic_clear_screen(); while(1) { clear_backbuffer(); // DO STUFF. graphic_draw_screen(); delay_milli(40); Programmering av grafisk display 55
49 Exempel Programmering av grafisk display 56
50 Design av grafik Arbetsbok: lista av logiska koordinater. - Svårt att rita mer avancerad grafik. - Inte heller minneseffektivt: två unsigned char per pixel. Vill designa sprites i externt bildredigeringsprogram. - Problem 1: vilket format stödjer 1 bit per pixel? Vill ladda dessa bildfiler i vårt program. - Problem 2: vi har inget standardbibliotek med fil-i/o i vårt inbyggda system. Programmering av grafisk display 57
51 Design av grafik Förslag till lösning - Använd filformat X Bitmap (.xbm). - Formatet specificeras av bredd, höjd och ett antal bytes, allt direkt i c-kod! - Kan därför användas direkt i källkoden med #include "image.xbm Programmering av grafisk display 58
52 Design av grafik Filformatet är standard och stödjs av många bildbehandlingsprogram. Tänkte visa två exempel som använder programmet GIMP ( som är gratis och finns till många plattformar. Programmering av grafisk display 59
53 Design av grafik Designa egen sprite Gå till File->New Sätt bredd och höjd i pixlar Välj Color space: Grayscale Programmering av grafisk display 60
54 Design av grafik Bilden är extremt liten på vanlig bildskärm. Zooma in. Programmering av grafisk display 61
55 Design av grafik 1x1 pixels rutnät hjälper till vid ritning. Välj Image->Configure Grid Välj Width = Height = 1 px Programmering av grafisk display 62
56 Design av grafik Toggla View->Show Grid Programmering av grafisk display 63
57 Design av grafik Använd Pencil Tool Sätt Size = 1 px Programmering av grafisk display 64
58 Design av grafik Rita! Programmering av grafisk display 65
59 Design av grafik Spara sedan som X Bitmap-fil. Välj File->Export as Spara med ändelsen.xbm Klicka på Export i dialogruten Programmering av grafisk display 66
60 Design av grafik Resultat: Programmering av grafisk display 67
61 Design av grafik Vill designa en större eller mer komplicerad sprite. Hitta en bild du gillar på internet och sampla ner färgrymd och upplösning! Exempel: Yoshi. Programmering av grafisk display 68
62 Design av grafik Välj Image->Scale Image Skala om till önskad storlek. Programmering av grafisk display 69
63 Design av grafik Resultat (efter rejäl inzoomning) Programmering av grafisk display 70
64 Design av grafik Trunkera till 1-bits färg. Välj Colors->Threshold Dra i slidern tills det ser bra ut. Programmering av grafisk display 71
65 Design av grafik Nu är sprite:n färdig att använda i programmet. Notera: utgick från en svartvit bild. Kan även ta färgbild och konvertera till svartvit, men kan vara svårt att få bra resultat. Programmering av grafisk display 72
66 Design av grafik Ni vill vi designa en funktion för att rita ut sprites på X Bitmap-format. Givet struct och hjälpfunktion nedan. typedef struct { unsigned char width; unsigned char height; unsigned char* data; sprite; static void load_sprite(sprite* s, unsigned char* data, int width, int height) { s->width = width; s->height = height; s->data = data; Programmering av grafisk display 73
67 Design av grafik bit Programmering av grafisk display 74
68 Design av grafik void draw_sprite(sprite* s, int x, int y, int set) { int i,j,k, width_in_bytes; if (s->width % 8 == 0) width_in_bytes = s->width / 8; else width_in_bytes = s->width / 8 + 1; for (i = 0; i < s->height; i++) for (j = 0; j < width_in_bytes; j++) { unsigned char byte = s->data[i * width_in_bytes + j]; for (k =0; k < 8; k++) { if (byte & (1 << k)) pixel(8 * j + k + x + 1, i + y + 1, set); Programmering av grafisk display 75
Programmering av grafisk display
Programmering av grafisk display Arbetsboken avsnitt 5 - Drivrutrin för grafisk display, s. 86-96. Datablad LCD Grafisk under resurser på kurshemsidan, s.14-23. Lab 3 - Drivrutiner - Enkel grafik Lab 5
Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3
LCD Display och Grafik Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3 Målsättning: Efter lektionen ska alla självständigt kunna slutföra
Programmering av inbyggda system
GPIO, In- och utmatning Demonstration och konsultation ST407 GPIO konfigurering och användning Arbetsbokens avsnitt 4 och 5 LCD ASCII-display Keyboard Introduktion till laboration 2 Demonstrationsövning
Demonstration och konsultation Arbetsbokens avsnitt 8 Ett exempel på spelprogrammering Kan vara till hjälp inför laboration 5
Spelprogrammering Demonstration och konsultation Arbetsbokens avsnitt 8 Ett exempel på spelprogrammering Kan vara till hjälp inför laboration 5 Demonstrationsövning 6 1 Spel exempel: - Tile baserat. -
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
C-programmering del 4. Ulf Assarsson. extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg
C-programmering del 4 Ulf Assarsson Läromoment: extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg Kopplat.ll: Lab 5 - spelprogrammering Kombinera C och assembler Anropa assembler-ru.ner
(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
Structs och funktionspekare
Grundläggande C-programmering del 3 Structs och funktionspekare Ulf Assarsson Läromoment: Structs, pekare till structs (pilnotation), array av structs, Portadressering med structs Funktionspekare, structs
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
Ulf Assarsson. Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C.
Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C Ulf Assarsson Läromoment: Kodningskonven(oner Real(dsloop Överkurs: grafikloop, fraktalt berg
Ö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,...)
6 Lågnivåprogrammering
6 Lågnivåprogrammering När språket C konstruerades hade man som en av målsättningarna att språket skulle kunna hantera programmering på lågnivå. Med lågnivå menas det som man tidigare behövt använda assemblerprogrammering
Laboration 4: Digitala bilder
Objektorienterad programmering, Z : Digitala bilder Syfte I denna laboration skall vi återigen behandla transformering av data, denna gång avseende digitala bilder. Syftet med laborationen är att få förståelse
Ulf Assarsson. Grafisk display + seriekommunika3on (USART) Läromoment: USART Grundläggande C-programmering del 2
Grafisk display + seriekommunika3on (USART) Ulf Assarsson Läromoment: USART Grundläggande C-programmering del 2 Pekare portadressering med structs structs med funk.onspekare Kopplat.ll: Arbetsbok avsni5:
Grundläggande C-programmering
Grundläggande C-programmering - För maskinorienterad programmering Ulf Assarsson Läromoment: Datatyper, typedef, #define, struct, arrayer, synlighet Preprocessing, kompilering, länkning IDE,.c- /.h-filer,
Övning 7. Timer, serieport
Övning 7 Timer, serieport 7.6 timer_1 Memory-Mapped addresses 0x920 status 0x924 control 0x928 periodl 0x92C periodh 0x930 snapl 0x934 snaph 15 0 Run TO (Time-Out) ITO cont start stop timer_1 start D Q
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
Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volafle, #define Arrayer av pekare, arrayer av arrayer Hemuppgi9er: v2. Föregående
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
Övning 6. Parallellport, timer
Övning 6 Parallellport, timer 6.1 de2_pio_toggles18 Memory-Mapped addresses LEDG8 LEDR17 LEDR16 LEDR15 LEDR14 LEDR13 LEDR12 LEDR11 LEDR10 LEDR9 LEDR8 LEDR7 LEDR6 LEDR5 LEDR4 LEDR3 LEDR2 LEDR1 LEDR0 LEDG7
Digitala Projekt(EITF40) - Larm
Digitala Projekt(EITF40) - Larm Handledare: Bertil Lindvall Erik Oredsson, I-09 Sara Sellin, I-09 2012-05-08 1. SAMMANFATTNING I denna rapport presenteras vårt projekt att bygga ett huslarm från grunden
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;
#include #include #include unsigned char num; int count = 0; // antal i lokalen char larmtriggered = 0; //om larmet är utlöst char larmactivated = 0; //om larmet
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:
Digitala Projekt(EITF40) - Larm
Digitala Projekt(EITF40) - Larm Handledare: Bertil Lindvall Kristoffer Sätermark, dt08ks6 Magnus Johansson, dt08mj9 Innehåll 1 Introduktion 1 2 Kravspec 1 3 Hårdvara 2 3.1 knappsats och decoder........................
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
Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Grafiska pipelinen. Edvin Fischer
Grafiska pipelinen Edvin Fischer Sammanfattning Rapporten behandlar den grafiska pipelinen och dess steg, vilka stegen är och hur de funkar. Inledning Rapporten har till syfte att beskriva hur den grafiska
ATtiny 85. Krympa projekt från Arduino Uno
ATtiny 85 Krympa projekt från Arduino Uno Material: Arduino Uno Attiny 85 Breadboard Jumper wire Kondensator 10µF Börja med att öppna Arduino-programmet. I Arduino väljer du exempel och laddar ner ArduinoISP
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
En grund i bildbearbetning för webben i Photoshop CS5
En grund i bildbearbetning för webben i Photoshop CS5 Mappstrukturering... 2 Arbetsflöde bildbearbetning för webb Beskär... 3 Storleksförändra bild... 4 Skärpa... 5 Spara för webb... 6 Från logga i jpg,
Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004
Programmering hh.se/db2004 Föreläsning 11: Objektorienterad programmering - att definiera datatyper Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Datatyper Hittills Vi har lärt
Rapport i Digitala Projekt (EDI021)
Rapport i Digitala Projekt (EDI021) Grupp 6 Daniel Raneland, dt05dr1 2009-03-01 1 Sammanfattning Idag är det väldigt vanligt att man har en termometer hemma som mäter temperaturen både inomhus och utomhus.
String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning
Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet
Grafik. För enklare datorsystem
Grafik För enklare datorsystem Grafik förr VGA-signalen Direktdriven grafik eller bildminne Bitmap-grafik Tile/teckenbaserad grafik Spritebaserad grafik Kollisionskontroll Rörelse : Hastighet / riktning
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
Digitala Projekt (EITF11) Hemlarm
Digitala Projekt (EITF11) Hemlarm Karl Nordenstorm, I-12, gem12kno 2014-05-16 Handledare: Bertil Lindvall Sammanfattning Den här rapporten beskriver arbetet bakom hur en prototyp för ett hemlarm har utvecklats
Grafik i DrRacket AV TOMMY KARLSSON
Grafik i DrRacket AV TOMMY KARLSSON Upplägg Grundläggande grafik i racket Frame% Kodexempel! Generella problemlösarstrategier Grafisk kodstruktur Button% Pane% & Panel% Canvas% Bitmap% Grafisk effektivisering
Modbus Seriell Kommunikation
Översikt Modbus protokollet är en allmänt använd och väldokumenterad kommunikationsmetod. Det är ett enkelt och effektivt sätt att programmera våra olika produkter A typiskt Modbus-paket ser ut så här:
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
Tentamen med lösningsförslag
Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen med lösningsförslag DAT017 (DAT016) Maskinorienterad programmering IT EDA482 (EDA481) Maskinorienterad programmering D
SgLib Simple Graphics Library
SgLib Simple Graphics Library SgLib är en förenkling av glut som I sin tur bygger på open GL. Om du inte känner till glut och open GL, räcker det att veta att sglib är en samling filer som gör det lättare
GPIO - General Purpose Input Output
GPIO - General Purpose Input Output Ur innehållet: Digital IO Ideala och verkliga signaler Bitvis in- och utmatning Anslutning - fysiskt gränssnitt F407 - GPIO-modul tillämpningar Programmering av enkelt
Instruktioner för Articulate Storyline 2
Instruktioner för Articulate Storyline 2 Instruktion för kursproduktion till Netcompetence Talent Portal NETCOMPETENCE 2016-12-19 Innehåll Inledning... 2 Om Articulate... 2 Om Studio 13... 2 Om Storyline
Grundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson
Grundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson Läromoment: Synlighet static, #extern, (inline), #if/#ifdef, #include guards, enum, union, little/big
Ulf Assarsson. Grundläggande C-programmering del 3. Läromoment: Grundläggande C-programmering del 3
Grundläggande C-programmering del 3 Ulf Assarsson Läromoment: Grundläggande C-programmering del 3 enum, union, byte-adressering med unions, include-guards Pekare och arrayer, 2D-arrayer dubbelpekare Kopplat.ll:
Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall
Rapport Digitala Projekt EITF11 2017-05-08 Rapport Fyra i rad-spel Sammanfattning: Detta dokument beskriver arbetsprocessen i det projekt som är en del av kursen Digitala Projekt(EITF11) vid Lunds Tekniska
lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck
input läs tecken stoppa tillbaka ett tecken skicka ett token och dess attribut parser Eliminera white space och kommentarer Gruppera lästa tecken till tokens identifierare, nyckelord, numeriska konstanter,
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
Hantering av textsträngar och talsträngar. William Sandqvist
Hantering av textsträngar och talsträngar Strängen Hello world! PIC-processorerna lagrar strängkonstanter med bokstäverna inbakade i en följd av instruktioner (en tabell). Man hämtar en bokstav genom att
Tentamen med lösningsförslag
Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen med lösningsförslag DAT017 (DAT016) Maskinorienterad programmering IT EDA482 (EDA481) Maskinorienterad programmering D
SP:PROG3 HT12 Tenta 2013-01-19
DSV SU/KTH sid 1 (5) SP:PROG3 SP:PROG3 HT12 Tenta 2013-01-19 Tentan består av tre uppgifter. Max poäng är 30. För betyget E (godkänd) krävs minst 18 poäng och minst en poäng på varje uppgift. Betygskriteria
Ö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
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
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
Laboration 3 GUI-programmering
Laboration 3 GUI-programmering Syfte Erbjuder studenterna en möjlighet att lära sig grunderna i gränssnittsprogrammering i Java. Genomförande Genomförs individuellt eller i grupp om 2 personer. Uppskattad
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
Simulering med ModelSim En kort introduktion
Linköpings universitet Institutionen för systemteknik Laborationer i digitalteknik Datorteknik 2018 Simulering med ModelSim En kort introduktion TSEA22 Digitalteknik D TSEA51 Digitalteknik Y TSEA52 Digitalteknik
Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen
Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för
Assemblerprogrammering för ARM del 3
Assemblerprogrammering för ARM del 3 Ur innehållet Fält och sammansatta typer (poster) Pekarvariabler och pekarkonstanter Pekararitmetik, operationer på fält Läsanvisningar: Arbetsbok kap 2 Quick-guide,
Scripthantering i AutoCAD
Scripthantering i AutoCAD Nyckeln till framgång är produktivitet. Ett sätt är att använda AutoCAD's möjlighet att skapa scripter. En script är en textfil med filändelsen SCR som innehåller kommandon precis
Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program
Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i
3.5 Visuell programmering
3.5 Visuell programmering Alla våra program hittills har varit C# Console Applications (sid 41) inkl. programmet MessageBox fast det genererade en grafisk meddelanderuta. Nu vill vi utnyttja grafikens
Seriekommunikation. Ur innehållet: Nätverkstopologier Nätverksprotokoll Asynkron/synkron seriell överföring Programmering av USART-krets
Seriekommunikation Ur innehållet: Nätverkstopologier Nätverksprotokoll Asynkron/synkron seriell överföring Programmering av USART-krets Läsanvisningar: Arbetsbok kapitel 7 Seriekommunikation 1 Parallell
Lab5 för prgmedcl04 Grafik
Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna
LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall
LARMANLÄGGNING Digitala Projekt, EITF11 Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall 1. Sammanfattning Vi har byggt ett larm vars syfte är att användas i hemmet. Larmet använder
Digitala Projekt. Chip Quiz. Projektmedlemmar: Olov Nordenstam och Linus Hägerbrand. Grupp 9
Digitala Projekt Chip Quiz Projektmedlemmar: Olov Nordenstam och Linus Hägerbrand Grupp 9 050516 Abstract We have accomplished a project in the course Digital Systems, Project Laboratory. We decided to
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
Instruktioner för Articulate Studio 13
Instruktioner för Articulate Studio 13 Instruktion för kursproduktion till Netcompetence Talent Portal NETCOMPETENCE 2016-12-19 Innehåll Inledning... 2 Om Articulate... 2 Om Studio 13... 2 Om Storyline
Per Holm Inlämningsuppgift 2, PTDC 2014/15 2 / 19. Med c = i konvergerar inte talföljden:
Inlämningsuppgift 2, Mandelbrot Mandelbrots talföljd Beräkna och rita bild av Mandelbrotmängden. Färdigskrivet användargränssnitt. Ganska mycket och ganska komplext börja i tid! 0, k = 0 z k = + c, k =
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
Grafik. För enklare datorsystem
Grafik För enklare datorsystem Grafik förr VGA-signalen Direktdriven grafik eller bildminne Bitmap-grafik Tile/teckenbaserad grafik Spritebaserad grafik Kollisionskontroll Rörelse : Hastighet / riktning
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
Exempel på användning av arv: Geometriska figurer
(9 maj 2014 Klasshierarkier 1 ) Exempel på användning av arv: Geometriska figurer Uppgift: Skriv ett program som kan hantera några olika geometrisk figurer: linjer, cirklar och rektanglar. (9 maj 2014
Programmeringsteknik I
Programmeringsteknik I Föreläsning 2: Grundläggande Java Johan Öfverstedt Java Grundläggande begrepp Datatyper Selektion if Räckvidd (scope) Iteration while Klasser Objekt Metoder Metodhuvudet Kodstandarden
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
Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt
Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur
Simulering med ModelSim En kort introduktion
Linköpings universitet Institutionen för systemteknik Laborationer i digitalteknik Datorteknik 2017 Simulering med ModelSim En kort introduktion TSEA22 Digitalteknik D Linköpings universitet SE-581 83
Mikael Bondestam Johan Isaksson. Spelprogrammering. med CDX och OpenGL
Mikael Bondestam Johan Isaksson Spelprogrammering med CDX och OpenGL Del 2 Spel Historiskt spel... 36 7. Studsboll en sprite...37 8. Styrning med tangentbordet... 48 9. Krockar...51 10. Ljudeffekter...
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
Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004
Programmering hh.se/db2004 Föreläsning 10: Objektorienterad programmering - datatyper Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Påminnelse: en datatyp för bilder Vad är
Växtviskaren EITF11 Digitala projekt VT15, I12
Växtviskaren EITF11DigitalaprojektVT15,I12 NathalieLiljebrunn,EbbaRiismark,AnnaNorelius LundsTekniskaHögskola Institutionenförelektro ochinformationsteknik Handledare:BertilLindvall,AndreasJohansson 2015
The Phenomenal Doorbell Bilaga 2. Källkod
The Phenomenal Doorbell Bilaga 2. Källkod #include #include #include //Variabler int flag = 0; int count = 0; int timevect[8]; int bellbutton = 0; int waitbutton
OOP Objekt-orienterad programmering
OOP F2:1 OOP Objekt-orienterad programmering Föreläsning 2 Input/Output Programsatser Selektion Output OOP F2:2 Görs via System.out, anropa antingen print eller println: System.out.print("Hej"); System.out.println(
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
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.
Pulsmätare Digitala Projekt EITF11
Pulsmätare Digitala Projekt EITF11 Grupp 5 Sebastian Mattsson, 900611 ain09sma@student.lu.se Johannes Persson, 880823 ain09jpe@student.lu.se Handledare: Bertil Lindvall Innehållsförteckning Inledning...3
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
Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...
Abstract Syftet var att konstruera en väder station som håller koll på temperaturen. Huvudfunktionen var att få en grafisk visning av temperaturen över ett visst tidsintervall eftersom vi valde den grafiska
Dessa komponenter plus några motstånd, klockkrets, kondensatorer och annat smått och gott har åstadkommit ett fungerande POV-hjul.
Om POV, persistence of vision. POV eller persistence of vision är ett fenomen som uppstår på näthinnan i ögat där en efterbild ser ut att finnas kvar i ungefär en tjugofemtedels sekund efter att den flyttat
Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.
F5 Föreläsning i Mikrodatorteknink 2006-09-05 Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion. Programräknaren
Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets
Objektorienterad programmering i Java Föreläsning 5 Kort om Java-Applets 1 Läsanvisningar Den här föreläsningen syftar till att ge en bild av vad en Java-Applet är och är ganska fristående från föregående
Manual GISportalen (MapGuide) På Internet
Manual GISportalen (MapGuide) På Internet Manual Internet 2006 Du måste ha installerat ett program (plugin) Det hittar du här: Spara filen, stäng kartan och installera programmet genom att dubbelklicka
Paneler - VCPXX.2. Programmeringsmanual för VCP-paneler. Revision 2
Paneler - VCPXX.2 Programmeringsmanual för VCP-paneler Revision 2 Innehållsförteckning Innehållsförteckning... 2 1 Symbolfiler för kommunikation via IndraLogic... 3 2 Uppsättning i IndraWorks... 6 3 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)
Thunder s Truck projektrapport
LTH Thunder s Truck projektrapport EITF11 Digitala projekt 2012-05-10 Abstract The goal of this project was to build a truck operated by an IP-remote. The robot is built using standard parts such as two
Lathund. C för inbyggda system
Lathund C för inbyggda system Revision 1 2000-09-21 Anders Arvidsson Jonny Martinsson Synpunkter välkomnas! Innehållsförteckning 1 Introduktion...3 1.1 Assembler kontra C...3 1.2 Kodexempel...3 1.3 MPLAB...4
Tellstick-15.c. Kompilering av programmet: gcc -o tellstick-15 -Wall -ltelldus-core -W -O2 -s -pipe -lm tellstick-15.c
Tellstick-15.c Ett program skrivet i C för att med Tellstick tända och släcka en eller flera lampor. Det nya i detta program är att strömbrytare 1 tänds och släcks efter solens upp- och nedgång, tänds
1 Bakgrund 4. 2 Kravspecifikation Definitioner Grundläggande krav Användarfall 5
Larmanläggning Tor Berglund Sebastian Svensson Bromert Projektarbete inom Digitala Projekt EITF11 Institutionen för elektro- och informationsteknik Handledare: Bertil Lindvall 2017-05-20 Abstract In the
4 grundregler. Minneshantering. Problemet. Windows minkrav
4 grundregler 1. Man kan aldrig få för mycket minne 2. Minnet kan aldrig bli för snabbt Minneshantering 3. Minne kan aldrig bli för billigt 4. Programmens storlek ökar fortare än minnet i datorerna (känns