Op een 8-bits controller heb ik in software een struct gedefinieerd met 24 members.
Ergens in de code wil ik telkens een serie members van plaats wisselen => herschikken.
Voor de uitleg ff een simpele struct:
Nu wissel ik puntje.x en puntje.y met een macro:
Het nadeel hiervan is dat het gewoon een inline functie is die ongewenst veel data en code geheugen verbruikt,... denk ik
Nu wil ik de swap in een functie uitvoeren.
zoiets als:
En dat slikt de compiler niet: "Function argument incompatible with its declaration" op regel 20.
De struct members hebben een gedefinieerd geheugen adres, dus moet er ook naar te pointen zijn
Helaas kan ik nergens iets vinden over het expleciet naar struct.members pointen, terwijl het bijvoorbeeld wel werrukt in een Borland compiler in een C omgeving ??!!!
Wie o wie denkt mee?
PS: Denk er wel aan dat het geheugen gelimiteerd is...
Ergens in de code wil ik telkens een serie members van plaats wisselen => herschikken.
Voor de uitleg ff een simpele struct:
C:
1
2
3
4
5
6
7
8
| struct punt { unsigned char x; unsigned char y; }; /* globalen */ struct punt puntje = { 10, 20 }; unsigned char tmp; |
Nu wissel ik puntje.x en puntje.y met een macro:
C:
10
11
12
13
14
15
| #define swap_macro(a,b,x) ((x) = (a), (a) = (b), (b) = (x)) /* swap a and b */ void een_routine (void) { swap_macro(puntje.x, puntje.y, tmp); } |
Het nadeel hiervan is dat het gewoon een inline functie is die ongewenst veel data en code geheugen verbruikt,... denk ik
Nu wil ik de swap in een functie uitvoeren.
zoiets als:
C:
10
11
12
13
14
15
16
17
18
19
20
21
| void swap_functie (unsigned char *a, unsigned char *b) { unsigned char tmp; tmp = *a; *a = *b; *b = tmp; } void een_routine (void) { swap_functie (&puntje.x, &puntje.y); } |
En dat slikt de compiler niet: "Function argument incompatible with its declaration" op regel 20.
De struct members hebben een gedefinieerd geheugen adres, dus moet er ook naar te pointen zijn
Helaas kan ik nergens iets vinden over het expleciet naar struct.members pointen, terwijl het bijvoorbeeld wel werrukt in een Borland compiler in een C omgeving ??!!!
Wie o wie denkt mee?
PS: Denk er wel aan dat het geheugen gelimiteerd is...