Enumerate typedef struct union functiepointers 1.

38
enumerate typedef struct union functiepointers 1

Transcript of Enumerate typedef struct union functiepointers 1.

Page 1: Enumerate typedef struct union functiepointers 1.

enumerate typedefstruct union

functiepointers

1

Page 2: 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

Page 3: Enumerate typedef struct union functiepointers 1.

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

Page 4: Enumerate typedef struct union functiepointers 1.

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

Page 5: Enumerate typedef struct union functiepointers 1.

struct minitellers{

unsigned int a :4;unsigned int b :3;unsigned int c :2;

};

Struct en bitvelden

015

abc

34678 bitnr

6

Page 6: Enumerate typedef struct union functiepointers 1.

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

Page 7: Enumerate typedef struct union functiepointers 1.

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 ?

Page 8: Enumerate typedef struct union functiepointers 1.

unionLijkt 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

Page 9: Enumerate typedef struct union functiepointers 1.

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

Page 10: Enumerate typedef struct union functiepointers 1.

DE2-70brandalarm_kamer1

brandalarm_kamer2

inbreekalarm_achter

inbreekalarm_voor

D1

D2

D3

D0

11

Page 11: Enumerate typedef struct union functiepointers 1.

struct en unionstruct 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

Page 12: Enumerate typedef struct union functiepointers 1.

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 afgegaanif(a.al.brandalarm_kamer1)

printf("verlaat kamer1\n");

return 0;}

13

Page 13: Enumerate typedef struct union functiepointers 1.

Functiepointer

pointer naar een functie

14

Page 14: Enumerate typedef struct union functiepointers 1.

Inleiding pointers

pointers

int a;a

a=45; 45

int* pa; pa

pa=&a;

15

Page 15: Enumerate typedef struct union functiepointers 1.

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;

5getallen[0]=3;

3

Pointers en een array

16

Page 16: Enumerate typedef struct union functiepointers 1.

#define AANTAL 2int getallen[AANTAL];

getallen

Een array van integers als parameter meegeven

telop(getallen,AANTAL);

int telop( ,int); int[]int*

PointersPointers en een array

int main(){

return 0;}

// prototype van de functie telop

17

Page 17: Enumerate typedef struct union functiepointers 1.

int* getallen[2];

getallen

Een array van “pointers naar integers”

getallen[0]= &a;

getallen[1]= &b;

int a;int b;

b

a

Pointerseen array van pointers

A=4;

4

*getallen[1]=6;

6

18

//Geef b de waarde 6 via de array getallen

Page 18: Enumerate typedef struct union functiepointers 1.

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**

Pointerseen array van pointers

int main(){

return 0;}

// prototype van de functie telop

19

Page 19: Enumerate typedef struct union functiepointers 1.

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

3

j

2

i

Pointersstructs en pointers

int main(){

return 0;}

// prototype van // de functie bewerk

20

Page 20: Enumerate typedef struct union functiepointers 1.

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**

?

Pointersstructs en pointers

int main(){

return 0;}

// prototype van de functie telop

// prototype van de functie telop

21

Page 21: Enumerate typedef struct union functiepointers 1.

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);

pointersstruct, array en pointers

22

Page 22: Enumerate typedef struct union functiepointers 1.

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;

pointersstruct, array en pointers

23

Page 23: Enumerate typedef struct union functiepointers 1.

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*void*

void*

float* pi=(float*)maakrij(5);

int* pi=(int*)maakrij(5);

Page 24: Enumerate typedef struct union functiepointers 1.

{ printf("Hoi Minor deelnemers\n");

}

Pointerspointer naar een functie

void drukaf ( )

int main(int argc, char *argv[]){

int a;

return 0;}

void ( )(*minor_embed) ;minor_embed=drukaf;minor_embed();

25

Page 25: Enumerate typedef struct union functiepointers 1.

pointersFunctie 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

Page 26: Enumerate typedef struct union functiepointers 1.

FunctiepointerFunctiepointer 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

Page 27: Enumerate typedef struct union functiepointers 1.

FunctiepointerFunctiepointer 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

Page 28: Enumerate typedef struct union functiepointers 1.

FunctiepointerFunctiepointer 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

Page 29: Enumerate typedef struct union functiepointers 1.

FunctiepointerFunctiepointer 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

Page 30: Enumerate typedef struct union functiepointers 1.

FunctiepointerFunctiepointer 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

Page 31: Enumerate typedef struct union functiepointers 1.

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);}

FunctiepointerFunctiepointer in een struct

32

Page 32: Enumerate typedef struct union functiepointers 1.

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

Page 33: Enumerate typedef struct union functiepointers 1.

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 ProgramSave

Context

RestoreContext

Page 34: Enumerate typedef struct union functiepointers 1.

35

NIOS II Interrupt of Exeption Control Diagram

1. Save de status registers2. Disable interrupts.3. Save de P.C.

Page 35: Enumerate typedef struct union functiepointers 1.

InterruptInterrupt routine in de HAL.

int alt_irq_register(alt_u32 id, void* context, alt_isr_func handler);

Interrupt registreren

Welke interruptInterrupt routineContext

(parameter)

36

prototype van de functie alt_irq_register

int alt_irq_register (alt_u32 id, void* context, void (*isr)(void*, alt_u32));

Page 36: Enumerate typedef struct union functiepointers 1.

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;

Page 37: Enumerate typedef struct union functiepointers 1.

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 );

Page 38: Enumerate typedef struct union functiepointers 1.

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.