1 / 38

e numerate typedef struct union functiepointers

e numerate typedef struct union functiepointers. enumerate. Een enumate is een opsomming van constante integerwaarden. enum richting { linksom=2 , rechtsom=5 };. enum richting { linksom , rechtsom };. int main () { enum richting draairichtingmotor ; draairichtingmotor = linksom ;

gerry
Download Presentation

e numerate typedef struct union functiepointers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. enumerate typedef struct union functiepointers

  2. enumerate Eenenumate is eenopsomming van constanteintegerwaarden. enum richting {linksom=2,rechtsom=5}; enum richting {linksom,rechtsom}; intmain() { enumrichtingdraairichtingmotor; draairichtingmotor=linksom; if(draairichtingmotor==linksom) printf("links\n"); printf("draairichting motor %d\n", draairichtingmotor); return 0; }

  3. enumerate Een enumate is een opsomming van constante integerwaarden. enumrichting {linksom,rechtsom}; typedefenumrichtingrichting; intmain() { richtingdraairichtingmotor; draairichtingmotor=linksom; if(draairichtingmotor==linksom) printf("links\n"); printf("draairichting motor %d\n", draairichtingmotor); return 0; }

  4. struct enumrichting {linksom,rechtsom}; typedefenumrichtingrichting; struct motor { inttoerental; richtingr; }; typedefstruct motor motor; intmain() { } struct motor m; motor m; m.r=linksom; m.toerental=1234;

  5. Struct en bitvelden structminitellers { unsignedint a :4; unsignedintb :3; unsignedintc :2; }; 4 3 7 15 6 0 bitnr 8 c b a

  6. Struct en bitvelden structminitellers { unsigned inttel1 :4; inttel2 :3; intteller; }; typedefstruct minitellers tellers; intmain() { } 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++; }

  7. Struct en bitvelden Om het overzichtelijktehoudenwillen we 3 lampen via eenstructaansturen, hoe kandatgedaanworden ? structlampen { unsigned intkamer_v :1; unsigned intkamer_a :1; unsigned intdouche:1; }; typedefstructlampenlmp; #define AAN 1 #define UIT 0 intmain() { return 0; } lmp s3={UIT,UIT,UIT}; s3.kamer_v=AAN;

  8. union Lijkt op structs alleen delen de velden een gemeenschappelijk geheugen. unionwaarde { inti; chars; }; g typedefunionwaardegetallen; getallen g; g.i=0; g.s='0'; g.i++; printf("s=%c i=%d\n",g.s,g.i);

  9. union unionadres { unsignedintad; unsignedchar* sw; }; typedefunionadresadres; unsignedchar w; adres schakelaars; schakelaars.ad=PIO_SWITCH_BASE; w= *schakelaars.sw; printf("w=%d\n",w);

  10. inbreekalarm_achter DE2-70 D0 inbreekalarm_voor D1 brandalarm_kamer1 D2 brandalarm_kamer2 D3

  11. struct en union structalarm { unsigned intinbreekalarm_achter :1; unsigned intinbreekalarm_voor :1; unsigned intbrandalarm_kamer1 :1; unsigned intbrandalarm_kamer2 :1; }; typedefstructalarmalarm; union al_verw { alarmal; unsignedcharingelezen; }; unionadres { unsignedintad; unsignedchar* sw; }; typedefunionadresadres;

  12. struct en union intmain() { unional_verw a={0}; adresschakelaars; 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. pointers Inleiding pointers int a; a 45 a=45; pa int* pa; pa=&a;

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

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

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

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

  19. Pointers structs en pointers typedefstruct { int i; char c; }dub; paar1 paar2 2 i 3 j // prototype van // de functiebewerk dub** int bewerk( ,int); intmain() { return 0; } dub paar1={2,’i’); dub paar2={3,’j’); dub *dubtabel[2]={&paar1,&paar2}; int x= bewerk(dubtabel,AANTAL);

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

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

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

  23. Pointers We willeneengeneriekefunctiemaakrijmaken die een array van pointers meeteruggeeft. De aantemaken array bevat x elementen. maakrij( unsigned int x ) { rij = malloc(sizeof( )*x); return rij; } void* void* void* int* pi=(int*)maakrij(5); float* pi=(float*)maakrij(5);

  24. Pointers pointer naareenfunctie void drukaf ( ) { printf("Hoi Minor deelnemers\n"); } int main(intargc, char *argv[]) { inta; return 0; } void (*minor_embed) ; ( ) minor_embed=drukaf; minor_embed();

  25. pointers Functieals parameter int telaf(int t) { return t-3; } int telop(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 struct cijfer { double waarde; char *naam; }; Een struct: int main() { struct cijfer vak1; vak1.waarde=6.4; vak1.naam=“C programmeren"; return 0; }

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

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

  30. Functiepointer Functiepointer in een struct int systemC(char* n,int cp) { printf("gegeven door %s cp %d \n“,n,cp); return 7; } typedef struct { int cp; char *naam; int (*onderdeel1) (char*,int); int (*onderdeel2) (char*,int); int (*onderdeel3) (char*,int); int (*project) (char*,int); }minor; 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. Functiepointer Functiepointer in een struct 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); }

  32. Interrupt bij NIOS ii Interrupt_routine(o.a.pointernaareenvariabele) Registratie van de interrupt_routine(met pointer naareenvar) op een interrupt nr

  33. ISR Process Interrupt komt op Huidige context wordtopgeslagen ISR adreswordtaan de hand van het interrupt-nummeruit de vector tabelgehaald Spring naar de ISR routine Run de routine De context wordtteruggezet Programmawordtvervolgd Memory Main Program Save Context Restore Context ISR Vector Table

  34. NIOS II Interrupt of Exeption Control Diagram Save de status registers Disable interrupts. Save de P.C.

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

  36. Voorbeeld NIOS II Interrupt (PIO) volatile intedge_capture; intn; intmain() { n = 0; init_pio(); while (1) { IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE, n); } return 0; }

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

  38. Voorbeeld NIOS II Interrupt (PIO) voidhandle_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); } Welkeschakelaar is ingedrukt.

More Related