Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdGerrit Lemmens Laatst gewijzigd meer dan 10 jaar geleden
1
enumerate typedef struct union functiepointers 1
2
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
3
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
4
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
5
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
6
struct minitellers { unsigned int a :4; unsigned int b :3; unsigned int c :2; }; Struct en bitvelden 015 ab c 34 6 7 8 bitnr 6
7
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
8
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 ?
9
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
10
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
11
DE2-70 brandalarm_kamer1 brandalarm_kamer2 inbreekalarm_achter inbreekalarm_voor D1 D2 D3 D0 11
12
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
13
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
14
Functiepointer pointer naar een functie 14
15
Inleiding pointers pointers int a; a a=45; 45 int* pa; pa pa=&a; 15
16
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
17
#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
18
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
19
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
20
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
21
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
22
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
23
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
24
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);
25
{ 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
26
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
27
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
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"; return 0; } 28
29
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
30
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
31
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
32
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
33
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
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
35 NIOS II Interrupt of Exeption Control Diagram 1.Save de status registers 2.Disable interrupts. 3.Save de P.C.
36
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
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
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
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.
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.