Enumerate typedef struct union functiepointers 1.

Slides:



Advertisements
Verwante presentaties

Advertisements





De Lorentzkracht Prof. H. A. Lorentz ( )
Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Algoritmen en Datastructuren (ALDAT)
OOS Object geOrienteerd Software-ontwerp - 3
MICPRG Les 12 Microcontroller Programmeren in C. 127 Real-time clock PC heeft een RTC Real-time Clock die de “time of day” bijhoudt. De RTC is voorzien.
Gestructureerd programmeren in C
1 Device driver. 2 Hardware Operating Systeem Prog1Prog2 System calls/ API Device drivers Gebruiker afschermen van de hardware.
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Conditionele expressie

1 Tentamen 21 januari 2008 uitleg Algemene kennisvragen a)“Wat verstaan we onder de complexiteit van een algoritme?” –Cruciaal: wat gebeurt er met.

Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
Handbediende motoromkeerschakelaar
Handbediende motoromkeerschakelaar
Algoritmen en Datastructuren (ALDAT) EVMINX4 Week 6.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 8 Gestructureerd programmeren in C. 101 Array Meerdere variabelen van hetzelfde type kun je samennemen in één array variabele. Stel in een.
GESPRG Les 12 Gestructureerd programmeren in C. 152 Huiswerk Uitwerking void reverse(int a[], int n) { int first = 0, last = n - 1; while (first < last)
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
Meestal werken er op een hefboom meerdere krachten V.B.
Samenvatting Hoofdstuk 1 Nova 3H/V
P. 1 Vakgroep Informatietechnologie Scanf voorbeeld #include int main(void) { int i=-1,j=-1,k=-1,l=-1; int b; b=scanf("%d %d %d %d",&i,&j,&k,&l); printf("res=%d.
Vakgroep Informatietechnologie – SoftwareOntwikkeling 1 SoftwareOntwikkeling 1 Conditionele compilatie in C met de macropreprocessor.
Deel I: Programmeertaal C 6. Arrays en Pointers
P. 1 Deel I: Programmeertaal C 4. Functies en Macro’s Prof.Dr.Ir. Filip De Turck.
e peloton (heren) in stap binnen komen en hoefslag linksom volgen en bij K afwenden naar F.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 7 onze.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Tircms02-p les 7 systemcalls linux vervolg. Inleiding Onder /usr/include/linux staan bestanden die de linuxkernel o.a. gebruikt om drivers aan te spreken.
Tircms02-p les 4 Preprocessor In- en uitvoer Diversen.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Mail: (of Sheets en verdere info: Onderwerp: vervolg C
P. 1 Deel I: Programmeertaal C 7. Andere verschillen met Java Prof.Dr.Ir. Filip De Turck.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
tircms02-p les 1 Operating Systems practicum
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag User-defined characters op de.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Een (vaste) melodie spelen op de PC speaker 
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail: Sheets.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Motorschakelingen - Omkeerschakeling
Wat je ziet Willem Broer.
Een verzameling Speciale if-statement String methodes en functies Enumeration Recursing ArrayList Threads.
SOCS Test 1.
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
C++ • C++ als een verbetering van C • Abstracte datatypen met classes • Constructoren en destructoren • Subklassen • binding van functies 1.
Wat je ziet.
Tinpro015b-les4 Klassen.
Gameprogrammeren: Recursie
Evenwichten 1. Het zwaartepunt. 2. Werklijn en arm van een kracht.
Versnellingsbak.
Gameprogrammeren: Arrays
Transcript van de presentatie:

enumerate typedef struct union functiepointers 1

enumerate enum richting {linksom,rechtsom}; Een enumate is een opsomming van constante integerwaarden. int main() { enum richting draairichtingmotor; draairichtingmotor=linksom; if(draairichtingmotor==linksom) printf("links\n"); printf("draairichting motor %d\n", draairichtingmotor); return 0; } enum richting {linksom=2,rechtsom=5}; 2

enumerate enum richting {linksom,rechtsom}; Een enumate is een opsomming van constante integerwaarden. int main() { richting draairichtingmotor; draairichtingmotor=linksom; if(draairichtingmotor==linksom) printf("links\n"); printf("draairichting motor %d\n", draairichtingmotor); return 0; } typedef enum richting richting; 3

struct struct motor { int toerental; richting r; }; m.r=linksom; m.toerental=1234; motor m; int main() { } struct motor m; typedef struct motor motor; enum richting {linksom,rechtsom}; typedef enum richting richting; 4

struct struct motor { int toerental; richting r; }; m.r=linksom; m.toerental=1234; motor* pm=&m; int main() { } typedef struct motor motor; motor m={50,linksom}; 5

struct minitellers { unsigned int a :4; unsigned int b :3; unsigned int c :2; }; Struct en bitvelden 015 ab c bitnr 6

Struct en bitvelden struct minitellers { unsigned int tel1 :4; int tel2 :3; int teller; }; typedef struct minitellers tellers; tellers t={0,0,0}; for(i=0;i<20;i++) { printf("tel1= %d, tel2=%d teller=%d\n", t.tel1,t.tel2,t.teller ); t.tel1++; t.tel2++; t.teller++; } int main() { } 7

Struct en bitvelden struct lampen { unsigned int kamer_v :1; unsigned int kamer_a :1; unsigned int douche :1; }; typedef struct lampen lmp; #define AAN 1 #define UIT 0 int main() { return 0; } lmp s3={UIT,UIT,UIT}; s3.kamer_v=AAN; 8 Om het overzichtelijk te houden willen we 3 lampen via een struct aansturen, hoe kan dat gedaan worden ?

union Lijkt op structs alleen delen de velden een gemeenschappelijk geheugen. union waarde { int i; char s; }; typedef union waarde getallen; getallen g; g g.i=0; g.i++; g.s='0'; printf("s=%c i=%d\n",g.s,g.i); 9

union union adres { unsigned int ad; unsigned char* sw; }; typedef union adres adres; unsigned char w; adres schakelaars; schakelaars.ad=PIO_SWITCH_BASE; w= *schakelaars.sw; printf("w=%d\n",w); 10

DE2-70 brandalarm_kamer1 brandalarm_kamer2 inbreekalarm_achter inbreekalarm_voor D1 D2 D3 D0 11

struct en union struct alarm { unsigned int inbreekalarm_achter :1; unsigned int inbreekalarm_voor :1; unsigned int brandalarm_kamer1 :1; unsigned int brandalarm_kamer2 :1; }; typedef struct alarm alarm; union al_verw { alarm al; unsigned char ingelezen; }; union adres { unsigned int ad; unsigned char* sw; }; typedef union adres adres; 12

struct en union int main() { union al_verw a={0}; adres schakelaars; schakelaars.ad=PIO_SWITCH_BASE; a.ingelezen= *schakelaars.sw; // test of brandalarm in kamer 1 is afgegaan if(a.al.brandalarm_kamer1) printf("verlaat kamer1\n"); return 0; } 13

Functiepointer pointer naar een functie 14

Inleiding pointers pointers int a; a a=45; 45 int* pa; pa pa=&a; 15

Pointers int getallen[2]; getallen Werken met een array van integers *getallen=4; 4 *getallen+1=5; error: invalid lvalue in assignment *(getallen+1)=5; 5 getallen[0]=3; 3 Pointers en een array 16

#define AANTAL 2 int getallen[AANTAL]; getallen Een array van integers als parameter meegeven telop(getallen,AANTAL); int telop(,int);int[]int* Pointers Pointers en een array int main() { return 0; } // prototype van de functie telop 17

int* getallen[2]; getallen Een array van “pointers naar integers” getallen[0]= &a; getallen[1]= &b; int a; int b; b a Pointers een array van pointers A=4; 4 *getallen[1]=6; 6 18 //Geef b de waarde 6 via de array getallen

int* getallen[2]; getallen Een array van “pointers naar integers” als parameter meegeven. getallen[0]= &a; getallen[1]= &b; int a; int b; b a int x= telop(getallen,AANTAL); int telop(,int); int*[] int** Pointers een array van pointers int main() { return 0; } // prototype van de functie telop 19

dub *dubtabel[2]={&paar1,&paar2}; int x= bewerk(dubtabel,AANTAL); int bewerk(,int); dub** typedef struct { int i; char c; }dub; dub paar2={3,’j’); dub paar1={2,’i’); paar2paar1 3j3j 2i2i Pointers structs en pointers int main() { return 0; } // prototype van // de functie bewerk 20

trip *triptabel[2]; int x= bewerk(triptabel,AANTAL); int bewerk(,int); trip** typedef struct { int i; int i2 char c; }trip; typedef struct { int i; char c; }dub; dub *dubtabel[2]; int x= bewerk(dubtabel,AANTAL); int bewerk(,int); dub** ? Pointers structs en pointers int main() { return 0; } // prototype van de functie telop 21

trip *triptabel[2]; int x= bewerk(triptabel,AANTAL); void** typedef struct { int i; int i2 char c; }trip; typedef struct { int i; char c; }dub; dub *dubtabel[2]; int x= bewerk( dubtabel,AANTAL); int bewerk(,int); dub** int x= bewerk((void**) dubtabel,AANTAL); int x= bewerk((void**)triptabel,AANTAL); pointers struct, array en pointers 22

typedef struct { int i; char c; }dub; void *dubtabel[2]; int x= bewerk(dubtabel,AANTAL); int bewerk(,int);void** dub paar1={2,'l'}; dubtabel[0]=&paar1; pointers struct, array en pointers 23

Pointers We willen een generieke functie maakrij maken die een array van pointers mee terug geeft. De aan te maken array bevat x elementen. maakrij( unsigned int x ) { rij = malloc(sizeof( )*x); return rij; } void* float* pi=(float*)maakrij(5); int* pi=(int*)maakrij(5);

{ printf("Hoi Minor deelnemers\n"); } Pointers pointer naar een functie voiddrukaf( ) int main(int argc, char *argv[]) { int a; return 0; } void ( ) (*minor_embed) ; minor_embed=drukaf; minor_embed(); 25

pointers Functie als parameter int telop(int t) { return t+3; } int telaf(int t) { return t-3; } void bewerking(int g, ) { int a; a=tel(g); printf("a=%d\n",a); } int (*tel)(int) int main() { int d=10; bewerking(d,telaf); bewerking(d,telop); printf("d=%d\n",d); return 0; } 26

Functiepointer Functiepointer in een struct Een struct: struct cijfer { double waarde; char *naam; }; int main() { struct cijfer vak1; vak1.waarde=6.4; vak1.naam=“C programmeren"; return 0; } 27

Functiepointer Functiepointer in een struct Een struct: typedef struct { double waarde; char *naam; }cijfer; int main() { cijfer vak1; vak1.waarde=6.4; vak1.naam=“C programmeren"; return 0; } 28

Functiepointer Functiepointer in een struct Een struct: typedef struct { double waarde; char *naam; }cijfer; int main() { cijfer vak1; vak1.waarde=6.4; vak1.naam=“C programmeren"; cijfer *osir=&vak1; return 0; } osir->waarde=7; 29

Functiepointer Functiepointer in een struct Een struct: typedef struct { double waarde; char *naam; }cijfer; int main() { cijfer vak1={6.4, “C programmeren“}; cijfer *osir=&vak1; return 0; } osir->waarde=7; 30

Functiepointer Functiepointer in een struct typedef struct { int cp; char *naam; int (*onderdeel1) (char*,int); int (*onderdeel2) (char*,int); int (*onderdeel3) (char*,int); int (*project) (char*,int); }minor; int systemC(char* n,int cp) { printf("gegeven door %s cp %d \n“,n,cp); return 7; } int elektronic_sys_lev(char* n,int cp) { printf("gegeven door %s cp %d\n“,n,cp); return 8; } int embSoftw(char* n,int cp) { printf("gegeven door %s cp %d \n“,n,cp); retrun 7; } 31

int main() { cout << "Hello world!" << endl; minor embedded={ 15, "embedded Systems", systemC, elektronic_sys_lev, embSoftw, NULL }; int cd=embedded.onderdeel1("Harry",3); int se=embedded.onderdeel3("John",3); } Functiepointer Functiepointer in een struct 32

Interrupt bij NIOS ii Interrupt_routine(o.a.pointer naar een variabele) Registratie van de interrupt_routine (met pointer naar een var) op een interrupt nr 33

34 ISR Process Interrupt komt op Huidige context wordt opgeslagen ISR adres wordt aan de hand van het interrupt-nummer uit de vector tabel gehaald Spring naar de ISR routine Run de routine De context wordt terug gezet Programma wordt vervolgd Memory Vector Table ISR Main Program Save Context Restore Context

35 NIOS II Interrupt of Exeption Control Diagram 1.Save de status registers 2.Disable interrupts. 3.Save de P.C.

Interrupt Interrupt routine in de HAL. int alt_irq_register(alt_u32 id, void* context, alt_isr_func handler); Interrupt registreren Welke interrupt Interrupt routine Context (parameter) 36 prototype van de functie alt_irq_register int alt_irq_register (alt_u32 id, void* context, void (*isr)(void*, alt_u32));

37 Voorbeeld NIOS II Interrupt (PIO) int main() { n = 0; init_pio(); while (1) { IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE, n); } return 0; } int n; volatile int edge_capture;

38 Voorbeeld NIOS II Interrupt (PIO) void init_pio() { } void* edge_capture_ptr = (void*) &edge_capture; /* Enable eerste 4 interrupt bits. */ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_BASE, 0xf); /* Reset the edge capture register. */ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BASE, 0x0); /* Register the interrupt handler. */ alt_irq_register( PIO_IRQ, edge_capture_ptr, handle_button_interrupts );

39 Voorbeeld NIOS II Interrupt (PIO) void handle_button_interrupts(void* context, alt_u32 id) { volatile int* edge_capture_ptr = (volatile int*) context; *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BASE); n++; IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_BASE, 0); } Welke schakelaar is ingedrukt.